EXCEL自定义字符连接函数可接受内存数组及各类型混合参数 textjoin contxt 图文

2016年11月1日09:07:04EXCEL自定义字符连接函数可接受内存数组及各类型混合参数 textjoin contxt 图文已关闭评论 4,852 views
微信公众号 【EXCEL880】 QQ群【341401932】
课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com

Excel的工作表函数做字符连接极不方便 就是vba的join局限性也很大

为此学习借鉴整理了一个字符连接通用函数,可接受不同类型参数,单元格区域,数组以及单个参数可随意混合组合传入

输出结果可跳过空值,可指定分隔符,在需要大量字符串连接的时候,可以方便的调用

以剩下时间专注于业务逻辑,这个函数我在sql中用作构造 表.z字段非常好用

已知了表头 和表名 表1构造一个表名与字段的连接 字符串用这个极其方便

字段1 字段2 字段3 字段4 字段5 字段6 字段7 字段8 字段9

debug.Print [ConTxt(",","[表1$]." &A1:D1,"[表2$.]" &E1:I1)]直接可得到以下结果

[表1$].字段1,[表1$].字段2,[表1$].字段3,[表1$].字段4,[表2$.]字段5,[表2$.]字段6,[表2$.]字段7,[表2$.]字段8,[表2$.]字段9

当然还有其他很多好用的地方 希望能帮到有需要的人

工作表中使用实例  Excel自定义字符连接函数可接受内存数组及各类型混合参数

 

代码如下 未严格测试 若有错漏欢迎指正

  1. '———–Sub ConTxt———-Copyright@百度不到去谷歌 QQ80871835 2014/4/15—————————
  2. '功能 : 高级合并文本函数,结果返回一个参数合并后的字符串,忽略空值
  3. '使用第一参数做为分隔符,可接受数组参数
  4. '变量 : Dilimitetr 分隔符
  5. ' args 源数据,可接受多个参数及数组参数,以及他们的混合
  6. '———————————————————————————————————
  7. Function ConTxt(Dilimitetr$, ParamArray Args() As Variant) As Variant
  8. '第一参数为分隔符,后续会可选多区域多类型,空值将被忽略
  9. '可传递内存数组参数
  10.     Dim tmptext As Variant, i As Variant, cellv As Variant
  11.     Dim cell As Range
  12.     tmptext = ""
  13.     For i = 0 To UBound(Args) '遍历参数数组
  14.         If Not IsMissing(Args(i)) Then '判断参数是否有效
  15.             Select Case Right(TypeName(Args(i)), 2)
  16.              '对不同的参数类型采取不同的处理方式,数组类型可能有多种类型,所以判断最后一个字符
  17.             Case "ge" 'Range单元格区域类型,直接遍历
  18.                 For Each cell In Args(i)
  19.                     If cell <> "" Then
  20.                         tmptext = tmptext & Dilimitetr & cell
  21.                     End If
  22.                 Next cell
  23.             Case "()"  '数组类型,
  24.                 For Each cellv In Args(i)
  25.                     If cellv <> "" Then tmptext = tmptext & Dilimitetr & cellv
  26.                 Next cellv
  27.             Case Else '其他类型,即单个值参数
  28.                 If Args(i) <> "" Then tmptext = tmptext & Dilimitetr & Args(i)
  29.             End Select
  30.         End If
  31.     Next i
  32.     ConTxt = Mid(tmptext, Len(Dilimitetr) + 1) '去掉开头多余分隔符
  33. End Function
  34. Public Sub test()
  35.     Dim a As Variant
  36.     a = Split("1 2 3 4", " ")
  37.     Debug.Print ConTxt(",", 0, a, "12")
  38.     Debug.Print ConTxt(",", [D1:D10])
  39.     Debug.Print ConTxt(",", 1, 2, "阿斯顿")
  40. End Sub

 

 

表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页