¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Macros y lenguaje VBA
  3. Manipular cadenas
Extrait - Macros y lenguaje VBA Descubra la programación en Excel (nueva edición)
Extractos del libro
Macros y lenguaje VBA Descubra la programación en Excel (nueva edición) Volver a la página de compra del libro

Manipular cadenas

Objetivos del capítulo

Como ha visto en el capítulo Variables y constantes, el tipo String (cadena) forma parte de los tipos de datos básicos. Es con toda probabilidad el que manipulará más a menudo, especialmente en los archivos de texto que tenga que procesar. Este capítulo pretende mostrarle las principales funciones que puede utilizar para manipular cadenas. Existen otras que se utilizan mucho menos.

Al final de este capítulo, encontrará una serie de ejercicios para practicar.

Concatenar cadenas: &

El término concatenar en programación significa unir uno tras otro; por ejemplo, la concatenación de «Luke» y «Skywalker» da como resultado «Luke Skywalker». Para concatenar en VBA, puede utilizar el carácter & («et» o «y» en español; «ampersand» en inglés). La sintaxis general será la siguiente:

Dim SuVariable As String 
SuVariable = "abc" & "def" 
'La variable SuVariable tendrá entonces el valor "abcdef" 

Ejemplo 1: concatenar dos cadenas

Este operador le permite unir cadenas, pero también valores numéricos o fechas.

El símbolo + se utiliza asimismo para la concatenación, pero, como ha visto en el capítulo anterior, también se utiliza como operador de adición de valores numéricos.

Si, por ejemplo, quiere transformar 1 y 2 en «12», utilizaría:

Dim Texto As String 
Texto = 1 & 2 'da el valor "12" 
'mientras que 
Texto = 1 + 2 'da el valor "3" 

Ejemplo 2: privilegiar el signo & en lugar de + para concatenar

Puede almacenar el resultado de una concatenación en una variable, pero también mostrarlo directamente al usuario.

Dim Titulo As String 
Titulo = "Madame" 
Dim Apellido As String 
Apellido = "de Pompadour" ...

Longitud de una cadena: Len()

Cuando quiera rellenar información, o simplemente para validar que los datos introducidos son coherentes, por ejemplo, la longitud de un código postal, un DNI o un número de envío, la información sobre la longitud de una cadena le será de mucha utilidad. La función que permite conocer la longitud es Len(). Esta función toma como parámetro la cadena cuya longitud desea conocer, y su sintaxis es la siguiente.

Dim UnaCadenaCualquiera As String 
'Alimentar la cadena en otra parte del programa 
Dim Longitud As Long 
Longitud = Len(UnaCadenaCualquiera) 

Ejemplo 4: usar la función Len para conocer la longitud de una cadena

La función devolverá el número de caracteres de la cadena, incluidos los espacios o los caracteres invisibles, como los saltos de línea. Así, una cadena vacía tendrá una longitud de 0.

He aquí algunos ejemplos:

Dim Saludo As String, Titulo As String 
Saludo = "Buenos días" 
Titulo = "Señor" 
MsgBox Len(Saludo) 'Muestra 11 
MsgBox Len(Titulo) Muestra 5 
Msbox Len(Saludo & " " & Titulo)  'Muestra 17 (11 + 1 + 5) 

Ejemplo 5: distintos usos de la función Len()

También puede utilizar esta función en estructuras de condición:

Dim Texto As String 
... 
If Len(Texto) <...

Porción de un texto: Left(), Right(), Mid()

Si trabaja con cadenas que contienen informaciones varias, y quiere dividir la cadena principal en una o más cadenas de trozos más pequeños, dispone de tres funciones básicas: Left(), Right() y Mid(). Cuando trabaje con nombres de carpetas, con una nomenclatura determinada o tenga nombres de archivos con nombres siempre similares, como ABC_DEF_2022 o FolderXXX456, las siguientes tres funciones le permitirán obtener los fragmentos de texto que desee recuperar.

Tenga en cuenta que cuando trabaje con VBA, la numeración de los caracteres comienza por el 1. Así, en la cadena «ABCD», el tercer carácter es la «C».

Tomar caracteres de la izquierda: Left()

