"Buscarv" en excel con varios valores coincidentes

Tengo un programa diseñado en excel donde quedan registrados artículos con su correspondiente fecha de venta. Pongo un ejemplo para que sea más entendible:

Columna A: Código de referencia del artículo

Columna B: Fechas

Así pues en la A puede repetirse misma referencia con distintas fechas.

Quisiera una función (supongo que tendrá que ser anidada con otra/s) o bien una macro que me permita saber por ej. El artículo 001 en cuantas fechas distintas se ha vendido y/o cuál ha sido la última fecha en que se vendió.

 REFERENCIA      FECHA

          50                1/2/14

          70                2/3/14

          50                3/4/14

Así por ej. Con la función cuando yo preguntase acerca de las fechas en que fué vendido el artículo "50" me saliese las 2 fechas: 1/2/14 y 3/4/14 y si fuera posible también que me indicase la última fecha en que fué vendido: 3/4/14 (supongo que ya sería otra función distinta).

2 respuestas

Respuesta
1

Te anexo la macro para poner las fechas de la referencia.

Sub BuscarValoresCoincidentes()
'Por.Dante Amor
    Set h = Sheets("hoja2")
    Set c = h.Range("G2")
    h.Columns(c.Column + 1).ClearContents
    '
    j = 2
    Set r = h.Columns("A")
    Set b = r.Find(c, LookAt:=xlWhole, MatchCase:=False)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            h.Range("H" & j) = h.Cells(b.Row, "B")
            j = j + 1
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
    c.Offset(0, 2) = Evaluate("MAX(H:H)")
End Sub

Cambia en la macro "hoja2" por el nombre de la hoja en donde tienes tus datos

No comentaste en qué celda vas a poner la referencia, en la macro puse que es en la celda "G2", cambia esta celda por la celda en la que quieras poner el dato, si pones G2, la macro pondrá en la siguiente columna ("H") todas las fechas; y en la siguiente columna ("I"), en este ejemplo, en la celda "I2" te pondría la última fecha .

Disculpa, utiliza esta macro

Sub BuscarValoresCoincidentes()
'Por.Dante Amor
    Set h = Sheets("hoja2")
    Set c = h.Range("G2")
    h.Columns(c.Column + 1).ClearContents
    '
    j = 2
    Set r = h.Columns("A")
    Set b = r.Find(c, LookAt:=xlWhole, MatchCase:=False)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            h.Cells(j, c.Column + 1) = h.Cells(b.Row, "B")
            j = j + 1
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
    c.Offset(0, 2) = Evaluate("MAX(H:H)")
End Sub

No me sirve. Envíame a mi e-mail un libro con la macro que sea operativo pues yo estoy probando la macro en mi libro y no hace nada

¿Tienes una hoja2?

¿Pusiste en la hoja2 en la celda G2 el valor que quieres buscar?

¿Habilitaste las macros?

Mejor envíame tu archivo con la macro que te puse para revisarla. Dime en dónde están tus datos y en dónde quieres el resultado de la búsqueda y te adapto la macro a tu libro.

En tu ejemplo pusiste que la fecha está en la columna "B" y en el archivo la columna "B" está en blanco, la macro si sirve pero el dato que debe traer es el de la columna "J" y eso no lo puedo adivinar, solamente hago la macro con lo que tu pides.

Esta es la macro para que te ponga la fecha que tienes en la columna "J"

Sub BuscarValoresCoincidentes()
'Por.Dante Amor
    Set h = Sheets("hoja1")
    Set c = h.Range("W2")
    h.Columns(c.Column + 1).ClearContents
    '
    j = 2
    Set r = h.Columns("A")
    Set b = r.Find(c, LookAt:=xlWhole, MatchCase:=False)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            h.Cells(j, c.Column + 1) = h.Cells(b.Row, "J")
            j = j + 1
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
    '
    c0 = Columns(c.Column + 1).Address(False, False)
    c2 = Left(c0, InStr(1, c0, ":") - 1)
    c.Offset(0, 2) = Evaluate("MAX(" & c2 & ":" & c2 & ")")
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Muchas gracias. Tu respuesta ha sido muy completa.

Persistes, das diferentes alternativas comentando cada aspecto y también muy importante eres rápido.

Un saludo

Respuesta
1

Disculpa que no pueda responderte de una manera específica; ya que regularmente no uso VBA. Pero creo que puedes hacer una función que con un bucle recorra las filas especificadas, y busque en la columna A el valor o código del producto ("Referencia") y si coincide con tu valor agregas el valor de la columna B a un array o arrayList. Y para buscar la última fecha, si utilizas un arrayList solamente recuperas el último item/valor, en cambio si utilizas un array en vez de agregarle el nuevo valor (cuando estás recorriendo las filas), lo sustituyes con la nueva fecha.

Desconozco que es un array o arraylist

Dim miArray(3) As String
miArray(0) = “lunes”
miArray(1) = “martes”
miArray(2) = “miércoles”

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas