我可以对字符串使用 SumIf 函数吗?如果不是,UDF 是唯一的选择,还是有办法通过索引以某种方式潜在地实现这一点?
如果相应行中的单元格设置为“是”,我正在尝试连接表的值。
例子:
芝加哥 ----------- 是
纽约 ---------- (空白)
洛杉矶 ------ 是
孟菲斯 ---------- 是
圣弗朗西斯科——(空白)
结果:芝加哥、洛杉矶、孟菲斯
我可以对字符串使用 SumIf 函数吗?如果不是,UDF 是唯一的选择,还是有办法通过索引以某种方式潜在地实现这一点?
如果相应行中的单元格设置为“是”,我正在尝试连接表的值。
芝加哥 ----------- 是
纽约 ---------- (空白)
洛杉矶 ------ 是
孟菲斯 ---------- 是
圣弗朗西斯科——(空白)
结果:芝加哥、洛杉矶、孟菲斯
在字符编码 (ASCII) 方面,连接不同于求和。SumIf 用于求和,您不能使用它来连接。了解差异很重要。
我从 Mike Rickson 先生那里推荐这个 UDF:
Function ConcatIf(ByVal compareRange As Range, ByVal xCriteria As Variant, _
Optional ByVal stringsRange As Range, Optional Delimiter As String) As String
Dim i As Long, j As Long, criteriaMet As Boolean
Set compareRange = Application.Intersect(compareRange, _
compareRange.Parent.UsedRange)
If compareRange Is Nothing Then Exit Function
If stringsRange Is Nothing Then Set stringsRange = compareRange
Set stringsRange = compareRange.Offset(stringsRange.Row - compareRange.Row, _
stringsRange.Column - compareRange.Column)
For i = 1 To compareRange.Rows.Count
For j = 1 To compareRange.Columns.Count
If (Application.CountIf(compareRange.Cells(i, j), xCriteria) = 1) Then
ConcatIf = ConcatIf & Delimiter & CStr(stringsRange.Cells(i, j))
End If
Next j
Next i
ConcatIf = Mid(ConcatIf, Len(Delimiter) + 1)
End Function
用法: