Función de división de Excel VBA: explicada con ejemplos

Cuando trabaje con VBA en Excel, es posible que necesite dividir una cadena en diferentes partes según un delimitador.

Por ejemplo, si tiene una dirección, puede usar la función VBA Split para obtener diferentes partes de la dirección que están separadas por una coma (que sería el delimitador en este caso).

SPLIT es una función de cadena incorporada en Excel VBA que puede usar para dividir una cadena de texto según el delimitador.

Función SPLIT de Excel VBA - Sintaxis

Dividir (Expresión, [Delimitador], [Límite], [Comparar])
  • Expresión: Esta es la cadena que desea dividir según el delimitador. Por ejemplo, en el caso del ejemplo de dirección, la dirección completa sería la "expresión". En caso de que se trate de una cadena de longitud cero (“”), la función SPLIT devolvería una matriz vacía.
  • Delimitador: Este es un argumento opcional. Este es el delimitador que se utiliza para dividir el argumento "Expresión". En el caso de nuestro ejemplo de dirección, una coma es un delimitador que se usa para dividir la dirección en diferentes partes. Si no especifica este argumento, un carácter de espacio se considera el delimitador predeterminado. En caso de que proporcione una cadena de longitud cero (""), la función devuelve la cadena "Expresión" completa.
  • Límite: Este es un argumento opcional. Aquí especifica el número total de subcadenas que desea devolver. Por ejemplo, si solo desea devolver las tres primeras subcadenas del argumento "Expresión", este sería 3. Si no especifica este argumento, el valor predeterminado es -1, que devuelve todas las subcadenas.
  • Comparar: Este es un argumento opcional. Aquí especifica el tipo de comparación que desea que realice la función SPLIT al evaluar las subcadenas. Las siguientes opciones están disponibles:
    • Cuando Comparar es 0: Esta es una comparación binaria. Esto significa que si su delimitador es una cadena de texto (digamos ABC), entonces distinguiría entre mayúsculas y minúsculas. "ABC" no sería igual a "abc".
    • Cuando Comparar es 1: Esta es una comparación de texto. Esto significa que si su delimitador es una cadena de texto (digamos ABC), incluso si tiene "abc" en la cadena "Expresión", se considerará como un delimitador.

Ahora que hemos cubierto los conceptos básicos de la función SPLIT, veamos algunos ejemplos prácticos.

Ejemplo 1: dividir las palabras en una oración

Supongamos que tengo el texto: "El rápido zorro marrón salta sobre el perro perezoso".

Puedo usar la función SPLIT para colocar cada palabra de esta oración como un elemento separado en una matriz.

El siguiente código sería para esto:

Sub SplitWords () Dim TextStrng As String Dim Resultado () As String TextStrng = "El zorro marrón rápido salta sobre el perro perezoso" Resultado () = Dividir (TextStrng) End Sub

Si bien el código no hace nada útil, lo ayudará a comprender qué hace la función Split en VBA.

La función de división divide la cadena de texto y asigna cada palabra a la matriz de resultados.

Entonces en este caso:

  • El resultado (0) almacena el valor "The"
  • El resultado (1) almacena el valor "Rápido"
  • El resultado (2) almacena el valor “Marrón” y así sucesivamente.

En este ejemplo, solo hemos especificado el primer argumento, que es el texto que se dividirá. Dado que no se ha especificado ningún delimitador, toma el carácter de espacio como delimitador predeterminado.

Nota IMPORTANTE:

  1. La función VBA SPLIT devuelve una matriz que comienza desde la base 0.
  2. Cuando el resultado de la función SPLIT se asigna a una matriz, esa matriz debe declararse como un tipo de datos String. Si lo declara como un tipo de datos Variant, mostrará un error de falta de coincidencia de tipos). En el ejemplo anterior, tenga en cuenta que he declarado Result () como un tipo de datos String.

Ejemplo 2: contar el número de palabras en una oración

Puede usar la función DIVIDIR para obtener el número total de palabras en una oración. El truco aquí es contar la cantidad de elementos en la matriz que obtiene cuando divide el texto.

El siguiente código mostraría un cuadro de mensaje con el recuento de palabras:

Sub WordCount () Atenuar TextStrng como cadena Atenuar WordCount como entero Atenuar Resultado () Como cadena TextStrng = "El zorro marrón rápido salta sobre el perro perezoso" Resultado = Dividir (TextStrng) WordCount = UBound (Resultado ()) + 1 MsgBox "El El recuento de palabras es "& WordCount End Sub

En este caso, la función UBound nos dice el límite superior de la matriz (es decir, el número máximo de elementos que tiene la matriz). Dado que la base de la matriz es 0, se suma 1 para obtener el recuento total de palabras.

Puede usar un código similar para crear una función personalizada en VBA que tomará el texto como entrada y devolverá el recuento de palabras.

El siguiente código creará esta función:

