Saltar al contenido

Buscar datos en base a dos referencias


Recommended Posts

publicado

Codigo para buscar datos tomando en cuenta dos referencias por ejemplo:

En la columna A tengo una lista de nombres en la fila 2 tengo los meses.

Nombre.....Enero.. Febrero.. Marzo... Abril

Alex ...........10........ 18....... 35....... 50

Pedro ..........85........ 42....... 21....... 13

Juan

Buscar alex en Marzo resultado 35

Gracias de antemano

Macro Consulta.xls

Invitado Cacho R
publicado

Hola! LIONJ.

Una macro para lo que planteas me parece "un poco mucho"...

Por ejemplo podrías intentar en la celda D22 con lo siguiente:

= VLOOKUP(B22, Datos!$A$2:$M$9, MATCH(C22, Datos!$A$2:$M$2, 0), FALSE)

(Excel en inglés)

ó

= BUSCARV(B22, Datos!$A$2:$M$9, COINCIDIR(C22, Datos!$A$2:$M$2, 0), FALSO)

(Excel en español)

Saludos, Cacho R.

publicado

Hola!

Realmente necesitas una macro para tu problema?, si no es es asi bien podrias solucionarlo utilizando esta formula en D22 de la hoja Menu:

=DESREF(Datos!A2,COINCIDIR(Menu!B22,Datos!A:A,0)-2,COINCIDIR(Menu!C22,Datos!2:2,0)-1)

Podrias convertir previamente tu rango de datos en tabla para que la formula sea dinamica y no tome toda la columna y fila!

La otra alternatica es acomodar los datos de tal forma de que todos los nombres te queden en A, los meses en B y las cantidades en C y de ese nuevo rango crear una tabla dinamica la cual puedas filtrar y te regrese los datos deseados.

Ya si de plano quieres la macro, este es el codigo:


Option Explicit

'Para que este codigo siempre funcione correctamente dse debe estar seguro que no habra duplicados en la fila
'de los mese ni en la columna de los nombres, de lo contrario, puede dar datos erroneos
Sub Consulta_Plus()
Dim wsParam As Worksheet
Dim wsData As Worksheet
Dim rngData As Range
Dim rngName As Range
Dim rngMonth As Range
Dim name As String
Dim month As String
Dim result As String

Set wsParam = ThisWorkbook.Sheets("Menu")
Set wsData = ThisWorkbook.Sheets("Datos")
Set rngData = wsData.Range("B2").CurrentRegion

result = "No Encontrado!"
name = wsParam.Range("B22")
month = wsParam.Range("C22")

For Each rngName In rngData.Columns(1).Rows
If rngName = name Then
For Each rngMonth In rngData.Rows(1).Columns
If rngMonth = month Then
'result = rngData(rngName,
End If
Next rngMonth
End If
Next rngName
End Sub
[/CODE]

Te repito creo que seria mejor con alguno de las dos primeras soluciones.

Saludos!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.