Funzioni di manipolazione delle stringhe VBA e OperaTors

⚡ Riepilogo intelligente

Funzioni di manipolazione delle stringhe VBA e Operai tori combinano, misurano ed esprimonotracTesto all'interno delle macro di Excel. Questa pagina spiega l'operatore di concatenazione, le funzioni Left, Right, Mid, Len e InStr, la divisione e l'unione e gli errori che più spesso causano problemi al codice stringa.

  • 🔤 Dati stringa: Un valore composto da caratteri, simboli e numeri, come ad esempio il testo Jul-2015.
  • Concatenazione Operare: La e commerciale unisce due stringhe, quindi "John " & "Doe" restituisce John Doe.
  • ✂️ ExtracFunzioni di zione: Le opzioni Left, Right e Mid estraggono una sottostringa dall'inizio, dalla fine o dal centro di un valore.
  • 📏 Funzioni di misura: Len conta i caratteri e InStr restituisce la posizione in cui inizia una sottostringa.
  • 🧩 Dividi e unisci: Split suddivide una stringa delimitata in un array, mentre Join ricostruisce un array in un'unica stringa.
  • ⚠️ Errori comuni: La maggior parte dei confronti falliti è causata da tipi non corrispondenti, InStr che restituisce zero e spazi finali.

Funzioni di manipolazione delle stringhe VBA e OperaTors

Stringa VBA OperaTors

I dati stringa vengono utilizzati per contenere dati costituiti da numeri, caratteri e simboli. "Jul-2015" è un esempio di dati di stringa. È composto da

  • Personaggi (luglio)
  • Simbolo (-)
  • Numbers (2015)

Gli operatori di stringa vengono utilizzati per manipolare i dati di stringa. Ad esempio, puoi concatenare il valore di luglio-2015 dalle prime 3 lettere del mese e dell'anno come "Luglio-2015".

La tabella seguente mostra l'operatore di concatenazione delle stringhe VBA.

S / N Operator Descrizione Esempio Uscita
1 & Concatena: questo operatore viene utilizzato per concatenare le stringhe insieme “Giovanni” e “Daina” John Doe

Fonte di esempio Code

Stringa VBA OperaEsempio di fonte Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

L'esecuzione del codice sopra riportato produce il seguente risultato

Stringa VBA OperaEsempio di fonte Code

La e commerciale non è l'unico simbolo che compare per unire il testo, e la differenza tra i due diventa rilevante quando sono coinvolti i numeri.

Differenza tra & e + nella concatenazione di stringhe

VBA accetta sia la e commerciale (&) che il segno più (+) tra due valori di testo, quindi i principianti spesso li considerano intercambiabili. Il loro comportamento cambia non appena uno degli operandi è un numero o un valore vuoto, e solo uno dei due è sicuro.

Comportamento e (&) + (più)
Due valori di testo Si unisce a loro: “Guru" e "99" resi Guru99 Si unisce a loro: “Guru” + “99” restituisce Guru99
Testo e numero Converte il numero in testo: “Età” & 30 restituisce Età 30 Genera un errore di mancata corrispondenza del tipo
Due stringhe numeriche “10” & “5” restituisce 105 “10” + “5” possono sommarsi e restituire 15
Un valore nullo Tratta Null come una stringa vuota Restituisce Null e scarta l'intero risultato

Suggerimento: Utilizzare sempre la e commerciale per la concatenazione e riservare il segno più per operazioni aritmeticheInserisci uno spazio prima e dopo la e commerciale (&), perché la stringa Total& viene interpretata da VBA come un carattere di dichiarazione di tipo Long.

Funzioni di manipolazione delle stringhe VBA

La manipolazione delle stringhe VBA è un elemento importante in Excel VBA per la programmazione delle macro e operazioni sulle stringhe. Excel fornisce vari tipi di funzioni di manipolazione delle stringhe VBA come:

  • Sinistra: viene utilizzato per esclamaretraccaratteri t dal lato sinistro della stringa
  • Diritto: viene utilizzato per esclamaretraccaratteri t dal lato destro della stringa
  • Medio: viene utilizzato per esclamaretracuna sottostringa dal centro di una stringa
  • Len: viene utilizzato per trovare la lunghezza di una stringa
  • Instr: viene utilizzato per trovare la posizione di una sottostringa in una stringa
  • Trim: viene utilizzato per rimuovere gli spazi da entrambe le estremità di una stringa
  • sostituire: viene utilizzato per scambiare ogni occorrenza di una sottostringa con un'altra
  • Custodia a U / Custodia a L: vengono utilizzati per convertire una stringa in maiuscolo o minuscolo

La tabella seguente mostra la sintassi di ciascuna funzione con un esempio pratico, in modo da poter copiare lo schema direttamente in una macro.

