Zusätzliche VBA-String-Funktionen

Jede Programmiersprache hat einen eigenen Satz von Funktionen, der "vollständig" ist in dem Sinne, dass sie es dem Benutzer ermöglichen, jedes gewünschte Ergebnis zu erzielen. Die Sprachen unterscheiden sich nicht nur in den Namen, die den Funktionen gegeben werden, sondern auch in den Argumenten, mit denen das Ergebnis beeinflusst werden kann. Einige Funktionen sind in einer Sprache verfügbar, in einer anderen nicht. Das Code VBA Add-in fügt einige Funktionen hinzu hinzu, die auch in anderen Sprachen wie VB.NET verfügbar sind; diese werden hier vorgestellt. Um zu verdeutlichen, dass es sich um String-Funktionen handelt, wurde ihren Namen der Zusatz "String" vorangestellt

StartsWith

Prüft, ob ein String mit einer Teilzeichenkette beginnt.


Public Function StringStartsWith(Expression As String, Find As String, _ 
       Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
    'Returns boolean value indicating whether the inputstring starts within
     ' a certain string or not.'
    '?StringStartsWith("abcd","ab") > True'
    '?StringStartsWith("abcd","b") > False'
    '?StringStartsWith("b","ab") > False'
    '?StringStartsWith("b","ba") > False'
    '?StringStartsWith("abcd","") > True maybe better to raise error'
    'Err.Raise 5, "StartsWith", "Invalid procedure call"'
    StringStartsWith = InStr(1, Expression, Find, Compare) = 1
End Function

Wählen Sie in der Code-VBA-Symbolleiste VBA » String » Fragments » 

Menü Beginnt mit oder Endet mit

EndsWith

Ermittelt, ob das Ende der angegebenen Zeichenkette mit dem angegebenen Zeichen übereinstimmt


Public Function StringEndsWith(Expression As String, Find As String, _ 
            Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
    'Returns boolean value indicating whether the inputstring ends wit a 
    ' certain string or not.'
    '?StringEndsWith("abcd","cd") > True'
    '?StringEndsWith("abcd","cD") > False'
    StringEndsWith = InStrRev(Expression, Find, -1, Compare) = Len(Expression) - Len(Find) + 1
End Function

Enthält

Prüft, ob eine Zeichenfolge, eine Zelle oder ein Bereich die gesuchte Teilzeichenkette enthält


Public Function StringContains(Expression As String, Part As String, _ 
            Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
    'Returns a value indicating whether a specified (sub-)string occurs within this string.'
    '?StringContains("ab", "d",vbBinaryCompare) > False'
    '?StringContains("ab", "b",vbBinaryCompare) > True'
    '?StringContains("ab", "a",vbBinaryCompare) > True'
    '?StringContains("abcd", "bc",vbBinaryCompare) > True'
    StringContains = (InStr(1, Expression, Part, Compare) >= 1)
End Function

einfügen.

Gibt eine neue Zeichenkette zurück, in die eine bestimmte Zeichenkette an einer bestimmten Indexposition in die ursprüngliche Zeichenkette eingefügt wird Zeichenfolge


Function Insert(Expression1 As String, startIndex As Long, Expression2 As String) As String 
    'Returns a new string in which a specified string is inserted at a specified index position 
    '    in the input string.'
    '?Stringinsert("abc",1,"xy") > xyabc'
    '?Stringinsert("abc",2,"xy") > axybc'
    '?Stringinsert("abc",3,"xy") > abxyc'
    '?Stringinsert("abc",4,"xy") > abcxy'
    '?Stringinsert("abc",0,"xy") > error 5 Invalid procedure call'
    '?Stringinsert("abc",5,"xy") > error 5 Invalid procedure call'
    'to make forgiving, uncomment below lines'
    'If StartIndex < 1 Then StartIndex = 1'
    'If Len(Expression1) < StartIndex Then StartIndex = Len(Expression1) + 1'
StringInsert = Mid(Expression1, 1, StartIndex - 1) & Expression2 & Mid(Expression1, _
                                     StartIndex, Len(Expression1) - StartIndex + 1)
End Function

entfernen

Entfernt die angegebene Anzahl von Teilzeichenfolgen aus der Zeichenkette, beginnend am Anfang der Zeichenkette


Public Function StringRemove(Expression As String, Find As String, Optional Start As Integer = 1, _ 
                        Optional Count As Integer = 1) As String
    'Returns a new string in which a specified number of characters from the current string are deleted.'
    'Removes substring from string using and analogous to VBA Replace function:'
    'first the replace is done, then substring is created based on Start'
    '?StringRemove(Expression:="abab", Find:="b") > aab'
    '?StringRemove(Expression:="abab", Find:="b", Count:=2) > aa'
    '?StringRemove(Expression:="abcb", Find:="b",Start:=1) > acb'
    '?StringRemove(Expression:="abcb", Find:="b",Start:=2) > cb'
    '?StringRemove(Expression:="abcb", Find:="b",Start:=1, Count:=2) > ac'
    StringRemove = Replace(Expression:=Expression, Find:=Find, Replace:=vbNullString, Start:=Start, _ 
                                                                        Count:=Count)
End Function

PadLeft

Gibt eine neue Zeichenkette der angegebenen Länge zurück, bei der der Anfang der aktuellen Zeichenkette mit Leerzeichen oder mit einem angegebenen Unicode-Zeichen aufgefüllt wird


Public Function StringPadLeft(Expression As String, width As Integer, Optional Char As String = " ")
    'Returns a new string of a specified length in which the beginning of the current string is 
    ' padded with spaces or with a specified character.''
    '?StringPadLeft("abc",6,"x") > xxxabc'
    '?String"|" & PadLeft("abc",6) > |   abc'
    StringPadLeft = Right(String(width, Char) & Expression, width)
End Function

PadRight

Gibt eine neue Zeichenkette der angegebenen Länge zurück, in der das Ende der aktuellen Zeichenkette mit Leerzeichen oder einem angegebenen Unicode-Zeichen aufgefüllt ist


Public Function StringPadRight(Expression As String, length As Integer, Optional Char As String = " ")
    'Returns a new string of a specified length in which the end of the current string is padded 
    ' with spaces or with a specified character.'
    '?StringPadright("abc",6,"x") > abcxxx'
    StringPadRight = Left(Expression & String(length, Char), length)
End Function

ToCharArray

Kopiert die Zeichen einer Zeichenkette in ein Unicode-Zeichenfeld.


Public Function StringToCharArray(Expression As String) As Variant
    'Copies the characters in this instance to an array.'
    'arr = ToCharArray("abcd"): For i = LBound(arr) To UBound(arr): ?arr(i): Next'
    Dim arr As Variant 'array
    Dim i As Integer
    ReDim arr(Len(Expression) - 1)
    For i = 1 To Len(Expression)
        arr(i - 1) = Mid$(Expression, i, 1)
    Next
    StringToCharArray = arr
End Function

IsNullOrEmpty

Zeigt an, ob die angegebene Zeichenfolge vbNullString oder eine leere Zeichenfolge ("") ist oder nicht. Diese Funktion ist nicht enthalten - stattdessen können Sie aus dem gleichen Menü das Fragment 'Is Length Greater Than 0' verwenden, das den umgekehrten, aber entsprechend einfachen Code einfügt, einfach > in = ändern.


 = (Len() > 0)  

Wenn Sie das Fragment an einer Bedingungsposition wie If ... Then verwenden, führt dies zu der beabsichtigten If (Len() > 0) Then mit einer ausgewählten Zeichenfolge an der Position ⟨String⟩ eingefügt

IsNullOrWhiteSpace

Gibt an, ob die angegebene Zeichenkette vbNullString oder eine leere Zeichenkette ("") oder nur Whitespaces ist oder nicht. Beachten Sie, dass vbTab in dieser Implementierung nicht berücksichtigt wird.


 = (Len(Trim()) = 0)

IndexOf und LastIndexOf

Meldet die einstellige Indexposition des ersten bzw. letzten Vorkommens eines angegebenen Unicode-Zeichens oder einer Zeichenkette in dieser Instanz. Die Methode gibt 0 zurück, wenn das Zeichen oder die Zeichenkette nicht gefunden wird

In VBA wird IndexOf als InStr bezeichnet.

In VBA wird LastIndexOf als InStrRev bezeichnet.

Teilzeichenfolge

Es gibt keine vollständige Entsprechung für VB.NET String.Substring. Die naheliegendste ist die Funktion Mid. Andere Prozeduren, um Teilstrings zu erhalten sind Left und Right.

Concat

Eine spezielle Funktion für die Verkettung ist angesichts des einfachen &-Operators kaum sinnvoll - siehe Verkettung

Vergleichen Sie

Neben den üblichen Vergleichsoperatoren, die zum Vergleichen von Strings verwendet werden können, = und ⟨⟩, ist das Äquivalent für VB.NET String.Compare die StrComp Funktion, die hier erklärt wird....