Autres fonctions VBA pour les chaînes de caractères

Chaque langage de programmation possède un ensemble de fonctions natives qui est "complet", en ce sens qu'il permet à l'utilisateur de produire n'importe quel résultat dont il a besoin. dans le sens où il permet à l'utilisateur de produire n'importe quel résultat dont il a besoin. Les langages peuvent différer à la fois dans les noms donnés aux fonctions - suivant certaines traditions - mais aussi dans les arguments disponibles pour modifier le résultat. Certaines fonctions sont disponibles dans une langue mais pas dans d'autres. Le module complémentaire Code VBA ajoute certaines fonctions qui sont disponibles dans d'autres langages tels que VB.NET, et qui sont présentées ici. Pour indiquer qu'il s'agit de fonctions de type "String", leurs noms ont été préfixés par "String".

Commence par

Teste si une chaîne commence par une sous-chaîne.


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

Dans la barre d'outils Code VBA, sélectionnez VBA » String » Fragments » 

menu Commence par ou se termine par

Se termine par

Détermine si la fin de la chaîne spécifiée correspond au caractère spécifié


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

Contient

Teste si une chaîne, une cellule ou range contient la sous-chaîne que vous souhaitez trouver.


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

Insérer

Renvoie une nouvelle chaîne dans laquelle une chaîne spécifiée est insérée à une position d'index spécifiée dans la chaîne d'origine chaîne


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

Retirer

Supprime le nombre spécifié de sous-chaînes de la chaîne en commençant par le début de la chaîne.


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

Renvoie une nouvelle chaîne d'une longueur spécifiée dans laquelle le début de la chaîne actuelle est rempli d'espaces ou d'un caractère Unicode spécifié. d'espaces ou d'un caractère Unicode spécifié


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

Renvoie une nouvelle chaîne d'une longueur spécifiée dans laquelle la fin de la chaîne actuelle est remplie d'espaces ou d'un caractère Unicode spécifié.


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

Copie les caractères d'une chaîne dans un tableau de caractères Unicode.


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

Indique si la chaîne spécifiée est vbNullString ou une chaîne vide ("") ou non. Cette fonction n'est pas incluse - à la place, vous pouvez utiliser dans le même menu le fragment 'Is Length Greater Than 0' qui insère le code inversé mais simple correspondant, il suffit de remplacer > par =.


 = (Len() > 0)  

Si vous utilisez le fragment dans une position de condition telle que If ... Then, vous obtiendrez le résultat suivant voulu If (Len() > 0) Then avec une chaîne sélectionnée insérée à la position ⟨String⟩

IsNullOrWhiteSpace

Indique si la chaîne spécifiée est vbNullString ou une chaîne vide ("") ou seulement des espaces blancs ou non. Notez que vbTab n'est pas pris en compte dans cette implémentation.


 = (Len(Trim()) = 0)

IndexOf et LastIndexOf

Indique la position de l'index basé sur un seul chiffre de la première ou de la dernière occurrence d'un caractère ou d'une chaîne Unicode spécifié(e) dans cette instance. La méthode renvoie 0 si le caractère ou la chaîne n'est pas trouvé.

En VBA, IndexOf s'appelle InStr.

Dans VBA, LastIndexOf s'appelle InStrRev

Sous-chaîne

Il n'existe pas d'équivalent complet pour VB.NET String.Substring. Le plus proche est la fonction Mid. D'autres procédures permettant d'obtenir des sous-chaînes sont Left et Right.

Concat

Il n'est guère utile d'avoir une fonction spéciale pour la concaténation si l'on considère le simple opérateur & - voir Concaténation

Comparer

Outre les opérateurs de comparaison courants qui peuvent être utilisés pour comparer des chaînes de caractères, = et ⟨⟩, l'équivalent pour VB.NET String.Compare est la fonction StrComp expliquée ici....