Funzione Sintassi Esempio Uscita
Sinistra Sinistra(stringa, lunghezza) Sinistra (“luglio 2015”, 3) Luglio
Diritto Destra(stringa, lunghezza) Destra (“luglio 2015”, 4) 2015
Medio Mid(stringa, inizio, lunghezza) Metà (“luglio 2015”, 5, 4) 2015
Len Lunghezza(stringa) Len (luglio 2015) 8
Instr InStr(inizio, stringa, sottostringa) InStr(1, “lug-2015”, “-“) 4
Trim Rifinitura (stringa) Ordinare(" Guru99 “) Guru99
sostituire Sostituisci(stringa, trova, sostituisci) Sostituisci ("Lug-2015", "-", "/") Lug / 2015
UCase UCase(stringa) UCase(“guru99”) GURU99

La macro seguente combina diverse di queste funzioni per ricostruire un'etichetta data a partire dalle sue parti.

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

L'esecuzione della macro visualizza la data Jul-2015. Ogni funzione restituisce un nuovo valore e lascia inalterata la stringa originale, motivo per cui i risultati possono essere combinati in modo sicuro in un'unica espressione.

Queste funzioni operano tutte su una stringa alla volta. Quando un singolo valore contiene un'intera lista, altre due funzioni lo gestiscono meglio.

Come dividere e unire stringhe in VBA

I dati incollati in Excel spesso arrivano come un unico valore lungo con un separatore tra ogni elemento, ad esempio "Pepsi,Coca-Cola,Fanta,Succo". Leggere questo tipo di dati con le funzioni Mid e InStr è lento e inaffidabile. VBA offre una coppia di funzioni specifiche per questo scopo.

Diviso Prende una stringa delimitata e restituisce un array con indice base zero, con un elemento per ogni elemento. Forum Esegue l'operazione inversa, prendendo un array e restituendo una singola stringa con un separatore tra gli elementi. Si noti che Join funziona su un array, non su due stringhe separate.

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

Il ciclo scrive ogni bevanda in una riga separata del foglio di lavoro e la finestra di messaggio mostra quindi Pepsi | Coca-Cola | Fanta | Succo. Tre punti rendono questo schema affidabile nel codice di produzione:

  • Risultato a base zero: Split restituisce sempre un array numerato a partire da 0, indipendentemente dal valore impostato per Option Base, quindi è consigliabile utilizzare LBound e UBound per guidare il ciclo anziché un numero fisso.
  • Dichiara come stringa(): Assegna il risultato a un array di stringhe dinamico. Dichiarare prima una dimensione fissa causa un errore di compilazione.
  • Campo vuoto: Dividere una stringa vuota restituisce un array senza elementi, quindi è consigliabile verificare con UBound prima di leggere Items(0).

Anche scegliendo la funzione corretta, il codice per le stringhe fallisce in un numero limitato di modi prevedibili.

Errori comuni nelle stringhe VBA e come risolverli

La maggior parte dei bug relativi alle stringhe in Excel VBA deriva da un breve elenco di cause. Riconoscere il sintomo consente di evitare lunghe sessioni di debug.

  • Tipo non corrispondente durante la concatenazione: Tra il testo e il numero è stato utilizzato un segno più. Sostituiscilo con una e commerciale (&), che converte automaticamente il numero.
  • InStr restituisce 0: La sottostringa non è stata trovata. InStr restituisce 0 anziché -1 in caso di errore, quindi verifica che il valore sia maggiore di zero prima di passare il risultato a Mid.
  • Chiamata di procedura non valida in Mid o Left: La lunghezza richiesta è negativa oppure la posizione iniziale è inferiore a 1. Proteggi la chiamata con Len in modo che la lunghezza non superi mai la stringa.
  • Confronti che dovrebbero coincidere ma non coincidono: Gli spazi finali dei dati importati interrompono l'uguaglianza. Racchiudi entrambi i lati in Trim e usa StrComp quando la distinzione tra maiuscole e minuscole deve essere ignorata.
  • Testo che non verrà convertito in numero: Un valore come "1,200" non è valido nei calcoli aritmetici a causa del separatore. Rimuovilo con Replace prima di convertirlo con CLng.

Scarica Excel contenente il codice sopra

Scarica il file Excel qui sopra Code

DOMANDE FREQUENTI

Una stringa a lunghezza variabile può contenere fino a circa due miliardi di caratteri, mentre una stringa a lunghezza fissa ne può contenere fino a 65,400. Una cella di un foglio di calcolo, tuttavia, può memorizzare solo 32,767 caratteri, quindi i valori più lunghi vengono troncati quando vengono scritti sul foglio.

Il segno di uguale confronta le stringhe distinguendo tra maiuscole e minuscole per impostazione predefinita. Utilizzare StrComp(a, b, vbTextCompare) per un risultato che non distingua tra maiuscole e minuscole, oppure posizionare Option Compare Text all'inizio del modulo per modificare l'impostazione predefinita per l'intero modulo.

La e commerciale converte ogni operando in testo prima di unire i valori, quindi 10 & 5 restituisce la stringa 105. Mantieni i valori numerici e sommali prima, poi concatena il risultato se deve apparire all'interno di un messaggio.

Sì. Descrivi l'input e l'output desiderato, ad esempio es.tracInserisci il codice prima del primo trattino e un assistente IA restituirà un'espressione Left e InStr. Testala rispetto a casi limite come un trattino mancante.

Sì. Incolla un'espressione annidata come Mid con InStr al suo interno e un assistente IA la scompone in passaggi, assegna un nome a ciascun argomento e segnala il caso in cui InStr restituisce zero e la chiamata fallisce.

Riassumi questo post con: