Pregunta

Una solución común en Excel a Sumif () con múltiples condiciones va así (Esta fórmula cuenta todos los casos en los que la columna A tiene el valor en C1 y la columna B tiene el valor en D1):

=SUMPRODUCT((A1:A9=C1)*(B1:B9=D1))

i, ahora, necesita una función que concateden cadenas de líneas que cumplan múltiples condiciones. Hay una excelente solución para One condición en http://www.ms-office-forum.net/forum/showthread.php?t=273352

i, sin embargo, quiero verificar múltiples condiciones, y, por lo tanto, use el truco subproducto () desde arriba. Mi problema es: ¿Cómo debo definir el parámetro en la función para obtener una matriz? Esto es lo que llegué hasta ahora:

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Function CONCATIF(Kriterium, Inhalte)
    Dim mydic As Object
    Dim L As Long
    Set mydic = CreateObject("Scripting.Dictionary")

    For L = 1 To UBound(Kriterium)
        If Kriterium(L, 1) = 1 Then
            If Inhalte(L, 1) <> "" Then
              mydic(L) = Inhalte(L, 1)
            End If
        End If
    Next
    CONCATIF = Join(mydic.items, vbCrLf)
End Function

Esto funciona bien, si selecciono una columna para el parámetro 1. Pero tan pronto como incluyo una fórmula del producto (como arriba), solo se pasa una variante / doble con el valor 1 para kriterium .

=CONCATIF(A1:A9; E1:E9)                    Works fine (if column A is 0/1 coded)
=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9)    Does not work at all

¿Alguna sugerencia? ¡Gracias!

¿Fue útil?

Solución

El problema fue porque Formula:

=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9)

debe llamarse presionando ctrl + shift + ingrese

Otros consejos

Por el bien de la integridad, aquí está la macro completa de Excel VBA para concatenar cadenas de un rango (puede tener columnas de cadenas múltiples), si se coinciden los criterios en otras columnas.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit


Public Function CONCATIF(Kriterium, Inhalte)
    Dim mydic As Object
    Dim L As Long
    Dim C As Long
    Dim N As Long
    Dim cols As Long
    Set mydic = CreateObject("Scripting.Dictionary")
    cols = Inhalte.Columns.Count
    N = 1

    For L = 1 To UBound(Kriterium)
        If Kriterium(L, 1) = 1 Then
            For C = 1 To cols
                If Not IsEmpty(Inhalte(L, C)) Then
                    mydic(N) = "* " & Inhalte(L, C)
                    N = N + 1
                End If
            Next
        End If
    Next
    CONCATIF= Join(mydic.items, vbCrLf)
End Function

Use lo siguiente: y no olvides ingresar por Ctrl + shift + ingrese

=CONCATIF((A1:A:9="male")*(B1:B9="young"); C1:D9)

Datos de muestra

    A       B       C           D
01  male    young   Comment 1   Comment 2
02  male    old     Comment 3   Comment 4
03  female  young   Comment 5   Comment 6
04  female  old     Comment 7   Comment 8
05  male    young   Comment 9   Comment A

Resultados en

* Comment 1
* Comment 2
* Comment 9
* Comment A

Para Google: Esto también se encontrará como Verkettenwenn ()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top