Funciones de cadena VBA adicionales

Cada lenguaje de programación tiene un conjunto nativo de funciones que es "completo" en el sentido de que permite al usuario obtener cualquier resultado que desee. Los lenguajes pueden diferir tanto en los nombres que se dan a las funciones -siguiendo ciertas tradiciones- como en los argumentos disponibles para modificar el resultado. Algunas funciones están disponibles en un idioma pero no en otros. El complemento Code VBA añade algunas funciones disponibles en otros lenguajes, como VB.NET, que se presentan aquí. Para indicar que se trata de funciones de cadena, sus nombres llevan el prefijo 'Cadena'.

ComienzaCon

Comprueba si una cadena empieza por una subcadena.


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

En la barra de herramientas Código VBA, seleccione VBA » String » Fragments » 

menú Empieza por o acaba por

TerminaCon

Determina si el final de la cadena especificada coincide con el 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

Contiene

Comprueba si una cadena, celda o rango contiene la subcadena que desea 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

Inserte

Devuelve una nueva cadena en la que se inserta una cadena especificada en una posición de índice especificada en la cadena 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

Eliminar

Elimina el número especificado de subcadenas de la cadena comenzando por el principio de la cadena


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

Devuelve una nueva cadena de longitud especificada en la que el principio de la cadena actual se rellena con espacios o con un 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

Devuelve una nueva cadena de longitud especificada en la que el final de la cadena actual se rellena con espacios o con un 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 los caracteres de una cadena a una 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 si la cadena especificada es vbNullString o una cadena vacía ("") o no. Esta función no está incluida - en su lugar puede utilizar desde el mismo menú el fragmento 'Is Length Greater Than 0' que inserta el código simple inverso pero correspondiente, sólo cambie > por =.


 = (Len() > 0)  

Si utiliza el fragmento en una posición de condición como If ... Then, se producirá el pretendido If (Len() > 0) Then con una cadena seleccionada insertada en la posición ⟨String⟩.

IsNullOrWhiteSpace

Indica si la cadena especificada es vbNullString o una cadena vacía ("") o sólo espacios en blanco o no. Tenga en cuenta que vbTab no se tiene en cuenta en esta implementación


 = (Len(Trim()) = 0)

IndexOf y LastIndexOf

Informa de la posición del índice basado en uno de la primera o última aparición respectivamente de un carácter Unicode o cadena especificados dentro de esta instancia. El método devuelve 0 si no se encuentra el carácter o la cadena.

En VBA IndexOf se llama InStr

En VBA LastIndexOf se llama InStrRev

Subcadena

No existe un equivalente completo para VB.NET String.Substring. Lo más parecido es la función Mid. Otros procedimientos para obtener subcadenas son Left y Right.

Concat

Disponer de una función especial para la concatenación no es muy útil si se tiene en cuenta el sencillo operador & - véase Concatenación

Compara

Aparte de los operadores de comparación comunes que se pueden utilizar para comparar cadenas, = y ⟨⟩, el equivalente para VB.NET String.Compare es la función StrComp que se explica aquí....