Igår fick jag ett mail från en av mina läsare – juni.
Hon ville vet hur man tillämpar fet stil på en specifik del av en sträng i en cell. Tillämpa till exempel fetstil på endast ordet ’Hello’ från ’Hello World’.
Och hon ville göra detta för hundratals celler samtidigt.
Eftersom det finns ingen inbyggd funktionalitet i Excel som kan göra det, jag skapade ett enkelt makro som använder Excel VBA InStr-funktionen (du kommer att se hur man gör det i exempel 4 i denna handledning).
Men först, låt oss se hur Excel VBA InStr-funktionen fungerar!
Denna handledning täcker:
Excel VBA InStr-funktion
I denna handledning kommer jag att förklara användningen av InStr-funktionen i Excel VBA och se några praktiska exempel där den kan användas.
Excel VBA InStr-funktion – Introduktion
InStr-funktion hittar positionen för en angiven substring i strängen och returnerar den första positionen för dess förekomst.
Till exempel, om du vill hitta positionen för ’x’ i ’Excel’ med hjälp av Excel VBA InStr-funktionen skulle returnera 2.
Syntax för InStr-funktion
- – (valfritt argument) detta är ett heltal som berättar för InStr-funktionen startpositionen från vilken den ska börja titta. Om jag till exempel vill att sökningen ska börja från början kommer jag att ange värdet som 1. Om jag vill att det ska börja med det tredje tecknet och framåt kommer jag att använda 3. Om det utelämnas tas standardvärdet 1.
- Sträng1 – Detta är huvudsträngen (eller den överordnade strängen) som du vill söka i. Om du till exempel letar efter positionen för x i Excel, skulle sträng 1 vara ”Excel”.
- String2 – Det här är understrängen du söker efter. Till exempel om du letar efter positionen för x i Excel, skulle String2 vara x.
- – (valfritt argument) Du kan ange ett av följande tre värden för argument:
- vbBinaryCompare – Detta skulle göra ett tecken genom teckenjämförelse. Om du till exempel letar efter ’x’ i ’Excel’ kommer den att returnera 2, men om du letar efter ’X’ i ’Excel’ kommer den att returnera 0 som X är i övre Du kan också använda 0 istället för vbBinaryCompare. Om argumentet utelämnas är detta taget som standard.
- vbTextCompare – Detta skulle göra en jämförelse i texten. Till exempel om du letar efter ’x’ eller ’X’ i Excel, det skulle returnera 2 i båda fallen. Detta argument ignorerar bokstavsfallet. Du kan också använda 1 istället för vbTextCompare.
- vbDatabaseCompare – Detta används endast för Microsoft Access. Det använder informationen i databasen för att utföra jämförelsen. Du kan också använda 2 istället för vbDatabaseCompare.
Ytterligare anmärkningar om Excel VBA InStr-funktion:
- InStr är en VBA funktion och inte en kalkylfunktion. Det betyder att du inte kan använda det i kalkylbladet.
- Om String2 (som är understrängen vars position du letar efter) är tom, skulle funktionen returnera argumentets värde.
- Om InStr-funktionen inte kan hitta understrängen i huvudsträngen skulle den returnera 0.
Låt oss nu titta på några exempel på hur du använder Excel VBA InStr-funktion
Exempel 1 – Hitta positionen från början
I det här exemplet kommer jag att använda InStr-funktionen för att hitta positionen för ’V’ i ’Excel VBA’ från början.
Koden för detta skulle vara:
Sub FindFromBeginning()Dim Position As IntegerPosition = InStr(1, "Excel VBA", "V", vbBinaryCompare)MsgBox PositionEnd Sub
När du kör den här koden visas en meddelandefält med värdet 7, som är positionen för ’V’ i strängen ’Excel VBA’.
Exempel 2 – Hitta positionen från början av andra ordet
Antag att jag vill hitta positionen av ”the” i meningen – ”The quick brown fox jumps over the lat dog”
Jag vill dock att sökningen ska börja med det andra ordet framåt.
I det här fallet måste vi ändra argumentet för att se till att det anger positionen från vilket det andra ordet börjar.
Här är koden som kommer att göra detta:
Sub FindFromSecondWord()Dim Position As IntegerPosition = InStr(4, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub
Den här koden visar meddelanderutan med värdet 32 eftersom vi har angett startpositionen som 4. Därför ignorerar den första ’ Den ”och hittar den andra” den ”i meningen.
Om du vill göra den mer dynamisk kan du förbättra koden så att den automatiskt ignorerar det första ordet.
Här är den förbättrade koden som gör detta:
Sub FindFromSecondWord()Dim StartingPosition As IntegerDim Position As IntegerStartingPosition = InStr(1, "The quick brown fox jumps over the lazy dog", " ", vbBinaryCompare)Position = InStr(StartingPosition, "The quick brown fox jumps over the lazy dog", "the", vbBinaryCompare)MsgBox PositionEnd Sub
Den här koden hittar först platsen för ett mellanslagstecken och lagrar den i variabeln StartingPosition.
Den använder sedan denna variabel som startposition för att leta efter ordet ”the”.
Därför returnerar den 32 (vilket är startpositionen för ”the” efter det första ordet).
Exempel 3 – Hitta positionen för @ i e-postadressen
Du kan enkelt skapa en anpassad funktion för att hitta positionen för @ i en e-postadress med hjälp av Excel VBA InStr-funktionen.
Här är koden för att skapa den anpassade funktionen:
Nu kan du använda den här anpassade funktionen som alla andra kalkylfunktioner. Det tar en cellreferens som inmatning och ger dig positionen @ i den.
På samma sätt kan du skapa en anpassad funktion för att hitta positionen för vilken delsträng som helst i huvudsträngen.
Exempel 4 – Markera en del av strängen inom celler
Detta är frågan som frågades av juni (min läsare som också inspirerade mig att skriva den här självstudien).
Här är ett exempel på ett format som juni skickade mig:
Hennes fråga var att göra siffrorna utanför fästet fet.
Här är koden jag skapade som gör detta:
Ovanstående kod använder For Each-slingan för att gå igenom var och en av cellerna i markeringen. Den identifierar positionen för öppningskonsolens karaktär med hjälp av InStr-funktionen. Det ändrar sedan typsnittet för texten före parentes.
För att använda den här koden måste du kopiera och klistra in en modul i VB-redigeraren.
När du har klistrat in en kopia välj de celler där du vill formatera och kör makrot (som visas nedan).
Du kanske också gillar följande Excel VBA-handledningar:
- Excel VBA SPLIT-funktion.
- VBA TRIM-funktion.
- Den ultimata guiden till Excel VBA-loopar .
- En nybörjarguide för användning för nästa slinga i Excel VBA.
- Hur man skapar och använder ett Excel-tillägg.
- Hur man kombinerar flera arbetsböcker i en Excel-arbetsbok.
- Hur man räknar färgade celler i Excel.
- Användbara Excel VBA-makroexempel för nybörjare.
- Hur man sorterar data i Excel med VBA (En steg-för-steg-guide)