buscarv múltiples resultados |
Responder |
Autor | |
Elenam_80
Habitual Unido: 04/Mayo/2015 Localización: Madrid Estado: Sin conexión Puntos: 121 |
Tema: buscarv múltiples resultados Enviado: 23/Marzo/2020 a las 13:08 |
Hola!
Estoy intentando hacer un buscarv en una tabla con múltiples resultados. De normal siempre he sabido hacerlo con uno, he intentado ir creando filtros en la hoja a buscar, pero el buscarv lo del filtro no lo reconoce, busca en toda la hoja igual. Sería algo así: Hoja1 CODIGO FASES 1 A 2 A 1 B 1 C 2 C 3 A 3 B 4 C Y en la Hoja2 que aparezca así: CODIGO faseA faseB faseC 1 A B C 2 A C 3 A B C 4 C En la Hoja2 ya tendría la cabecera creada. Hice una macro con un primer paso para poner en la columna 1 de la Hoja2 los códigos sin duplicados y luego había pensado en ir filtrando en la Hoja1 por cada fase y hacer el buscarv de siempre, pero no funciona. El rango que he definido sigue siendo el mismo. (las variables ya estarían creadas antes y el rango ya lo habría definido con hoja1) codigo = Sheets ("Hoja1").Cells (Count, 1) fase = Application.Vlookup (codigo, rango, 2,False) Alguna idea? De esta forma solo me pega en la Hoja2 lo primero que encuentra de cada código. Gracias!! |
|
Ele
|
|
Elenam_80
Habitual Unido: 04/Mayo/2015 Localización: Madrid Estado: Sin conexión Puntos: 121 |
Enviado: 23/Marzo/2020 a las 14:41 |
Hola! Me acaban de dar la respuesta y funciona, la dejo aquí por si le sirve de ayuda a alguien ;). Sl2!
Sub reordenarFases() 'x Elsamatilde Set ho1 = Sheets("Hoja1") 'controla que haya datos x = ho1.Range("A" & Rows.Count).End(xlUp).Row If x < 2 Then MsgBox "No hay datos en Hoja1": Exit Sub 'ordenar la hoja .... opcional: en otro rango o volver a reordenarla al finalizar If x > 2 Then ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Hoja1").Sort.SortFields.Add Key:=Range("A2:A" & x), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Hoja1").Sort .SetRange Range("A1:B9" & x) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If 'limpiar tabla destino de posibles datos anteriores Set ho2 = Sheets("Hoja2") ho2.[A2].CurrentRegion.Offset(1, 0).ClearContents y = 1 'fila de destino 'recorrer la Hoja1 y crear registro hasta cambiar de código For i = 2 To x 'si cambia de código se pasa a fila sgte en destino If ho1.Range("A" & i) <> codi Then codi = ho1.Range("A" & i) y = y + 1 ho2.Range("A" & y) = codi End If Set busco = ho2.Rows("1:1").Find("Fase" & ho1.Range("B" & i), LookIn:=xlValues, lookat:=xlWhole) If Not busco Is Nothing Then ho2.Cells(y, busco.Column) = ho1.Range("B" & i) End If Next i MsgBox "Fin del proceso" End Sub |
|
Ele
|
|
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Enviado: 23/Marzo/2020 a las 19:48 |
Un poco más corto: Sub Reparte() Dim celda As Range, fila&, filau&, col& filau = Cells(Rows.Count, 1).End(xlUp).Row [CC1] = [B1] Range("B1:B" & filau).AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("CC1"), Unique:=True With Worksheets(2) .Range("A1").CurrentRegion.Offset(1).ClearContents For Each celda In Range("A2:A" & filau) fila = celda.Value + 1 col = WorksheetFunction.Match(celda.Offset(, 1), Range("CC1:CC100"), 0) .Cells(fila, 1).Value = celda.Value .Cells(fila, col).Value = celda.Offset(, 1).Value Next celda End With Range("CC1").CurrentRegion.ClearContents End Sub |
|
Saludos desde Tenerife.
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |