Vlookup extraer datos de mas de una búsqueda

Me encuentro con una problemática, en mi Excel cuento con una serie de datos que son: "idfolio", "factura" e "importe total", lo cual recurrí hacer un UserForm2 donde por medio de un cuadro combinado lo cual ingrese la formula de VLOOKUP para cuando seleccione le IDFOLIO me traiga la factura y el importe, pero el problema es cuando tengo 2 o más idfolios iguales y los selecciono, solo me hace la extracción del primer registro y no de los demás. De hecho la formula lo aplico por cada búsqueda y no encuentro solución.

De antemano les agradezco su atención.

 

1 respuesta

Respuesta
1

Para búsquedas con registros múltiples repetidos Vlookup no te sirve este es para relación 1 a 1, para lo que necesitas requieres otro tipo de programación con la instrucción match y contar. Si te paso un ejemplo

y esta es la macro

Private Sub ComboBox1_Change()
Set FACTURAS = Range("FACTURAS")
Set FUNCION = WorksheetFunction
folio = Val(ComboBox1.Value)
If folio <> 0 Then
With FACTURAS
    FILA = FUNCION.Match(folio, .Columns(1), 0)
    CUENTA = FUNCION.CountIf(.Columns(1), folio)
    Set DETALLES = .Rows(FILA).Resize(CUENTA, .Columns.Count)
    .Columns(.Columns.Count + 3).CurrentRegion.Clear
    Set REGISTROS = .Columns(.Columns.Count + 3).Resize(CUENTA, .Columns.Count)
    REGISTROS.Value = DETALLES.Value
    REGISTROS.Rows(0).Value = FACTURAS.Rows(0).Value
    With ListBox1
        .RowSource = "=" & REGISTROS.Address
        .ColumnCount = FACTURAS.Columns.Count
        .ColumnHeads = True
    End With
End With
Else
ListBox1.RowSource = Empty
End If
End Sub
Private Sub UserForm_Initialize()
Dim unicos As New Collection
Set datos = Range("b2").CurrentRegion
With datos
    Set datos = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
    .Sort key1:=Range(.Columns(1).Address), order1:=xlAscending, Header:=xlGuess
    For i = 1 To .Rows.Count
    folio = .Cells(i, 1)
        On Error Resume Next
        unicos.Add folio, CStr(folio)
        If Err.Number = 0 Then ComboBox1.AddItem folio
        On Error GoTo 0
    Next i
    ComboBox1.ListIndex = 0
    .Name = "FACTURAS"
End With
End Sub

Muchas gracias !

pero tengo una duda, mi sistema me pide que cada factura e importe pararezca en cada cuadro y label puesto que el importe debe ser sumado por las 3 facturas que hallan y no tanto la listbox  hay modo de hacerlo mediante tu método?

Te lo agradezco mucho!

Se puede hacer solo que con el método que te voy a proponer te sobran dos combobox, con 1 basta para rellenar los 3 campos

Private Sub ComboBox1_Change()
Set FACTURAS = Range("FACTURAS")
Set FUNCION = WorksheetFunction
VALOR = Val(ComboBox1.Value)
With FACTURAS
    FILA = FUNCION.Match(VALOR, .Columns(1), 0)
    CUENTA = FUNCION.CountIf(.Columns(1), VALOR)
    Set DETALLES = .Rows(FILA).Resize(CUENTA)
    With DETALLES
    FILAS = .Rows.Count
    If FILAS <= 2 Then
        TextBox1.Text = .Cells(1, 3)
        TextBox2.Text = .Cells(2, 3)
        TextBox3.Text = Empty
    Else
        TextBox3.Text = .Cells(3, 3)
    End If
        Label7 = .Cells(1, 2)
        Label8 = .Cells(2, 2)
        Label9 = .Cells(2, 2)
    End With
End With
DETALLES.Select
End Sub
Private Sub UserForm_Initialize()
Dim FOLIOS As New Collection
Set DATOS = Range("B2").CurrentRegion
With DATOS
    Set DATOS = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
    .Name = "FACTURAS"
    .Sort KEY1:=Range(.Columns(1).Address), ORDER1:=xlAscending
    ComboBox1.Clear
    ComboBox2.Clear
    ComboBox3.Clear
    For I = 1 To .Rows.Count
        FOLIO = .Cells(I, 1)
        On Error Resume Next
            FOLIOS.Add FOLIO, CStr(FOLIO)
            If Err.Number = 0 Then
                ComboBox1.AddItem FOLIO
                ComboBox2.AddItem FOLIO
                ComboBox3.AddItem FOLIO
            End If
        On Error GoTo 0
    Next I
    ComboBox1.ListIndex = 0
    ComboBox2.ListIndex = 0
    ComboBox3.ListIndex = 0
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas