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

2016年11月1日09:07:04 评论 3,112 views
198元黄金VIP包含 站内所有资源免费+VBA175+基础408+代码助手VIP+Q群答疑+
点我打赏升级VIP 教程淘宝购买链接 加微信EXCEL880A 课领取所有教程7天免费试学 教程所有目录excel880.com/mulu

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自定义字符连接函数可接受内存数组及各类型混合参数

 

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

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

 

 

  • 微信扫码免费学习
  • 免费学习48小时
  • weinxin
  • 我的微信公众号
  • EXCEL880
  • weinxin

发表评论

您必须才能发表评论!