Funções de cadeia VBA adicionais

Cada linguagem de programação tem um conjunto de funções nativas que é "completo" no sentido em que permite ao utilizador produzir qualquer resultado de que necessite. As linguagens podem diferir tanto nos nomes dados às funções - seguindo certas tradições - como nos argumentos disponíveis para ajustar o resultado. Algumas funções estão disponíveis numa língua, mas não noutras. O suplemento Code VBA acrescenta algumas funções que estão disponíveis noutras linguagens, como o VB.NET, e que são aqui apresentadas. Para indicar que se trata de funções String, os seus nomes foram prefixados por 'String'

Começa com

Testa se uma String começa com uma substring.


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

Na barra de ferramentas Código VBA, selecione VBA » String » Fragments » 

menu Começa com ou termina com

Termina com

Determina se o fim da cadeia de caracteres especificada corresponde ao carácter especificado


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

Contém

Testa se uma cadeia, célula ou intervalo contém a substring que pretende encontrar


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

Inserir

Devolve uma nova cadeia de caracteres na qual uma cadeia de caracteres especificada é inserida numa posição de índice especificada na cadeia de caracteres original original


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

Remover

Remove o número especificado de substrings da cadeia de caracteres, começando no início da cadeia de caracteres


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

Devolve uma nova cadeia de caracteres de um comprimento especificado em que o início da cadeia de caracteres atual é preenchido com espaços ou com um carácter Unicode especificado


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

Devolve uma nova cadeia de caracteres com um comprimento especificado em que o fim da cadeia atual é preenchido com espaços ou com um carácter Unicode especificado


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

Copia os caracteres de uma string para uma matriz de caracteres 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

Indica se a cadeia especificada é vbNullString ou uma cadeia vazia ("") ou não. Esta função não está incluída - em vez disso, pode utilizar no mesmo menu o fragmento 'Is Length Greater Than 0' que insere o código inverso, mas correspondente, basta mudar > para =.


 = (Len() > 0)  

Se o fragmento for utilizado numa posição de condição, como If ... Then, o resultado será o pretendido If (Len() > 0) Then com uma cadeia selecionada inserida na posição ⟨String⟩

IsNullOrWhiteSpace

Indica se a cadeia de caracteres especificada é vbNullString ou uma cadeia de caracteres vazia ("") ou apenas espaços em branco ou não. Note-se que vbTab não é considerado nesta implementação


 = (Len(Trim()) = 0)

IndexOf e LastIndexOf

Informa a posição do índice baseado em um da primeira ou última ocorrência, respetivamente, de um caractere ou cadeia de caracteres Unicode especificado nesta instância. O método devolve 0 se o carácter ou cadeia de caracteres não for encontrado

No VBA, IndexOf é designado por InStr

No VBA LastIndexOf chama-se InStrRev

Subcadeia

Não existe um equivalente completo para String.Substring do VB.NET. O mais próximo é a função Mid. Outros procedimentos para obter substrings são Left e Right.

Concat

Ter uma função especial para a concatenação não é muito útil, tendo em conta o simples operador & - ver Concatenação

Comparar

Para além dos operadores de comparação comuns que podem ser utilizados para comparar cadeias de caracteres, = e ⟨⟩, o equivalente para VB.NET String.Compare é a função função StrComp explicada aqui....