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 »

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(
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í....