Cuando quiera recuperar los primeros X caracteres de un texto, la función Left() es la elección correcta. Se llama así porque recupera los caracteres de la izquierda. Esta función toma como parámetro el texto original, así como el número de caracteres que desea extraer, y devuelve la cadena correspondiente. La sintaxis general de esta función es la siguiente:

Dim Resultado As String 
Resultado = Left(Texto_Largo,NumeroDeCaracteres) 

Ejemplo 7: sintaxis general de la función Left()

He aquí un ejemplo de uso de esta función:

Dim TextoOriginal As String, TextoFinal As String 
TextoOriginal = "Texto muy largo" ...

Mayúsculas y minúsculas: UCase(), LCase()

Al manipular cadenas, es posible que necesite pasar todos los caracteres a mayúsculas, por ejemplo, para siglas y acrónimos, o viceversa, en minúsculas. Puede utilizarla para las matrículas de los coches (tradicionalmente todas en mayúsculas) o los días de la semana, meses y estaciones del año (en minúsculas).

Transformar una cadena en mayúsculas: UCase()

La función UCase(), que es un diminutivo de Upper Case, es una función que toma como parámetro la cadena por transformar y devuelve su equivalente compuesto solo de letras mayúsculas (incluidos los caracteres acentuados). La sintaxis general de esta función es la siguiente.

VariableResultado = UCase(TextoOriginal) 

Ejemplo 15: sintaxis general de la función UCase()

Y este es un ejemplo de su uso:

Dim TextoEjemplo As String 
TextoEjemplo = "Buenos días a todos" 
MsgBox UCase(TextoEjemplo) 'muestra BUENOS DÍAS A TODOS 

Ejemplo 16: uso de la función UCase()

Cuando la cadena contiene caracteres no alfabéticos, estos permanecen sin cambio a la salida de la función UCase().

Dim EjemploConCifrasYSimbolos As String 
EjemploConCifrasYSimbolos = "abc123()._" 
MsgBox UCase(EjemploConCifrasYSimbolos) ' mostrará ABC123()._ 

Ejemplo 17: la función UCase() solo afecta a los caracteres...

Presencia de una subcadena en una cadena: InStr(), InstrRev() y Like

A veces se necesita saber si una palabra o letra está en algún lugar de una cadena, o se quiere conocer la última ubicación de una subcadena dentro del texto original. Las funciones InStr() e InStrRev() le ayudarán a hacerlo. Devuelven la posición de una cadena dentro de otra.

Obtener la posición dentro de un cadena: InStr()

Cuando quiera conocer en qué posición se sitúa un carácter o una cadena dentro de otra, la función InStr() es imprescindible. Esta función tiene como sintaxis general:

Dim Posicion As Integer 
Posicion = InStr([PosicionInicialDeBusqueda], [TextoEnElQueSeBusca],  
[TextoQueSeBusca], [FormaDeComparar]) 

Ejemplo 20: sintaxis general de la función InStr()

El primero de los parámetros esperados en esta función es la posición a partir de la cual se debe realizar la búsqueda en la cadena (recuerde: la cadena comienza en el carácter 1, por lo que, si omite el parámetro, el valor predefinido será 1). Luego viene la cadena en la que se realiza la búsqueda y la cadena que se busca.

Como último parámetro opcional, puede especificar si la búsqueda debe distinguir entre los valores «X» y «x» (constante vbBinaryCompare) o si VBA debe considerarlos como similares (constante vbTextCompare). De forma...

Borrar espacios de más: Trim()

Entre las funciones muy útiles para manipular cadenas, he aquí las tres que le permiten eliminar los espacios al principio o al final de una cadena; se reproduce así el comportamiento de la fórmula ESPACIOS, dejando los espacios en medio de la cadena. Esta función puede utilizarse para corregir errores de entrada, por ejemplo, cuando un usuario añade involuntariamente espacios al final de un texto.

Esta función Trim() toma una cadena como parámetro y devuelve una cadena con los espacios eliminados al principio y al final de ella. La sintaxis general de esta función es la siguiente:

Dim Resultado As String 
Resultado = Trim(CadenaInicial) 

Ejemplo 27: sintaxis general de la función Trim()

Un ejemplo del uso de esta función:

MsgBox Len(Trim("    Buenos días " )) 'Muestra la longitud de 
"Buenos días", es decir 11.  

Ejemplo 28: Caso de uso de la función Trim()

