Jean deve sostituire le virgole con i punti in una tabella di numeri. Lavora in Francia, utilizzando un PC francese, ma ha bisogno di “tradurre” questi numeri per un’applicazione americana non Excel. Quando esegue manualmente una ricerca e sostituzione, tutto funziona bene. Ovviamente i suoi numeri vengono convertiti in stringhe, ma con Jean va bene. Quando tenta di eseguire la stessa operazione di ricerca e sostituzione in una macro, non accade nulla; le virgole sembrano essere ignorate. Jean si chiede come può eseguire questa operazione in una macro invece di doverla eseguire manualmente ogni volta.

È relativamente facile modificare temporaneamente ciò che Excel utilizza come impostazioni regionali in modo che possa visualizzare le informazioni proprio come vuole Jean. La seguente macro commuterà avanti e indietro piuttosto facilmente tra le impostazioni desiderate:

Sub ChangeNumberFormat()

With Application         .UseSystemSeparators = False         If .DecimalSeparator = "." Then             .DecimalSeparator = ","

.ThousandsSeparator = "."

Else            .DecimalSeparator = "."

.ThousandsSeparator = ","

End If     End With End Sub

Ciò cambia il modo in cui vengono visualizzate le informazioni e quindi è possibile esportare le informazioni in qualsiasi formato non Excel desiderato (come CSV). Una volta terminato, esegui di nuovo la macro e dovresti ripristinare le impostazioni internazionali come erano originariamente. Il vantaggio di questo approccio è che non si cambia mai realmente ciò che è nelle celle, ma solo come vengono visualizzate le informazioni. Ciò significa che i tuoi numeri rimangono numeri, in grado di continuare ad essere utilizzati come tali.

Se hai bisogno di qualcosa di più diretto, probabilmente è meglio non usare Trova e sostituisci. Utilizzare invece la macro per modificare direttamente ciò che è in ogni cella. Un tale approccio può essere eseguito molto più velocemente rispetto a fare affidamento su Trova e sostituisci, anche in una macro. Ecco una semplice applicazione di questo concetto:

Sub SwitchCommasPeriods()

Dim c As Range     Dim sTemp As String          For Each c In Selection         sTemp = c.Text         sTemp = Replace(sTemp, ",", "|")

sTemp = Replace(sTemp, ".", ",")

sTemp = Replace(sTemp, "|", ".")

c = sTemp     Next c End Sub

Nota un paio di cose nella macro. Innanzitutto, esamina la proprietà Text per ogni cella. Il motivo è perché la proprietà Text restituisce il valore formattato della cella, in altre parole, ciò che viene visualizzato. (Se guardi semplicemente la proprietà Value, otterrai il numero non formattato, che non è quello che vuoi usare.)

La seconda cosa da notare è che la funzione Sostituisci viene utilizzata per sostituire prima tutte le virgole con una barra verticale, poi tutti i punti con virgole e infine tutte le barre verticali con punti. Questo approccio è necessario perché essenzialmente stai scambiando punti e virgole nel testo.

Per utilizzare la macro, seleziona semplicemente le celle che desideri modificare e quindi eseguila. Vengono elaborate solo le celle selezionate. Se una cella contiene una formula, la macro sostituisce quella formula con il risultato elaborato della formula. Questo dovrebbe andare bene per gli scopi di Jean, comunque.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13675) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.