VBA INSTRREV

Excel VBA INSTRREV

La función VBA INSTRREV , como significa 'In String Reverse' , devuelve la posición de la primera aparición de una cadena de búsqueda (subcadena) en otra cadena, comenzando desde el final de la cadena (de derecha a izquierda) desde la que estamos buscando una cadena de búsqueda.

La función INSTRREV comienza a buscar la cadena de búsqueda desde el final de la cadena en la que necesitamos averiguar, pero cuenta la posición desde el principio. Hay una función vba INSTR más (significa 'In String' ) que también busca una cadena en otra cadena y devuelve la posición, pero esta función inicia la búsqueda desde el principio de la cadena desde la que buscamos la cadena de búsqueda.

INSTRREV e INSTR , ambos son una función VBA de cadena / texto incorporada de MS Excel. Podemos usarlos mientras escribimos cualquier macro en Microsoft Visual Basic Editor.

Sintaxis

Como podemos ver en la imagen de arriba, hay 2 argumentos obligatorios y 2 opcionales.

  • StringCheck As String: este es el argumento requerido. Necesitamos dar la expresión de cadena que se busca.
  • StringMatch As String: este argumento también es obligatorio. Necesitamos especificar la expresión de cadena que se busca.
  • Start As Long = -1: este es un argumento opcional. Especificamos la expresión numérica. Por defecto, toma -1, lo que significa que la búsqueda comienza en la última posición del carácter. Si especificamos cualquier valor positivo como 80, entonces comienza a buscar desde el final de la cadena en esos 80 caracteres de la izquierda.
  • Compare As VbCompareMethod = vbBinaryCompare As Long: Este argumento es opcional.

Podemos especificar los siguientes valores para este argumento.

Valores devueltos

  1. La función INSTRREV devuelve 0 si la verificación de la cadena  tiene una longitud cero o  no se encuentra la coincidencia de la cadena o si el argumento 'inicio' > la longitud de la coincidencia de la cadena .
  2. Esta función devuelve 'Null' si una verificación de cadena  o una coincidencia de cadena  es 'Null' .
  3. Si la coincidencia de cadenas tiene una longitud cero, la función vuelve a comenzar .
  4. Si se encuentra una coincidencia de cadena dentro de una verificación de cadena , la función devuelve la posición en la que se encuentra la coincidencia.

¿Cómo utilizar la función VBA INSTRREV?

Puede descargar esta plantilla de Excel de VBA INSTRREV aquí - Plantilla de Excel de VBA INSTRREV

Supongamos que tenemos datos para los nombres de las películas y sus directores. Queremos separar los nombres de los directores.

Tenemos datos en 1201 filas. Si hacemos esta tarea manualmente, nos llevará mucho tiempo.

Para hacer lo mismo, usaremos el código VBA. Los pasos son:

  • Necesitamos hacer clic en el comando 'Visual Basic' disponible en el grupo 'Código' en la pestaña 'Desarrollador' o podemos presionar Alt + F11 para abrir el editor visual básico.

  • Insertaremos un módulo usando el menú 'Insertar' .

  • Crearemos una subrutina llamada 'SplittingNames' .

  • Necesitamos 6 variables. Uno para almacenar los valores de las celdas, que manipularemos. Segundo para almacenar la posición del primer espacio en la cadena, tercero para almacenar la posición del último espacio en la cadena, cuarto para almacenar el último número de fila, quinto y sexto para la fila y columna que usaremos para imprimir los valores en celdas adyacentes.

  • Para averiguar la última fila utilizada en la hoja, necesitamos usar el siguiente código.

Este código primero seleccionará la celda B1 y luego seleccionará la última celda utilizada en la misma columna y luego asignaremos el número de fila de la celda a la variable 'LastRow'.

  • Ahora, para manipular todas las celdas en la columna B, ejecutaremos un ciclo 'for' .

  • Almacenaremos el valor de las celdas de la columna B de la fila 2 a la fila 1201 una por una en la variable 's' para manipularlas.

  • Necesitamos establecer el valor de la variable 'Columna' en 3, ya que tenemos que escribir los nombres divididos en C (tercera columna) y una columna en adelante.

  • Si la cadena es solo una palabra, eso significa que no hay espacio en la cadena, entonces queremos la cadena en sí como salida. Para esto, especificaremos la condición usando 'instrucción If y Else' con un signo de asterisco (que denota uno o más caracteres) de la siguiente manera:

  • Si hay espacio en la cadena, queremos dividir la cadena. Para hacer lo mismo, hemos usado las funciones INSTR e INSTRREV para encontrar la posición del primer espacio y la posición del último espacio respectivamente. Nos ayudará a encontrar la primera palabra y la última palabra en la cadena respectivamente.

La función INSTR toma el argumento de la siguiente manera:

Detalles del argumento

  • Inicio: Desde qué posición comenzar.
  • Cadena1: Necesitamos dar la expresión de cadena que se busca.
  • Cadena2: Necesitamos especificar la expresión de cadena que se busca.

Comparado como VbCompareMethod: especificando el método de comparación. Por defecto, es una comparación binaria.

  • Necesitamos usar la función vba LEFT para extraer los caracteres de la izquierda de la cadena. Hemos utilizado 'Último espacio-1' para obtener los caracteres de la izquierda antes del último espacio.

Necesitamos usar las funciones RIGHT y LEN para extraer los caracteres correctos de la cadena después del primer espacio.

Se escribe macro. Ahora solo necesitamos ejecutar la macro usando la tecla F5 .

Código:

 Sub SplittingNames () Dim s As String Dim FirstSpace Como Long Dim LastSPace Como Long Dim LastRow Como Long Dim Row Como Long Dim Column As Long Sheet1.Range ("B1"). Seleccione Selection.End (xlDown) .Select LastRow = ActiveCell. Fila para fila = 2 Hasta LastRow s = Sheet1.Cells (Row, 2) .Value Column = 3 If s Like "* *" Then FirstSpace = InStr (1, s, "") LastSPace = InStrRev (s, "") Sheet1.Cells (Row, Column) .Value = Left (s, LastSPace - 1) Sheet1.Cells (Row, Column + 1) .Value = Right (s, Len (s) - FirstSpace) Else Sheet1.Cells (Fila, Columna) .Value = s End If Next End Sub 

Ahora tenemos un resultado.