这是一种略有不同的方法。
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
它允许您确定分隔符,就像您可以拥有的那样,
或者只是一个空格或您想要在返回值之间放置的任何内容。
第二个条件询问您是否要为任何空的内容返回一个空的空间。
第三个,您将放置一个 IF() 数组形式,它使用您想要过滤返回值的条件。
因此,在您的实例中,您将以数组形式使用它:
=TEXTJOIN(" ",TRUE,IF((A2:A7="A")*(B2:B7=2),C2:C7,""))
The " "
说我们想要值之间有一个空格。
The TRUE
意味着我们跳过任何空白,这很重要,因为当过滤器不证明值合理时我们会发送空白。
the IF((A2:A7="A")*(B2:B7=2),C2:C7,"")
循环遍历列并在两个布尔测试都为 TRUE 时返回值,否则返回空白。
作为数组公式,退出编辑模式时必须使用 Ctrl-Shift-Enter 来确认,而不是 Enter。如果操作正确,Excel 将显示{}
围绕公式。
如果您想返回完整的列,您可以简单地使用:
=TEXTJOIN(" ",TRUE,C2:C7)
以常规形式,它会返回8 3 3 9 2 3
在一个单元格中。
NOTE
如果您有 Office 365 ExcelTEXTJOIN
是一个本地存在的公式,在这两种情况下都像上面一样输入。
Office 365也有FILTER,我们可以使用:
=TEXTJOIN(" ",TRUE,FILTER(C2:C7,(A2:A7="A")*(B2:B7=2),""))