excel - texto - VLOOKUP con múltiples criterios que devuelven valores en una celda
buscarh con dos condiciones (1)
Aquí hay un enfoque ligeramente diferente.
Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
Dim d As Long
Dim c As Long
Dim arr2()
Dim t As Long, y As Long
t = -1
y = -1
If TypeName(arr) = "Range" Then
arr2 = arr.Value
Else
arr2 = arr
End If
On Error Resume Next
t = UBound(arr2, 2)
y = UBound(arr2, 1)
On Error GoTo 0
If t >= 0 And y >= 0 Then
For c = LBound(arr2, 1) To UBound(arr2, 1)
For d = LBound(arr2, 1) To UBound(arr2, 2)
If arr2(c, d) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
End If
Next d
Next c
Else
For c = LBound(arr2) To UBound(arr2)
If arr2(c) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c) & delim
End If
Next c
End If
TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function
Le permite determinar si el delímetro, como puede tener ,
o solo un espacio o cualquier cosa que quiera poner entre los valores de retorno.
El segundo criterio pregunta si desea devolver un espacio vacío para cualquiera que esté vacío.
El tercero pondría una forma de matriz de IF () que usa los criterios que desea filtrar los valores de retorno.
Entonces, en tu caso, usarías esto en forma de matriz:
=TEXTJOIN(" ",TRUE,IF((A2:A7="A")*(B2:B7=2),C2:C7,""))
El " "
dice que queremos un espacio entre los valores.
El TRUE
significa que omitimos los espacios en blanco, esto es importante ya que enviamos espacios en blanco cuando los valores no están justificados por el filtro.
el IF((A2:A7="A")*(B2:B7=2),C2:C7,"")
recorre las columnas y devuelve los valores cuando ambas pruebas booleanas son VERDADERAS. De lo contrario, devuelve un espacio en blanco.
Al ser una fórmula de matriz, se debe confirmar con Ctrl-Shift-Enter al salir del modo de edición en lugar de Entrar. Si se hace correctamente, Excel colocará {}
alrededor de la fórmula.
Si desea devolver la columna completa, simplemente puede usar:
=TEXTJOIN(" ",TRUE,C2:C7)
En forma regular y devolvería 8 3 3 9 2 3
en una celda.
NOTA
Si tiene Office 365 Excel, TEXTJOIN
es una fórmula que existe de forma nativa y que se ingresa como arriba en ambos casos.
Simplemente usaría las fórmulas como se describe arriba y no usaría el código vba.
Encontré este VBA que es capaz de devolver todos los valores coincidentes en una celda usando un criterio para que coincida:
Function MYVLOOKUP(pValue As String, pWorkRng As Range, pIndex As Long)
''Update 20150310
Dim rng As Range
Dim xResult As String
xResult = ""
For Each rng In pWorkRng
If rng = pValue Then
xResult = xResult & " " & rng.Offset(0, pIndex - 1)
End If
Next
MYVLOOKUP = xResult
End Function
Pero necesito esta VLOOKUP para devolver los valores en comparación con los criterios de coincidencia múltiple.
¿Alguna idea de cómo podría actualizarse?
Gracias. Actualizar a continuación:
Necesito la fórmula para devolver valores en una celda donde coinciden A1-1A y A.0002. El resultado debería ser 8 3