Questa domanda è un po 'vecchia, ma ad oggi non sembra avere una risposta. Ho anche visto domande simili su un numero di siti, ma non ho ancora trovato alcuna risposta che coinvolga solo le funzioni di Excel integrate. Tuttavia, è abbastanza facile risolverlo con VBA. Non devi nemmeno sapere come programmare per farlo, perché la funzione richiesta è così semplice.
Con la tua cartella di lavoro aperta, premi semplicemente Alt + F11 (per aprire l'editor VBA) Quindi fai clic sulla voce di menu Inserisci > Modulo
Nel nuovo modulo VBA, inserisci quanto segue:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Quello che fa è semplicemente usare la Format
funzione di VBA anziché la funzione di Excel TEXT
. Questo è esattamente quello che vuoi.
Questa nuova funzione formatterà qualsiasi data (o numero) in base alla stringa di formato specificata. Interpreterà la stringa di formato usando la notazione standard ( en-US ), indipendentemente dalle impostazioni internazionali del sistema operativo.
Per usarlo nella tua cartella di lavoro, digita semplicemente =FMT(A1, "yyyymmdd_hhss")
invece di =TEXT(A1, "yyyymmdd_hhss")
. (Ovviamente puoi cambiare il riferimento di cella e la stringa di formato secondo necessità.)
A proposito, puoi nominare la funzione come preferisci. Ho scelto FMT
perché era breve e perché la funzione può formattare sia numeri che date. Ma puoi scegliere qualcosa di più descrittivo se vuoi. Ricorda solo di usare lo stesso nome nel tuo foglio di lavoro come nel codice VBA.
Si noti che le stringhe di formato VBA non sono esattamente le stesse delle stringhe di formato personalizzato di Excel (ad esempio, utilizzare "n" anziché "m" per minuti), ma sono molto simili. Cerca qui i dettagli o cerca MSDN per "Funzione formato (Visual Basic, Applications Edition)". Scorri verso il basso per vedere i vari identificatori del formato della data.
Metodo 2
Un altro approccio che utilizza anche VBA, ma che in realtà potrebbe essere più facile da mantenere, è il seguente:
- Applica il formato data desiderato a una cella, utilizzando la normale finestra di dialogo Formato cella. Se preferisci, questa cella può trovarsi su un foglio nascosto: non è necessario che sia visualizzata all'utente finale. Supponiamo che tu abbia applicato il formato
yyyymmdd\_hhss
alla cella $ A $ 1 (nota che il carattere di sottolineatura deve essere sfuggito come mostrato).
- Aggiungi la
GetFormat
funzione (mostrata sotto) a un modulo VBA nella tua cartella di lavoro.
- Entra
=GetFormat($A$1, TRUE)
in un'altra cella (es. $ B $ 1 )
- Tale funzione restituirà la versione localizzata della stringa di formato. Quindi, anche se originariamente hai formattato $ A $ 1 con
yyyymmdd\_hhss
, quando apri la cartella di lavoro su un computer usando la lingua francese (ad esempio), la funzione mostrerà aaaammjj\_hhss
.
- Ora fai semplicemente riferimento alla seconda cella in tutte le tue
TEXT
funzioni. Ad esempio: =TEXT(F22, $B$1)
.
Ecco il codice VBA:
Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
If UseLocal Then
GetFormat = Cell.NumberFormatLocal
Else
GetFormat = Cell.NumberFormat
End If
End Function
Questo ci consente di "ispezionare" la cella formattata originariamente ($ A $ 1) per recuperare la stringa di formato localizzata. Quella stringa rappresenterà lo stesso formato che hai applicato, ma utilizzerà le lettere corrette per l'interpretazione di TEXT (ad esempio "j" anziché "d"), quindi il valore visualizzato delle date sarà costante in tutte le versioni locali. Se si desidera utilizzare solo un formato data per l'intera cartella di lavoro, è necessario eseguire i passaggi 1-4 una sola volta. Quindi ripeti il passaggio 5 (la funzione TESTO) in tutte le celle in cui lo usi attualmente, ma invece di codificare un formato, faresti semplicemente riferimento alla cella che contiene la stringa di formato localizzata ( $ B $ 1 nelle istruzioni di esempio) .
Si noti che il secondo argomento GetFormat
indica alla funzione se restituire o meno la versione localizzata (che dipende dalle impostazioni internazionali) o la versione "standard" (che si basa sempre su en-US).
Ecco alcune schermate che potrebbero renderlo più chiaro.
- Nella figura, la colonna 1 elenca diverse rappresentazioni di una singola data con diversi formati applicati.
- Le righe 2 e 3 utilizzano i formati di data "predefiniti di sistema" di Excel. (Questi sono indicati da un asterisco principale nella finestra di dialogo Formato e indicano che deve essere utilizzato il formato data predefinito dell'utente.) Inoltre, la riga 5 utilizza un LCID tra parentesi, che impone che la lingua utilizzata per i nomi di mese e giorno sia l'inglese ( LCID diversi possono essere utilizzati per specificare altre lingue).
- La seconda colonna mostra il risultato di
GetFormat(Cell, FALSE)
per ogni cella nella colonna 1. (Ricorda che FALSE
per il secondo parametro fa sì che la funzione restituisca i formati NON localizzati ).
- La terza colonna mostra ciò che
GetFormat(Cell, TRUE)
restituisce per ogni cella nella colonna 2. (ovvero i formati localizzati ).
- La quarta colonna mostra il risultato della funzione TESTO utilizzando il valore della data non elaborata originale e il risultato localizzato di
GetFormat
ri-produrre il formato mostrato nella colonna 1. Notare che NON è stata applicata alcuna formattazione numerica a questa colonna. I valori sono il risultato diretto della funzione TEXT.
I risultati per il caso inglese (US) sopra riportato non sono molto interessanti, ma puoi confrontarli con i seguenti risultati che sono stati ottenuti modificando le Impostazioni regionali del mio sistema operativo in varie altre impostazioni locali. È importante sottolineare che, utilizzando GetFormat
in combinazione con TEXT
siamo in grado di mantenere un risultato costante per i formati numerici (quelli che non includono i nomi dei giorni o dei mesi) in tutte le versioni locali. E vincolando la lingua usando un LCID (come nella riga 5) possiamo anche mantenere un formato costante includendo anche i nomi di giorno e mese.
Questo metodo funziona per la maggior parte dei locali, tuttavia va notato che gli script utilizzati per rappresentare i numeri indù-arabi NON sono gli stessi in tutti i locali. Pertanto impostazioni internazionali come quelle della locale nepalese (India) risulteranno in formati di data che "sembrano" diversi dalle date degli Stati Uniti. Ma questi sono in realtà nello stesso "formato" in termini di posizioni dei numeri - usano semplicemente simboli diversi per i numeri.