Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL]Macro per convertire in maiuscolo il testo

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

[EXCEL]Macro per convertire in maiuscolo il testo

Postdi Ocimin » 05/11/06 17:14

Un saluto a tutta la comunità in primis :-) !
Vista la competenza e gli spunti che ho preso da questo sito per costruirmi una piccola macro mi rivolgo allo stesso per chiedere se c'è la possibilità di fare una cosa a cui non sto trovando una soluzione. Nelle varie operazioni di formattazione di cui ho bisogno, mi servirebbe riuscire a trasformare in maiuscolo tutto il testo delle celle di un determinato range. Questo passaggio sono riuscito a risolverlo in parte con questa istruzione:
Codice: Seleziona tutto
Set zona = Worksheets("Rinnovi").Range("D1:M" & cella_finale)
    For Each cella In zona
    cella.Value = UCase(cella.Value)
Next

Dico in parte perchè la macro in questione deve girare su un Excel per Macintosh, e chi ha avuto esperienze in merito sa di quanto sia più lenta un'istruzione con questa configurazione. Avevo avuto un problema simile con la copia dei campi che ho brillantemente risolto copiando il blocco delle celle invece che ogni singolo campo. Qui mi servirebbe fare una cosa simile ma non so se sia possibile (contate che non avevo mai visto una macro o del VBA fino ad una settimana fa...). In sostanza, invece di selezionare ogni singola cella mediante il ciclo FOR e copiarci il proprio contenuto trasformato in maiuscolo, dovrei copiare tutto il range "D1:M" & cella_finale e incollarlo nella medesima posizione con la trasformazione maiuscola. Si può operare in qualche modo o è concettualmente impossibile?
Grazie a chi mi aiuterà!
Saluti.

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Sponsor
 

Postdi Anthony47 » 05/11/06 19:13

Ciao Ocimin e benvenuto nel forum.

Una prima ipotesi potrebbe essere: formatta tutto con un font solo uppercase ed e' finita.

Se questo non e' applicabile, non avendo un Mac per le prove e non capendo se il problema e' la lentezza di excel per mac o la lunghezza del tuo range da convertire, suggerisco alla cieca:
-sul foglio2, da D1 in poi, riempi con la formula =MAIUSC(Foglio1!D1) (scrivi in D1 e copia in lungo e in largo); cosi' il lavoro della macro dovra' essere di copia da Foglio2 e incolla-speciale-valori su Foglio1. Come effetto collaterale ci sara' un rallentamento dei ricalcoli, visibile se il range da portare in maiuscolo e' lungo (effetto delle formule aggiunte); eventualmente prova con Calcola in Manuale.
-prova se invece del ciclo For Each/Next sia piu' veloce il ciclo For/Next, con la macro strutturata cosi':
Codice: Seleziona tutto
For I = 1 To 10000   'Righe
For J = 4 To 13          'Colonne
Cells(I, J).Value = UCase(Cells(I, J).Value)
Next J
Next I

Ovviamente devi sostituire i valori limite di I e J con quelli reali della tua applicazione; prova, comunque su Windows questo metodo "non velocizza".

Ciao,
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Ocimin » 06/11/06 00:42

