Excel中的一个常见解决方案,具有多个条件的SUMIF()就像这样 (此公式计算所有情况,其中A列的值为C1,B列的值为D1):
=SUMPRODUCT((A1:A9=C1)*(B1:B9=D1))
我现在需要一个函数来连接满足多个条件的行的字符串。 http://www.ms-office-forum.net/forum/showthread.php?t=273352
的一个条件有一个很好的解决方案 但是,我想检查多个条件 - 因此使用上面的SUBPRODUCT()技巧。我的问题是:如何在函数中定义参数以获取数组?这是我到目前为止所得到的:' **********************************************************************
' 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选择一列,这样可以正常工作。但是只要我包含一个产品公式(如上所述),就只会为 Kriterium 传递一个值为1的Variant / Double
=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
有什么建议吗?谢谢!
答案 0 :(得分:2)
问题是因为公式:
=CONCATIF((A1:A9=C1)*(B1:B9=D1); E1:E9)
需要通过按 CTRL + SHIFT + ENTER
来调用答案 1 :(得分:0)
为了完整起见,这里是完整的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
对于谷歌:这也应该是VERKETTENWENN()