Busqueda multiple en excel en matriz de datos y devolver celda contigua

Ante todo.

Necesito una ayuda. Tengo una matriz de datos, donde debo realizar varias busquedas y que me devuelva la celda contigua a dichas busquedas. Por ejemplo:

      A   B   C  D   E   F   G   H    I    

1   62 19 61 21 25 44 57 85 38

2   15 87 18 44 14 64 78 07 64

3   69 47 89 58 22 11 88 24 58

4   47 33 66 95 64 43 94 61 41

5   94 17 62 61 17 31 09 02 64

Realizar busqueda del par 64 cuantas veces aparezca, con dos particularidades: 1) se toma la matriz como si fuese una cinta continua, es decir si la busqueda esta en ultima columna (I), la salida debe ser el primer par de la fila siguiente y primera columna (A) y 2) Si el par buscado esta en la ultima posicion (I5) su salida debe ser el par que esta en A1.

Aqui coloco este ejemplo de la busqueda y salidas

Posicion      Salidas (Busqueda x Columnas)

64 (E4)          43 (F4)

64 (F2)          78 (G2)            

64 (I2)           69 (A3)

64 (I5)            62 (A1)

2 respuestas

Respuesta
2

Te anexo una macro. Pon tu matriz de datos en la hoja "Datos", crea una hoja llamada "Salida"

En la macro cambia el 64 por el número que quieras buscar.

Sub Salida()
'Por.Dante Amor
    Set h1 = Sheets("Datos")    'hoja con la matriz de datos
    Set h2 = Sheets("Salida")   'hoja con los resultados de la búsqueda
    h2.Rows("2:" & Rows.Count).Clear
    valor = 64
    j = 2
    '
    Set r = h1.Range("A1:I5")   'rango de la matriz
    Set b = r.Find(valor, lookat:=xlWhole, SearchOrder:=xlByColumns)
    If Not b Is Nothing Then
        c1 = r.Cells(1, 1).Column
        c2 = r.Columns.Count + c1 - 1
        f1 = r.Cells(1, 1).Row
        f2 = r.Rows.Count + f1 - 1
        '
        celda = b.Address
        Do
            'detalle
            h2.Cells(j, "A") = valor & " (" & b.Address(False, False) & ")"
            If b.Offset(0, 1).Column > c2 Then
                If b.Offset(1, 0).Row > f2 Then
                    h2.Cells(j, "B") = r.Cells(1, 1) & " (" & r.Cells(1, 1).Address(False, False) & ")"
                Else
                    h2.Cells(j, "B") = h1.Cells(b.Row + 1, c1) & " (" & h1.Cells(b.Row + 1, c1).Address(False, False) & ")"
                End If
            Else
                h2.Cells(j, "B") = b.Offset(0, 1) & " (" & b.Offset(0, 1).Address(False, False) & ")"
            End If
            j = j + 1
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    MsgBox "Fin"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Salida
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Dante agradecido de antemano por tu atención.

Creo haber seguido tus instrucciones, te coloco las pantallas de la hoija datos y del modulo donde pegue la macro. Al presionarel botón no puedo observar ningún resultado, te adjunto las pantallas, para ver si fue que me falto algo por hacer

Quedo atento a tus observaciones

Pero en la macro pusiste esto:

valor = 3 = 85

Debes poner esto:

valor = 64

Realiza el cambio y vuelve a probar

R ecuerda cambiar la valoración a la respuesta.

Buenos días, adjunto el cambio a 64. Probé y me muestra igualmente el mensaje Fin Ok, donde no observo donde coloca el resultado de la búsqueda. Atento quedo de su observación.

Revisa bien tus cambios

Estás poniendo esto:

valor = 3 = 64

Y mi macro siempre ha dicho esto:

valor = 64

¡Gracias! Muy agradecido Sr. Dante.

Si se desea extender el rango de la matriz, cosa que ya probé en su rutina, modifique el rango en la línea

"Set r = h1.Range("A1:I6") 'rango de la matriz" ; y no tuve problema alguno, fue perfecta la busqueda.

Ahora si deseo hacer más de una búsqueda a la vez, que modificación puedo agregar. Y disculpe ud.

Saludos!

Respuesta
1

Debes recorrer la cadena de caracteres para encontrar lo que necesitas, mira este ejemplo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas