Newsgroup: it.comp.lang.visual-basic
Titolo: Convertire numeri dalla notazione USA nella noatazione Europea

Windows 98SE italiano + Excel 97 italiano (la virgola come separatore
decimale e il punto come separatore delle migliaia)
Ho scritto una macro per convertire i numeri dalla notazione USA in numeri
nella notazione europea (in pratica scambiare i punti con le virgole e
viceversa):
Sub ConvertNumber()
Selection.Replace What:=",", Replacement:="", LookAt:=xlPart
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart
Selection.Value = Selection.Value        'questa riga converte il testo in
valore numerico
Selection.NumberFormat = "#,##0.00"
Range("A1").Select
End Sub
Questa macro funziona perfettamente se le celle selezionate sono più di
una..
Esempio con due celle selezionate:
prima della macro        387,564.45    < text
                                  583,423.87    < text
dopo la macro            387.564,45    < numeric value
                                    583.423,87    < numeric value
Se però seleziono una sola cella e poi eseguo la macro il risultato non
viene riconosciuto come valore numerico ma come testo. Perché?
Esempio con una sola cella selezionata:
prima della macro        387,564.45    < text
dopo la macro            387564,45    < text
Grazie per qualsiasi aiuto.
--
gilgil
To write to my mailbox replace 259 with 159

 di una..
Adesso non ho tempo per fare delle prove, ma la mia impressione è che in
qualche modo Excel, quando deve operare su due celle consecutive, 'capisca'
che tu vuoi cambiare il formato di rappresentazione e lo applica
autonomamente.
Quando invece lavori su una sola cella, excel si limita a fare la
sostituzione.
Anche per excel, infatti, vale il concetto di distinzione fra Valore e
Rappresentazione.
Se tu in una cella scrivi 123,45 excel memorizza 123 45 (cioè non so come
scriverlo, diciamo che memorizza il valore, ma non si cura del formato dei
separatori). In fase di visualizzazione, va a vedere il formato impostato
per ciascuna cella, e formatta il valore secondo tale formato.
Quindi, andare a sostituire virgole con punti nel valore non è
significativo, e nello stesso tempo non lo è neppure andando a sostituire
nella visualizzazione, perchè tanto poi excel dovrebbe memorizzare il valore
senza separatori, e riprenderebbe nuovamente il vecchio formato nel momento
di visualizzare il valore.
Ti consiglio, anzichè sostituire virgole e punti, di andare nelle proprietà
della cella, e cambiare il formato di rappresentazione del numero, magari
usando un formato personalizzato. Se fai questo mentre il registratore di
macro è attivo, dovresti avere la sintassi esatta da inserire nella tua
macro.
Buona fortuna
Ciao
Alberto

 ha scritto nel messaggio
news:f1P5a.145991$ZE.42...@twister2.libero.it...

Grazie Alberto,
per le tue spiegazioni.
Ho fatto delle prove con i formati personalizzati ma non ho ottenuto nessun
risultato.
Mi sembra strano che per questo tipo di conversione non esistano già delle
macro preconfezionate in quanto il problema dovrebbe essere abbastanza
comune.
Quando hai un po' di tempo, se tu riuscissi ad approfondire il problema, mi
faresti un grosso piacere.
Ciao.
--
gilgil
Per scrivere alla mia mailbox sostituire nell'indirizzo il numero 259 con
159


Continuando a fare prove ho trovato che la macro seguente funziona sia nel
caso di piů celle selezionate, che nel caso di una sola cella cella
selezionata. Per convertire i risultati da testo a valori numerici ho dovuto
perň inserire la riga:
        c.Value = c.Value * 1
Questa sintassi funziona perň non credo che sia la sintassi piů corretta.
Per caso non sai quale sia la sintassi corretta per ricavare da un valore di
testo il corrispondente valore numerico? Esiste in VBA una funzione che
faccia lo stesso lavoro della funzione VALORE() del foglio di calcolo?
Grazie e ciao a tutti.
--
gilgil
Per scrivere alla mia mailbox sostituire nell'indirizzo il numero 259 con
159
Sub ConvertNumber2()
Dim c As Range
For Each c In Selection
    c.Replace What:=",", Replacement:="", LookAt:=xlPart
    c.Replace What:=".", Replacement:=",", LookAt:=xlPart
    c.Value = c.Value * 1
    c.NumberFormat = "#,##0.00"
Next
