吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 782|回复: 14
收起左侧

[其他原创] 代替TEXTJOIN函数的方法

[复制链接]
sun420001775 发表于 2024-12-13 09:42
本帖最后由 sun420001775 于 2024-12-13 09:44 编辑

`TEXTJOIN` 是 Excel 中的一个函数,用于将多个文本字符串合并为一个字符串,并可以指定分隔符。虽然 `TEXTJOIN` 函数在 Excel 中非常方便,但在 VBA 中,我们可以创建一个自定义函数来实现类似的功能。

下面是一个示例 VBA 代码,定义了一个名为 `CustomTextJoin` 的函数,功能类似于 Excel 的 `TEXTJOIN`:

```vba
Function CustomTextJoin(delimiter As String, ignore_empty As Boolean, ParamArray text_items() As Variant) As String
    Dim result As String
    Dim i As Long
   
    result = ""
   
    For i = LBound(text_items) To UBound(text_items)
        If Not IsEmpty(text_items(i)) Or Not ignore_empty Then
            If result <> "" Then
                result = result & delimiter
            End If
            result = result & text_items(i)
        End If
    Next i
   
    CustomTextJoin = result
End Function
```

### 如何使用此函数:

1. 打开 Excel,按 `ALT + F11` 进入 VBA 编辑器。
2. 在菜单中选择 `插入` -> `模块`,然后将上述代码粘贴到模块窗口中。
3. 关闭 VBA 编辑器,返回 Excel。

### 示例用法:

在 Excel 中,你可以像使用其他函数一样使用 `CustomTextJoin` 函数。例如:

```excel
=CustomTextJoin(", ", TRUE, A1, A2, A3)
```

这个公式将会把单元格 A1, A2, A3 中的文本用 ", " 作为分隔符连接起来。如果某个单元格为空且你将 `ignore_empty` 参数设置为 `TRUE`,那么空单元格将被忽略。

### 注意事项:

- `delimiter` 是分隔符,可以是任何你想要的字符串。
- `ignore_empty` 是一个布尔值,指示是否忽略空单元格。
- `ParamArray` 允许你传递任意数量的参数。

这样,你就可以在 VBA 中使用 `CustomTextJoin` 函数来实现类似于 Excel 的 `TEXTJOIN` 功能。
1734054095805.jpg

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
简忘 + 1 + 1 用心讨论,共获提升!
在下 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gufengaoyue 发表于 2024-12-13 16:32
可以扩展一下,对ParamArray 进行分类:字符串、单元格、区域、数组,等等,
这个函数一般不会只是一个单元格一个单元格去加,会是一片区域,如A1:A10,这样的。
供参考

[Visual Basic] 纯文本查看 复制代码
Function TextUnion(delimiter As String, ignore_empty As Boolean, ParamArray arr() As Variant) As String
Application.Volatile  '设置为易失性函数,可以即时更新
If IsMissing(arr()) Then TextUnion = "": Exit Function

Dim Rg As Range, Tmp As Variant
For a = LBound(arr()) To UBound(arr())
    If Not IsMissing(arr(a)) Then
        Select Case TypeName(arr(a))
            Case "Range"
                For Each Rg In arr(a)
                    If Len(Rg.Value) > 0 Or (Len(Rg.Value) = 0 And Not ignore_empty) Then TextUnion = TextUnion & delimiter & Rg.Value
                Next
            Case "Variant()"
                For Each Tmp In arr(a)
                    If Len(Tmp) > 0 Or (Len(Tmp) = 0 And Not ignore_empty) Then TextUnion = TextUnion & delimiter & Tmp
                Next
            Case Else
                If Len(arr(a)) > 0 Or (Len(arr(a)) = 0 And Not ignore_empty) Then TextUnion = TextUnion & delimiter & arr(a)
        End Select
    End If
Next
        TextUnion = Mid(TextUnion, Len(delimiter) + 1)
End Function

odinchu 发表于 2024-12-13 10:39
sen7fire 发表于 2024-12-13 10:47
感觉VBA真的好复杂,SQL只要简单一个函数就能自定义连接符和链接方式
 楼主| sun420001775 发表于 2024-12-13 10:50
sen7fire 发表于 2024-12-13 10:47
感觉VBA真的好复杂,SQL只要简单一个函数就能自定义连接符和链接方式

这是2019版本以前可以代替的
otra 发表于 2024-12-13 11:50
这是2019版本以前可以代替的
小能维尼 发表于 2024-12-13 12:38
学到了,我搞这么久vba,才知道ParamArray
damn
deewangs 发表于 2024-12-13 12:47
用&不可以吗?
头像被屏蔽
pomxion 发表于 2024-12-13 16:03
提示: 作者被禁止或删除 内容自动屏蔽
byxc 发表于 2024-12-13 16:09

先收藏   后面再看看怎么用
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-6 05:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表