Condividi:        

macro excel inserire caratteri nella cella e tutto maiuscolo

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro excel inserire caratteri nella cella e tutto maiuscolo

Postdi turbonet » 12/02/23 10:43

salve, cerco un piccolo aiuto per queste due macro che non riesco a fare, in quando le mie conoscenze sono scarse.

per la prima macro devo inserire delle virgolette per ogni cella, sia all'inizio che alla fine...
il problema è che troppo lenta, per una riga di 29 colonne inpiega 28 secondi, quindi per 1703 righe, ho calcolato che servono 785 minuti di esecuzione...
e possibile velocizzarla?
inoltre, il range che deve operare puo variare, quindi serve una selezione dinamica.

invece per la seconda macro, deve trasformare tutto in maiuscolo...
anche qui la macro e lentissima... e possibile velocizzarla?
anche qui, il range che deve operare puo variare, quindi serve una selezione dinamica.

ringrazio chi puo aiutarmi.

Sub AggiungereCaratteri()

Dim D1, D2 As Date
Dim tempoimpiegato As String
D1 = Time

Application.ScreenUpdating = False
Application.EnableEvents = False

Dim celle As Range
Set celle = Range("A2:AC2")
Dim c As Range
For Each c In celle

c.Value = """" & c.Value
c.Value = c.Value & """"
Next

Application.EnableEvents = True
Application.ScreenUpdating = True

D2 = Time
tempoimpiegato = Format(D2 - D1, "hh:mm:ss")
MsgBox "Tempo impiegato: " & tempoimpiegato

End Sub

Sub tuttoMaiuscolo()

Dim D1, D2 As Date
Dim tempoimpiegato As String
D1 = Time

Application.ScreenUpdating = False
Application.EnableEvents = False

Range("A2").SpecialCells(xlLastCell).Select
R = ActiveCell.Row
c = ActiveCell.Column

Range("A2").Select
For colonna = 1 To c
For riga = 1 To R
Cells(riga, colonna).Value = UCase(Cells(riga, colonna).Value)
Cells(riga, colonna).NumberFormat = "General"
Next riga
Next colonna

Range("A2").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Columns.AutoFit

Application.EnableEvents = True
Application.ScreenUpdating = True

D2 = Time
tempoimpiegato = Format(D2 - D1, "hh:mm:ss")
MsgBox "Tempo impiegato: " & tempoimpiegato

End Sub
turbonet
Utente Junior
 
Post: 16
Iscritto il: 01/04/15 21:24

Sponsor
 

Re: macro excel inserire caratteri nella cella e tutto maius

Postdi Anthony47 » 12/02/23 21:38

Per il primo codice, non capisco il perche' dei tempi biblici che hai sperimentato, a me per modificare un migliaio di celle ha impiegato 1-2 secondi.
Potrebbe esserci un problema di formule che si ricalcolano nel tuo workbook, quindi prova ad impostare "Calculation = xlCalculationManual" quando parte il loop e poi rispristinare xlCalculationAutomatic a fine ciclo.
Inoltre non ha senso accedere due volte alla cella (operazione "lenta") per aggiungere prima le virgolette iniziali e poi le finali.
Quindi, invece di
For Each c In celle
c.Value = """" & c.Value
c.Value = c.Value & """"
Next

prova con
Codice: Seleziona tutto
Application.Calculation = xlCalculationManual
For Each c In celle
    If Len(c.Value) > 0 Then        '???
        c.Value = Chr(34) & c.Value & Chr(34)
    End If                          '???
Next
Application.Calculation = xlCalculationAutomatic
(ho modificato per aggiungere le Virgolette solo nelle celle nuon vuote; se e' sbagliato allora togli le due righe marcate ???

La seconda macro puo' essere modificata piu' drasticamente; ad esempio:
Codice: Seleziona tutto
Sub tuttoMaiuscolo()
Dim D1 As Single
'
D1 = Timer
Application.ScreenUpdating = False
Application.EnableEvents = False

Dim wArr
'Legge:
wArr = ActiveSheet.UsedRange.Value
'Modifica:
For i = 1 To UBound(wArr)
    For J = 1 To UBound(wArr, 2)
        wArr(i, J) = UCase(wArr(i, J))
    Next J
Next i
'Riscrive:
ActiveSheet.UsedRange.NumberFormat = "General"
ActiveSheet.UsedRange.Value = wArr
'
Range("A2").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Columns.AutoFit
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "Tempo impiegato: " & Format(Timer - D1, "0.0")
End Sub

In questo caso si potrebbero anche eliminare le righe che manipolano EnableEvents e ScreenUpdating perche' le operazioni vengono fatte tutte in un unico blocco

Ovviamente potresti usare UsedRange anche nella prima macro:
Codice: Seleziona tutto
Set celle = ActiveSheet.UsedRange

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro excel inserire caratteri nella cella e tutto maius

Postdi turbonet » 13/02/23 12:39

salve, ho applicato tutte le correzioni suggerite da anthony47...
devo dire che tutte e due le macro adesso hanno una esecuzione di 1 secondo, e funzionano perfettamente...
ringrazio infinitamente anthony47 della disponibilita'.
turbonet
Utente Junior
 
Post: 16
Iscritto il: 01/04/15 21:24


Torna a Applicazioni Office Windows


Topic correlati a "macro excel inserire caratteri nella cella e tutto maiuscolo":


Chi c’è in linea

Visitano il forum: papiriof, raimea e 62 ospiti