VBA e problemi di visualizzazione dei numeri decimali in Excel

Spesso ho necessità di utilizzare piccoli script VBA per eseguire determinate operazioni su Excel, a volte operazioni anche su numeri. Purtroppo è facile con Excel fare confusione quando si lavora con i numeri, difatti un numero può essere rappresentato in modo differente a seconda delle proprie impostazioni. Ad esempio un numero può essere rappresentato nei seguenti modi: […]

Spesso ho necessità di utilizzare piccoli script VBA per eseguire determinate operazioni su Excel, a volte operazioni anche su numeri. Purtroppo è facile con Excel fare confusione quando si lavora con i numeri, difatti un numero può essere rappresentato in modo differente a seconda delle proprie impostazioni. Facciamo un po’ di chiarezza :-).

Innanzitutto uno stesso numero può essere rappresentato con varie notazioni:

  • 1000,123
  • 1000.123
  • 1.000,123

supponendo che il numero effettivo sia 1000 con parte decimale 123. In questo caso le varie notazioni internazionali possono rappresentarlo in vari modi come ad esempio 1.000,123 dove il punto indica le migliaia e la virgola la parte decimale.

Il problema può essere gestito in due modi usando Excel:

  1. nel caso in cui si lavori unicamente con Excel (senza usare VBA), è sufficiente configurare correttamente le opzioni di Excel.
  2. nel caso in cui utilizziamo script VBA o macro, che esportano ad esempio i dati su file ed effettuano manipolazione sui numeri, bisogna controllare invece le impostazioni del sistema operativo.

Vediamo il primo caso. Come ho scritto, nel caso in cui si lavori unicamente con un foglio Excel e NON ci sia la necessità di esportare dati tramite VBA, gli unici parametri importanti per la configurazione di punto/virgola si trovano all’interno delle opzioni di Excel.

excel_options
Opzioni avanzate di Excel.

A seconda delle proprie necessità possiamo configurare punto o virgola come separatore per i numeri decimali, così come per le migliaia.

Nel secondo caso, in cui usiamo VBA per esportare i dati (ad esempio elaborare/esportare i dati di uno sheet Excel in un file txt) entrano in gioco le impostazioni del sistema operativo. Questo vuol dire che i numeri esportati all’esterno di Excel potrebbero avere una notazione diversa da quella configurati in Excel stesso. Ad esempio:

  1. in Excel abbiamo il numero 1000,123
  2. VBA esporta il numero prelevato da una cella Excel come 1000.123

Potrebbe avvenire una “conversione” di questo tipo se sono configurate male le impostazioni di “Region and Language” di Windows. Dunque controlliamo la nostra configurazione all’interno del pannello di controllo, come visibile in figura.

region_and_language

region_and_language_window

Dunque apriamo “Additional settings“, controlliamo i separatori configurati per decimali e migliaia (Digit grouping), ed eventualmente modifichiamoli.

Region_and_language_additional_settings

Matteo

Utility Java per convertire numeri esadecimali

Ho realizzato in Java una piccola utility da linea di comando che effettua la conversione di un numero decimale in uno esadecimale e viceversa. Prima di vedere come utilizzarla, vediamo brevemente cos’è un numero esadecimale, per chi non lo ricordasse ;-).

Da wikipedia: “Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l’esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli.”
[…]

Ho realizzato in Java una piccola utility a linea di comando che effettua la conversione di un numero decimale in uno esadecimale e viceversa. Prima di vedere come utilizzarla, vediamo brevemente cos’è un numero esadecimale, per chi non lo ricordasse ;-).

Da wikipedia: “Il sistema numerico esadecimale (spesso abbreviato come esa o hex) è un sistema numerico posizionale in base 16, cioè che utilizza 16 simboli invece dei 10 del sistema numerico decimale tradizionale. Per l’esadecimale si usano in genere simboli da 0 a 9 per le prime dieci cifre, e poi le lettere da A a F per le successive sei cifre, per un totale di 16 simboli.

Nella seguente tabella è visibile la conversione da decimale a esadecimale a binario.

Ad esempio, se abbiamo il numero esadecimale 1F5A, possiamo effettuare la conversione in decimale nel seguente modo: (1 x 16^3) + (15 x 16^2) + (5 x 16^1) + (10 x 16^0) = 8026. Inoltre, spesso un numero esadecimale viene indicato anteponendo al numero 0x, specialmente nei sistemi Unix-like, diventando ad esempio 0x1F5A.

Nel momento in cui l’utility viene avviata con il comando HCT (acronimo di Hex Conversion Tool, la classe che contiene il main), viene fornito il seguente menu:

$ java HCT
                       _____________________________
                      /                             \
                     |      Hex Conversion Tool      |
                     |             v1.0              |
                      \_____________________________/

            [ Matteo Cappelli aka roghan | matcap83@libero.it ]

[ Options ]
 1 - convert decimal to hex
 2 - convert hex to decimal
 3 - exit

Choose an option:
|

L’utility, con la relativa documentazione javadoc, è scaricabile dal seguente link:

roghan