Вопрос

Один общий раствор в Excel для Sumif () с несколькими условиями идет так (Эта формула подсчитывает все случаи, в которых столбец A имеет значение в C1 и столбец B имеет значение в D1):

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

I, теперь нужна функция, что объединенные строки из строк выполняют несколько условий. Существует отличное решение для условий One And http://www.ms-office-forum.net/forum/showthread.php?t=273352

Я, однако, хочу проверить несколько условий - и, следовательно, использовать подводку () (). Моя проблема в том, что я должен определить параметр в функции, чтобы получить массив? Это то, что я получил до сих пор:

' **********************************************************************
' 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
.

Это отлично работает, если я выберу один столбцы для параметра 1. Но как только я включаю формулу продукта (например, выше), только для варианта / двойной со значением 1 для 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
.

Любые предложения? Спасибо!

Это было полезно?

Решение

Проблема была потому, что формула:

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

необходимо вызвать нажатием Ctrl + Shift + ENTER

Другие советы

Для полноты, вот полный макрос Excel VBA к объединенным строкам из диапазона (может иметь несколько строковых колонн), если связаны критерии в других столбцах.

' **********************************************************************
' 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
.

Используйте следующим образом - и не забудьте войти через Ctrl + Shift + ENTER

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

Данные образца

    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
.

Результаты

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

для Google: это также должно быть найдено как verkettenwenn ()

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top