Hace pocos días vimos cómo, mediante una macro, podíamos evaluar coincidencias entre diferentes rangos (ver). En el post de hoy, analizaremos una de las utilidades o finalidades que podemos dar en nuestras macros a Range.Offset(núm_filas;núm_columnas).
Supongamos el siguiente ejemplo en el que disponemos de una tabla con diferentes elementos (ALTO, MEDIO, BAJO o vacío), de los cuales necesitamos obtener cuáles son sus referencias:
Se trata de obtener un rango variable del elemento elegido para el filtro (ALTO, MEDIO, BAJO o vacío); por ejemplo, si seleccionamos el elemento 'ALTO' deberíamos obtener el rango con los siguientes valores: AA-A, AC-C y AE-E
ya que son estos precisamente las coordenadas en nuestra tabla para los tres elementos 'ALTO' existentes.
En este caso, nuestra macro evaluará celda por celda cada una de las pertenecientes a nuestro origen, y en caso de que el valor de dicha celda coincida con el elemento seleccionado lo colocará en un orden predeterminado, una debajo de otra (sin espacios).
Es precisamente este el fin que le daremos en esta ocasión a la función OFFSET
Debemos incluir nuestro código VBA en un módulo del Explorador de proyectos dentro del Editor de VBA (Alt+F11):
Ya sólo queda probarla, en la celda I1 disponemos un desplegable con los valores ALTO, MEDIO, BAJO o Vacío, y ejecutamos nuestra macro y obtenemos:
Supongamos el siguiente ejemplo en el que disponemos de una tabla con diferentes elementos (ALTO, MEDIO, BAJO o vacío), de los cuales necesitamos obtener cuáles son sus referencias:
Se trata de obtener un rango variable del elemento elegido para el filtro (ALTO, MEDIO, BAJO o vacío); por ejemplo, si seleccionamos el elemento 'ALTO' deberíamos obtener el rango con los siguientes valores: AA-A, AC-C y AE-E
ya que son estos precisamente las coordenadas en nuestra tabla para los tres elementos 'ALTO' existentes.
En este caso, nuestra macro evaluará celda por celda cada una de las pertenecientes a nuestro origen, y en caso de que el valor de dicha celda coincida con el elemento seleccionado lo colocará en un orden predeterminado, una debajo de otra (sin espacios).
Es precisamente este el fin que le daremos en esta ocasión a la función OFFSET
Debemos incluir nuestro código VBA en un módulo del Explorador de proyectos dentro del Editor de VBA (Alt+F11):
Sub MuestraCoincidencias() 'www.excelforo.blogspot.com Dim CompareRange As Variant, x As Variant, y As Variant Dim referencia As Variant 'definimos cuál es el valor a filtrar 'para nuestro ejemploel valor que tenga la celda I1 referencia = Range("I1").Value 'iniciamos un contador contar = 0 'limpiamos todos los valores existentes previos. Range("I2:I50").Clear 'mediante la instrucción FOR pasaremos por todas las celdas que correspondan 'a las filas de la 3 a la 10 'y a las columnas de la 2 a la 7 (B a G) For i = 3 To 10 For j = 2 To 7 Set celda = Sheets("Filtro").Cells(i, j) 'comprobamos si el valor de la celda coindice con el buscado 'si es cierto nos llevamos sus coordenadas de tabla a la celda I2 'y con OFFSET añadimos cada nueva coincidencia en una fila por debajo 'incrementando el contador en uno cada coincidencia If celda.Value = referencia Then Range("I2").Offset(contar, 0) = Cells(celda.Row, 1).Value & "-" & Cells(2, celda.Column).Value contar = contar + 1 Else contar = contar End If Next j Next i End Sub
Ya sólo queda probarla, en la celda I1 disponemos un desplegable con los valores ALTO, MEDIO, BAJO o Vacío, y ejecutamos nuestra macro y obtenemos: