我可以将SumIf函数用于字符串吗?如果没有,UDF是唯一的替代方案,还是有办法以某种方式通过索引实现这一目标?
如果相应行中的单元格设置为“是”,我试图连接表的值。
芝加哥-----------是的
纽约----------(空白)
洛杉矶------是的
孟菲斯----------是的
旧金山---(空白)
结果:芝加哥,洛杉矶,孟菲斯
答案 0 :(得分:3)
连接与字符编码(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
用法: