varios valores valor una texto resultados regresar múltiples matriz devolver cumple condiciones con columnas coincidencias buscarv buscarh buscar excel excel-vba vlookup

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:

Tabla de datos:

Necesito la fórmula para devolver valores en una celda donde coinciden A1-1A y A.0002. El resultado debería ser 8 3