Innanzitutto grazie per la risposta.
La prima soluzione in effetti taglierebbe la testa al toro ma ci sono due problemi. Il carattere dovrebbe essere di tipo standard in quanto il file in questione viene spedito ad altre strutture e se non fosse già presente su qualsiasi sistema operativo come capita con Times e Arial, diventerebbe un problema (potrebbe non essere così facile dire a tutti di installarlo). In seconda battuta non dovrebbe essere particolarmente "esotico" in quanto alla fine di tutto viene stampato su delle etichette che devono rimanere sobrie. A quale carattere avevi pensato?
Anche la seconda soluzione non è male. Per una maggior pulizia del progetto, però, preferirei se possibile operare in un altro modo, ovvero creando il foglio2 come mi hai descritto durante l'esecuzione della macro per poi cancellarlo alla fine. Se però l'unica possibilità in questo senso è quella di andare di casella in casella a scrivere il valore =MAIUSC(Foglio1!CELLA) sono al punto di partenza.
La terza non porta miglioramenti. Non so come mai ma per certe operazioni Excel 2004 per Mac è veramente molto più lento che sul PC (e il Mac in questione è tutt'altro che vecchio). Credo sia una cattiva implementazione del VBA...fattostà che, ad esempio, le operazioni di copia/incolla impiegano circa 3 volte tanto (forse anche di più) mentre l'assegnazione di formattazione a celle o righe ha velocità comparabili.
Dimenticavo...ad occhio e croce queste operazioni vengono applicate a 3000/4000 celle.

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Postdi Anthony47 » 06/11/06 01:21

Allora:
Codice: Seleziona tutto
 A quale carattere avevi pensato?

Sul PC ho a disposizione un Engravers Mt (tutto maiuscolo) e il Copperplate Gothic (maiuscolo+maiuscoletto) abbastanza lineari; sono std, non li ho installati io. Non so cosa c' e' di std sul mac. Non so nemmeno se excel consente di integrare il font nel file, nel caso sia non installato sul pc che lo esegue.

Per quanto riguarda l' opzione formula, io le avrei messe una tantum sul foglio2 del workbook, magari mettendolo nascosto (Sheets("Foglio2").Visible = False); ma come e' fatto il tuo file e che uso ne devi fare non lo so, quindi non so se puo' essere applicabile; pensandoci bene, pero', penso che anche scrivere Nmila formule tutte uguali sia moolto piu' veloce che elaborare Nmila cicli di macro: la scrivi 1 volta, la copi in tutto il range.

C' e' qualche spunto utile?

Ciao,
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Ocimin » 06/11/06 03:23

Si, direi che il foglio nascosto è un'ottima soluzione! Il carattere lo lascerei perdere...l'idea di ricevere 50 telefonate per spiegare cosa sia successo al nuovo file preferisco evitarle :-P
Ti ringrazio ancora del supporto e delle idee :-)

P.S.: Ho fatto un test con un file di prova. Il mio PC, un XP 2800+ con 1GB di RAM ed Excel2003 su WinXP, ci mette 6/7 secondi a completare l'operazione; un G4 1,64GHz e 1GB di RAM ultimo MacOSX ed Excel2004 2 minuti e qualche secondo...per farti capire il motivo che mi spinge ad ottimizzare.

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Postdi Ocimin » 06/11/06 03:31

Dimenticavo...la prova è stata fatta senza aver ancora implementato il nuovo metodo con foglio nascosto.
Ultima cosa: che andasse meflio il foglio in più rispetto alla macro lo sapevo, è che avendo già 7 fogli nel documento volevo evitare di incasinarlo ulteriormente. Con il foglio nascosto il problema non si pone.

[OT]
Ma non è possibile modificare i propri messaggi spediti?
[/OT]

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Postdi archimede » 06/11/06 08:52

Ci sono per caso celle vuote nel range? Se sì, puoi provare qualcosa tipo:
Codice: Seleziona tutto
If (cella.Value > " ") Then _
   cella.Value = UCase(cella.Value)
Verificherei anche di aver installato la più recente SR di Office.
Ocimin ha scritto:Ma non è possibile modificare i propri messaggi spediti?
No.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi Ocimin » 07/11/06 03:26

Celle vuote non ce ne sono, però ci sono colonne con dei numeri. Togliendo quelle sono riuscito a guadagnare un bel po' in velocità...adesso ci mette poco più di 30 secondi (per le mie esigenze sono sopportabili). Appena avrò una giornata meno concitata di questa proverò ad implementare la soluzione del foglio nascosto e deciderò quale utilizzare. Grazie ancora a tutti delle idee!

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Postdi Ocimin » 07/11/06 03:35

[OT]
Mettete la possibilità di rieditare i post o vi riempio il forum di P.S.:!!!!
:-P
[/OT]

La lentezza non credo sia un problema di versione. Pensa che facendo girare la stessa macro su un Mac meno potente con installato MacOS 9.2 ed excel 98, la velocità è di pochi secondi superiore a quella del mio PC. Devono aver fatto un pessimo lavoro di conversione sulla versione per MacOS X....

Ocimin
Ocimin
Utente Junior
 
Post: 15
Iscritto il: 05/11/06 16:55

Postdi cassioli » 08/11/06 09:26

Ocimin ha scritto:[OT]
Mettete la possibilità di rieditare i post o vi riempio il forum di P.S.:!!!!
:-P
[/OT]

Niente da fare, l'amministratore è de coccio! :P
Forse potremmo intasare il forum di "P.S." finche' non riattiva l'EDIT! :D

Vabbe', scherzavo... :undecided:
cassioli
Utente Senior
 
Post: 1014
Iscritto il: 05/03/04 11:02


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL]Macro per convertire in maiuscolo il testo":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti