按条件连接字符串的自定义函数:CONCATENATEIF

按照条件检索A列并获取对应的B列中的字符串,然后将这些字符串以分隔符连在一起,CONCATENATEIF能够实现这个功能。
看了excel的函数,没有能直接实现的,通过函数组合也基本不可能实现,至少我没想出来思路。
互联网上各种搜,也没有好的解决方案。
问了各个excel群里的高手,大家一致认为通过函数无法实现,必须请出vba这个终极利器。
好,思路有了,考虑到我们的命题和sumif这个按条件求和的函数很类似,只是sumif是数值相加求和,而我们需要字符串相连,于是我就去搜了sumif如何用vba写出来,结果还真的搜到了。
于是我修修改改,几番调试和完善,最终搞定,函数共享出来给用的着的同学:

Public Function CONCATENATEIF(R1 As Range, TJ, Optional R2, Optional Connector)
  Dim ARR1, ARR2, i As Long, j As Long, F As Boolean
   ARR1 = R1.Value
   If IsMissing(R2) Then
    ARR2 = R1.Value
    Else
    ARR2 = R2.Value
   End If
   S = ""
   If Not (TJ Like "[= ,< , <= ,> ,>= , <> ]" & "*") And IsNumeric(TJ) Then
     TJ = "=" & TJ
   End If
   For i = 1 To UBound(ARR1)
    For j = 1 To UBound(ARR1, 2)
     If Not (TJ Like "[= ,< , <= ,> ,>= , <> ]" & "*") Then
      If ARR1(i, j) = TJ Then S = S & Connector & ARR2(i, j)
      Else
      If Evaluate(Val(ARR1(i, j)) & TJ) Then S = S & Connector & ARR2(i, j)
     End If
    Next j
   Next i
  CONCATENATEIF = S
End Function

在 excel 里按 alt+f11 就可以调出窗口,选择新建模块,复制粘贴进去保存,然后再要用的单元格里写入如下表达式即可,不过注意,必须保存为带宏的excel文件格式才行。

=CONCATENATEIF(D3:D14,"A",L3:L14,"-")

=CONCATENATEIF(条件区域,条件[[,获取字符串区域],分隔符也叫连接符号])
意思和参数解释下:从D3:D14范围内寻找所有值为”A”对应的L列中的所有值并以”-“作为分隔符连接。
和sumif用法一样,只是多了最后一个参数:分隔符。

以下为原作者原创代码,页尾还有原帖链接。
原帖标题:谁知道excel中sumif函数的vba写法???_百度知道

[原创]
Public Function TJQH(R1 As Range, TJ, Optional R2)
  Dim ARR1, ARR2, i As Long, j As Long, S As Double, F As Boolean
   ARR1 = R1.Value
   If IsMissing(R2) Then
    ARR2 = R1.Value
    Else
    ARR2 = R2.Value
   End If
   S = 0
   If Not (TJ Like "[= ,< , <= ,> ,>= , <> ]" & "*") And IsNumeric(TJ) Then
     TJ = "=" & TJ
   End If
   For i = 1 To UBound(ARR1)
    For j = 1 To UBound(ARR1, 2)
     If Not (TJ Like "[= ,< , <= ,> ,>= , <> ]" & "*") Then
      If ARR1(i, j) = TJ Then S = S + Val(CStr(ARR2(i, j)))
      Else
      If Evaluate(Val(ARR1(i, j)) & TJ) Then S = S + Val(CStr(ARR2(i, j)))
     End If
    Next j
   Next i
  TJQH = S
End Function

把代码粘贴到模块中,然后在工作表中就可象输入SUMIF函数一样使用这个自定义的TJQH函数。
=TJQH(条件区域,条件[,求和区域])

追问
那的方法和原sumif 效率有天壤之别
回答
可以实现SUMIF函数功能,但计算效率肯定不如SUMIF函数了。只是在假设没有这个函数的情况写的替代品吧,不过写起来还是有些难度的。

来源URL:http://zhidao.baidu.com/link?url=tP4GzvVzmbTp8FEsabOsaAskdn-0V-6K0JfQRDlutiALqGg7OURIi7qSyR8evEFnYbtq-CJ6gvtq7Xy-VaWFoa