Macro para búsqueda en dos matrices

Hola experto:
En el sitio veo que tu has resuelto varios problemas que tienen relación con macros, yo soy muy novato en esto de las macros y no he podido adaptar una a mis necesidades, sin embargo, me encanta todo lo que tenga que ver con excel ya que lo aplico muchísimo en mi trabajo, por lo que recurro a ti solicitando tu valiosísima ayuda con este problema:
Tengo dos hojas con dos matrices que tienen la misma estructura algo así:
A B C
Fecha Descripción Cantidad
Las filas son variables ya que va desde 2 hasta 10000, bueno pues lo que necesito es que me busque cada una de las cantidades de la hoja 1 en la hoja 2 y cuando la encuentre en la hoja 2 copie la linea (las tres columnas) a la hoja 1 y lo pegue a un lado de la celda que contiene el valor buscado y en la hoja 2 corte o borre esa cantidad para que ya no la utilice en la búsqueda de la siguiente fila a buscar otra vez, ya que las cantidades pueden repetirse en filas más abajo y haga este proceso hasta acabar con todas las filas de la hoja 1.
Te lo describo con un ejemplo para que me entiendas mejor. Supongamos que son 10 líneas en la hoja 1 y 15 lineas en la hoja 1, bueno pues comenzaría a buscar la cantidad de C2 de la hoja 1 y cuando encuentre la primera cantidad exactamente igual en la hoja 2 corta lo que hay en esa línea y lo pega en la hoja 1 a partir de la celda D2, en la hoja 2 borra toda la línea que quedó en blanco de modo que ahora ya solo quedan 14 líneas, después regresa a la celda C3 de la hoja 1 y hace el mismo procedimiento: busca, corta, pega y borra. Y así sucesivamente hasta acabar en la celda C11 de la hoja 1. Pero si no encuentra una cantidad igual entonces que solo ponga en la celda de la hoja 1 (a donde va pegando los datos de la hoja 2) "Valor no encontrado". Con esto al final del proceso ya sé que las cantidades que no haya encontrado tendrán esa leyenda y por lo tanto no existen en la hoja 2, y en la hoja 2 las lineas que me hayan quedado (si es que quedó alguna(s)) no están dentro de la hoja 1.
Tal ves sea mucho mi pretención el querer hacer esto con una macro, pero he visto códigos o rutinas que hacen cosas maravillosas, por lo que casi estoy seguro que si se puede, y gente experta como tu lo puede lograr y creéme que con esto me convertiría horas de trabajo a minutos. De antemano agradezco muchísimo tu atención y quedo en espera de tu valiosa respuesta.

1 respuesta

Respuesta
1
Bueno estaba un poco dificultosa tu explicación, pero creo que logre decifrarla.
Espero te sirva, su fue así, recuerda cerra y valorar la pregunta, si no, seguiré atento a tus comentarios.
Asígnale esta macro a una imagen, botón, autoforma. Hay tu decides.
Sub Imagen_Haga_clic_en()
Range("c2").Select
posicion = 0
While ActiveCell.Value <> ""
  posicion = 1 + posicion
  cantidad = ActiveCell.Value
  Sheets("hoja2").Select
   Range("c2").Select
   contar = 0
   salga = 0
  While ActiveCell.Value <> "" And salga = 0
    contar = contar + 1
    If cantidad = ActiveCell.Value Then
      valor = ActiveCell.Value
      ActiveCell.Offset(0, -1).Select
      desc = ActiveCell.Value
      ActiveCell.Offset(0, -1).Select
      Fecha = ActiveCell.Value
      Rows(contar + 1).Select
      Selection.Delete Shift:=xlUp
        Sheets("hoja1").Select
        While ActiveCell.Value <> ""
           If cantidad = ActiveCell.Value Then
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = Fecha
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = desc
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = valor
               ActiveCell.Offset(0, -3).Select
           End If
           ActiveCell.Offset(1, 0).Select
        Wend
       salga = 1
    End If
      If salga = 1 Then
      Range("c2").Select
         ActiveCell.Offset(posicion - 2, 0).Select
      End If
      ActiveCell.Offset(1, 0).Select
  Wend
 If salga = 0 Then
    Sheets("hoja1").Select
 End If
  ActiveCell.Offset(1, 0).Select
  Wend
End Sub
Eres formidable, es exactamente lo que necesito, sabía que se podía pero pues desafortundadamente todavía no tengo los conocimientos necesarios para hacerlo, afortunadamente hay gente como tu que ayuda desinteresadamente a los que estamos creciendo, en verdad no tengo palabras para agradecértelo, solo algo más y perdona tantas molestias pero no sé si se podría complementar el código haciendo que en la hoja 1 aquellas cantidades que no encontró en lugar de quedarse en blanco mostrara la leyenda "Cantidad no encontrada".
Una vez más mil gracias y recibe un fuerte abrazo.
Hay estaría tu macro, Recuerde Cerra y Valorar la respuesta.
Cuando tengas algún problema ya sabes a quien acudir.
Sub Imagen_Haga_clic_en()
Range("c2").Select
posicion = 0
While ActiveCell.Value <> ""
  posicion = 1 + posicion
  cantidad = ActiveCell.Value
  Sheets("hoja2").Select
   Range("c2").Select
   contar = 0
   salga = 0
  While ActiveCell.Value <> "" And salga = 0
    contar = contar + 1
    If cantidad = ActiveCell.Value Then
      valor = ActiveCell.Value
      ActiveCell.Offset(0, -1).Select
      desc = ActiveCell.Value
      ActiveCell.Offset(0, -1).Select
      Fecha = ActiveCell.Value
      Rows(contar + 1).Select
      Selection.Delete Shift:=xlUp
        Sheets("hoja1").Select
        While ActiveCell.Value <> ""
           If cantidad = ActiveCell.Value Then
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = Fecha
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = desc
               ActiveCell.Offset(0, 1).Select
               ActiveCell.Value = valor
               ActiveCell.Offset(0, -3).Select
           End If
           ActiveCell.Offset(1, 0).Select
        Wend
       salga = 1
    End If
      If salga = 1 Then
      Range("c2").Select
         ActiveCell.Offset(posicion - 2, 0).Select
      End If
      ActiveCell.Offset(1, 0).Select
  Wend
 If salga = 0 Then
    Sheets("hoja1").Select
    ActiveCell.Offset(0, 1).Select
     If ActiveCell.Value = "" Then
        ActiveCell.Value = "Cantidad No encontrada"
     End If
    ActiveCell.Offset(0, -1).Select
 End If
  ActiveCell.Offset(1, 0).Select
  Wend
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas