Ordine della string di text di Excel

Ho un sacco di codici di prodotto in Excel. Questo è quello che sembrano.

000-00021-001-nav

Tenga presente che sono tutte lunghezze diverse. Voglio riformateli per sembrare così

NAV-000-00021-001

Qualcuno sa come fare questo? La guida è molto apprezzata.

Supponendo che la cella sia in A1, è ansible utilizzare la formula =CONCATENATE(UPPER(RIGHT(A1,3)),"-",LEFT(A1,LEN(A1)-4))

È ansible utilizzare una routine VBA abbastanza flessibile. Di seguito si presume che la string consista di segmenti separati da dash e che si desidera invertire i primi e gli ultimi segmenti e che tutto sarà capitalizzato.

Permette di utilizzare un diverso delimitatore, ma questo è un argomento facoltativo.

Per entrare in questa function definita dall'utente (UDF), alt-F11 apre l'editor di Visual Basic. Assicurarsi che il progetto sia evidenziato nella window Project Explorer. Quindi, dal menu principale, seleziona Inserisci / Modulo e incolla il codice qui sotto nella window che si apre.

Per utilizzare questa function definita dall'utente (UDF), immettere una formula simile

 =LastToFirst(A1) 

in qualche cellula.

 Option Explicit Function LastToFirst(S As String, Optional sDelimit As String = "-") As String Dim V As Variant Dim I As Long Dim sTemp As String V = Split(UCase(S), sDelimit) sTemp = V(0) V(0) = V(UBound(V)) V(UBound(V)) = sTemp LastToFirst = Join(V, sDelimit) End Function 

Se si desidera utilizzare una formula di foglio di lavoro che invertire i primi e gli ultimi segmenti e sia indifferente alla lunghezza dei segmenti o al numero di segmenti, è ansible provare a:

 =UPPER(IFERROR(TRIM(RIGHT(SUBSTITUTE(A1,"-",REPT(" ",99)),99))& MID(A1,FIND("-",A1),LEN(A1)-LEN(TRIM(RIGHT(SUBSTITUTE(A1,"-", REPT(" ",99)),99)))-FIND("-",A1)+1)&LEFT(A1,FIND("-",A1)-1),A1)) 

Supponendo di volerlo fare in VBA e non con un'espressione Excel:

Questo suona piuttosto in grado, in particolare se VBA ha una function RIGHT () (non ricordo se lo fa o no).

Probabilmente avrai il minimo sforzo se lo programmate in più dichiarazioni, piuttosto che in una sola espressione nidificata.

Esattamente come si avvicinereste dipenderà dalle caratteristiche della string, e ciò che è costante e ciò che non è. Se l'ultima sezione della string è sempre di tre caratteri, ad esempio, è sufficiente determinare la lunghezza della string e fare una sottostring. Se l'unica cosa garantita per essere costanti è i tre trattini, dovresti usare un'altra function (dimentico il nome ma uno che trova una sottostring all'interno di una string e restituisce la posizione) per determinare where è l'ultimo trattino situato nella string.

Mi avvicinerò qualcosa di simile (questo è pseudocode):

 ' Determine length of string ' Determine starting position of last section ' Extract last section ' Use function - I think it's called UCase() - to convert the extracted last section to uppercase ' Reassemble the string ' Return the string.