Condividi:        

[VBA Excel] Piccolo aiuto su formato numeri

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

[VBA Excel] Piccolo aiuto su formato numeri

Postdi maxmula » 28/05/10 15:04

Ciao a tutti,
mi trovo a dover stampare, in un grafico, delle etichette che hanno il seguente formato:

Codice: Seleziona tutto
Max: 23.456.789
Min: 21.345.678
Delta: 2.111.111


Siccome sono un perfezionista, mi piacerebbe avere i numeri allineati a destra e le relative categorie allineate a sinistra:

Codice: Seleziona tutto
Max:      23.456.789
Min:      21.345.678
Delta:     2.111.111


quindi dovrei fare in modo di aggiungere un adeguato numero di spazi prima di ogni numero, così da avere tutte le linee della stessa lunghezza.
So che con la funzione Format è possibile stampare un valore in modo che abbia sempre il numero richiesto di cifre, ad esempio
Codice: Seleziona tutto
Format(2111111, "0000000000,0")

restituisce la stringa "00.002.111.111" (comprensiva dei separatori delle migliaia)

Mi piacerebbe però avere uno spazio al posto degli zeri iniziali. Che voi sappiate esiste un formato che lo faccia oppure dovrò procedere con più tradizionali operazioni sulle stringhe?

Grazie in anticipo,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Sponsor
 

Re: [VBA Excel] Piccolo aiuto su formato numeri

Postdi Flash30005 » 29/05/10 00:38

Il fatto che sostituisci gli zeri con uno spazio non può più essere considerato un numero e quindi andrebbe trattato come stringa
nel caso da te illustrato potrei pensare che con la funzione Replace risolverebbe il problema
es.:
Codice: Seleziona tutto
A = Range("A1").Value
Range("B1").Value = "'" & Replace(A, "0", " ")

ma se hai degli zeri all'interno del valore saranno ugualmente sostituiti dallo spazio e il valore non è più leggibile
quindi potresti intervenire con una "scansione" della stringa carattere dopo carattere effettuando la sostituzione fino a che non trova il primo valore maggiore di zero
Codice: Seleziona tutto
For Ncar = 1 to len(stringa)
If Mid(stringa, NCar, 1) = "0" then
NewStr = NewStr & " "
else
NewStr = NewsStr & Mid(stringa, NCar, Len(stringa)-NCar)
Goto esci
endif
next Ncar
esci:


Ciao

N.B.Macro da testare in quanto realizzata direttamente nel messaggio solo per fornire un input
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [VBA Excel] Piccolo aiuto su formato numeri

Postdi ricky53 » 29/05/10 14:10

Caio,
aggiungo una mia proposta alternativa a quanto già scritto da Flash.

Necessità:
tu vuoi avere degli spazi davanti ad un numero per una lunghezza totale di 10 caratteri più la virgola ed un decimale totale "12" caratteri

in "A1" ti hai il tuo numero
in "B1" avrai il risultato della macro seguente

Codice: Seleziona tutto
Cells(1, 2) = Application.Rept(" ", 12 - Len(Cells(1, 1))) & Cells(1, 1)


Ciao da Ricky53
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [VBA Excel] Piccolo aiuto su formato numeri

Postdi maxmula » 29/05/10 23:50

L'idea di ricky è più o meno è quello che ho fatto alla fine.
Dopo un po' di elucubrazioni ho risolto così:

Codice: Seleziona tutto
           
               'formatta l'etichetta dati
               MX = Format(Val(CHARTSETUP.v_Max_Recorded), "0,0")     
               'Il valore "MAX da stampare. E' memorizzato come stringa (es."2154788 nsec").
               'CHARTSETUP è un tipo dati da me definito e contiene informazioni varie.

                MN = Format(Val(CHARTSETUP.v_Min_Recorded), "0,0") 
                    'Ovviamente il valore "MIN". Stesso formato del precedente.

                DL = Format(CHARTSETUP.y_Delta, "0,0")
                'Differenza dei due precedenti. memorizzato come Double altrove nel programma.
               
                L = Application.WorksheetFunction.Max(Len(MX), Len(MN))   
                'vediamo chi è il più "lungo"
               
                LEBOL = "Max:   " & MX & Chr(10) _
                      & "Min:   " & Space(L - Len(MN)) & MN & Chr(10) _
                      & "Delta: " & Space(L - Len(DL)) & DL
               'Questo sarà il testo da stampare.     


Andando a stampare il valore di LEBOL (ad esempio in modalità immediata) si ottiene:
Codice: Seleziona tutto
?LEBOL
Max:   2.295.320
Min:   1.860.400
Delta:   434.920




Ch è ciò che volevo.
Ovviamente, perchè il tutto funzioni, nel grafico bisognerà usare un font Monospaced (ad esempio Courier New) per le etichette in questione.

Grazie per la consulenza!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34


Torna a Applicazioni Office Windows


Topic correlati a "[VBA Excel] Piccolo aiuto su formato numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 28 ospiti