Tenga en cuenta que, si no hay espacios al principio o al final de la cadena, la función devuelve la misma cadena que se le pasa como parámetro.

Existen otras dos funciones similares a Trim(). LTrim(), que elimina los espacios solo al principio de la cadena, y RTrim(), que elimina los espacios solo al final de la cadena.

Cortar en una matriz, reagrupar: Split, Join

Cuando tiene una cadena cuyos datos están delimitados por caracteres de separación fijos, como la coma, el punto y coma, el tabulador o cualquier otro carácter, usted puede transformar esta cadena en una matriz de valores.

Función Split()

La función Split() permite esta manipulación. La función devuelve una matriz de tipo Variant porque el número de elementos se desconoce de antemano.

La sintaxis general de la función es la siguiente:

Split(Texto, Delimitador, [Límite],[Comparación]) 

Ejemplo 29: sintaxis general de la función Split.

El primer parámetro Texto es la cadena que desea dividir, y Delimitador es la cadena que permite esta división.

Por ejemplo, puede utilizarla así:

Dim Matriz As Variant 
Matriz = Split("VBA Excel 2021", " " ) 
?Matriz(0) ' "VBA" 
?Matriz(1) ' "Excel" 
?Matriz(2) ' "2021" 

Ejemplo 30: uso de la función Split

Esto le permite obtener subcadenas a partir de una cadena principal.

El parámetro Límite permite especificar el número de subcadenas que devolverá la función. Su valor predefinido es -1, lo que significa que se devuelven todas las subcadenas.

Matriz = Split(" VBA Excel 2021 ", " " ,2) 
?Matriz(0) ' "VBA" 
?Matriz(1) ' "Excel...

Trabajar combinando varias funciones

A la hora de trabajar con cadenas, es muy probable que necesite manipular los bloques de datos de forma más intensiva, y trabajar, combinando las diferentes funciones vistas hasta ahora le será de gran ayuda.

Es posible que tenga que obtener los caracteres que siguen a una palabra clave en una cadena, por ejemplo «Apellido:» de la cadena «Nombre: Juan Antonio / Apellido: Pérez», y ponerlo en mayúsculas, de modo que obtenga «PÉREZ» como salida. Lo importante en este tipo de situaciones es desglosar primero el razonamiento y tratar los puntos paso a paso.

He aquí un ejemplo de solución:

Sub AislarElApellido() 
   Dim strEntrada As String 
   strEntrada = "Nombre: Juan Felipe / Apellido: Rosas" 
   '1er paso, determinar ubicación de "Apellido:" a partir del final 
   Dim iEmplazamientoApellido As Integer 
   iEmplazamientoApellido = InStrRev(strEntrada, "Apellido:") 
   '2do paso, recuperar los caracteres después de Apellido: 
   Dim strSubCadena As String 
   strSubCadena = Mid(strEntrada, iEmplazamientoApellido + 
Len("Apellido:")) 
   '3er paso, mostrar el resultado en mayúsculas, teniendo cuidado 
   '          de...

Ejercicios

Concatenar cadenas

Símbolo a su elección

 Escriba una función llamada Concatenar de ámbito público.

Esta función toma como parámetros dos cadenas, llamadas CadenaA y CadenaB.

Esta función devolverá una cadena que contiene CadenaA y CadenaB separadas por el carácter espacio « ».

 Cree la macro Capitulo11_Ejercicio1A.

Esta macro mostrará lo que devuelve la función Concatenar, pasándole los valores «Buenosdías,» y «bienvenido».

 Ejecute la macro Capitulo11_Ejercicio1A.

El resultado esperado es «Buenos días, bienvenido».

Un solo símbolo posible

 Escriba una función llamada ConcatenarNumeros de ámbito público.

Esta función toma como parámetros dos valores numéricos enteros, llamados NumeroA y NumeroB.

Esta función devolverá una cadena que contiene NumeroA y NumeroB sin caracteres de separación.

 Cree la macro Capitulo11_Ejercicio1B.

Esta macro mostrará lo que devuelve la función ConcatenarNumeros pasándole los valores 12 y 3.

 Ejecute la macro Capitulo11_Ejercicio1B.

El resultado esperado es 123.

Partes de una cadena

El propósito de estos ejercicios es hacer que manipule funciones que devuelvan una parte de una cadena. Hay varias soluciones posibles para cada ejercicio.

Más corto...