Función WordCount (CellRef como rango) Dim TextStrng Como cadena Dim Resultado () Como cadena Resultado = Dividir (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 función de fin

Una vez creada, puede utilizar la función WordCount como cualquier otra función normal.

Esta función también maneja espacios iniciales, finales y dobles entre palabras. Esto ha sido posible mediante el uso de la función TRIM en el código VBA.

En caso de que desee obtener más información sobre cómo funciona esta fórmula para contar la cantidad de palabras en una oración o si desea obtener más información sobre una fórmula que no es de VBA para obtener el recuento de palabras, consulte este tutorial.

Ejemplo 3: uso de un delimitador que no sea un carácter de espacio

En los dos ejemplos anteriores, solo usamos un argumento en la función SPLIT, y el resto eran los argumentos predeterminados.

Cuando usa algún otro delimitador, debe especificarlo en la fórmula SPLIT.

En el siguiente código, la función SPLIT devuelve una matriz basada en una coma como delimitador y luego muestra un mensaje con cada palabra en una línea separada.

Sub CommaSeparator () Atenuar TextStrng como cadena Atenuar Resultado () Como cadena Atenuar DisplayText como cadena TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Resultado = Dividir (TextStrng, ",") Para i = LBound (Result ()) A UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Siguiente i MsgBox DisplayText End Sub

En el código anterior, he usado el bucle For Next para pasar por cada elemento de la matriz "Result" y asignarlo a la variable "DisplayText".

Ejemplo 4: dividir una dirección en tres partes

Con la función SPLIT, puede especificar cuántos números de divisiones desea obtener. Por ejemplo, si no especifico nada, cada instancia del delimitador se usaría para dividir la cadena.

Pero si especifico 3 como límite, la cadena se dividirá solo en tres partes.

Por ejemplo, si tengo la siguiente dirección:

2703 Winifred Way, Indianápolis, Indiana, 46204

Puedo usar la función Split en VBA para dividir esta dirección en tres partes.

Divide los dos primeros en función del delimitador de coma y la parte restante se convierte en el tercer elemento de la matriz.

El siguiente código mostraría la dirección en tres líneas diferentes en un cuadro de mensaje:

Sub CommaSeparator () Dim TextStrng como cadena Dim Resultado () como cadena Dim DisplayText como cadena TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Resultado = Dividir (TextStrng, ",", 3) Para i = LBound (Result ( )) A UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Siguiente i MsgBox DisplayText End Sub

Uno de los usos prácticos de esto podría ser cuando desee dividir una dirección de una sola línea en el formato que se muestra en el cuadro de mensaje. Luego, puede crear una función personalizada que devuelva la dirección dividida en tres partes (con cada parte en una nueva línea).

El siguiente código haría esto:

Función ThreePartAddress (cellRef As Range) Dim TextStrng Como String Dim Result () Como String Dim DisplayText Como String Result = Split (cellRef, ",", 3) For i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Trim (Result (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Función de fin

Una vez que tenga este código en el módulo, puede usar la función (ThreePartAddress) en el libro de trabajo como cualquier otra función de Excel.

Esta función toma un argumento: la referencia de celda que tiene la dirección.

Tenga en cuenta que para que la dirección resultante aparezca en tres líneas diferentes, debe aplicar el formato de ajuste de texto a las celdas (está en la pestaña Inicio en el grupo Alineación). Si el formato "Ajustar texto" no está habilitado, verá la dirección completa como una sola línea.

Ejemplo 5: obtener el nombre de la ciudad a partir de la dirección

Con la función Split en VBA, puede especificar qué parte de la matriz resultante desea usar.

Por ejemplo, supongamos que estoy dividiendo la siguiente dirección en función de la coma como delimitador:

2703 Winifred Way, Indianápolis, Indiana, 46204

La matriz resultante se vería como se muestra a continuación:

{"2703 Winifred Way", "Indianápolis", "Indiana", "46204"}

Dado que se trata de una matriz, puedo elegir mostrar o devolver una parte específica de esta matriz.

A continuación se muestra un código para una función personalizada, donde puede especificar un número y devolverá ese elemento de la matriz. Por ejemplo, si quiero el nombre del estado, puedo especificar 3 (ya que es el tercer elemento de la matriz).

Función ReturnNthElement (CellRef como rango, ElementNumber como entero) Dim Result () As String Result = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) Función de fin

La función anterior toma dos argumentos, la referencia de celda que tiene la dirección y el número de elemento que desea devolver. La función Dividir divide los elementos de dirección y los asigna a la variable Resultado.

Luego, devuelve el número de elemento que especificó como segundo argumento. Tenga en cuenta que, dado que la base es 0, ElementNumber-1 se usa para devolver la parte correcta de la dirección.

Esta fórmula personalizada es más adecuada cuando tiene un formato consistente en todas las direcciones, es decir, la ciudad siempre se menciona después de las dos comas. Si los datos no son consistentes, no obtendrá el resultado deseado.

En caso de que desee el nombre de la ciudad, puede utilizar 2 como segundo argumento. En caso de que use un número mayor que el número total de elementos, devolverá el # ¡VALOR! error.

Puede simplificar aún más el código como se muestra a continuación:

Función ReturnNthElement (CellRef como rango, ElementNumber como entero) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Función de fin

En el código anterior, en lugar de utilizar la variable Resultado, solo devuelve el número de elemento especificado.

Entonces, si tiene Split ("Buenos días") (0), solo devolverá el primer elemento, que es "Bueno".

De manera similar, en el código anterior, solo devuelve el número de elemento especificado.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave