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

2016年11月1日09:07:04 评论 3,527 views
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
微信公众号 【EXCEL880】 QQ群【273774246】

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

 

 

微信公众号 【EXCEL880】 QQ群【273774246】
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页
表格 定制  数据 合并 处理 分析 VBA 编程 开发 网页

发表评论

您必须才能发表评论!