ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖

[原创] 高级字符连接函数,可用于工作表及vba,可接受内存数组及各类型混合参数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-5-31 10:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:自定义函数开发
太厉害了!!!!学习

TA的精华主题

TA的得分主题

发表于 2017-8-2 19:33 | 显示全部楼层
这个函数有个小问题,如果我不需要用连接符,我在连接符参数位置输入一个空白符,像这样:
Contxt("",A1:B2)
得到的结果会把范围中第一个值的第一个字符忽略掉

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-3 01:27 | 显示全部楼层
雨骤非船 发表于 2017-8-2 19:33
这个函数有个小问题,如果我不需要用连接符,我在连接符参数位置输入一个空白符,像这样:
Contxt("",A1:B ...

这确实是一个bug 一般我自己使用的时候都不会是对单个单元格用 也没注意,要改就在参数里最后改一下 判断一下第一个字符不是连接符就不要mid(,2)了

TA的精华主题

TA的得分主题

发表于 2017-8-3 11:56 来自手机 | 显示全部楼层
百度不到去谷歌 发表于 2017-8-3 01:27
这确实是一个bug 一般我自己使用的时候都不会是对单个单元格用 也没注意,要改就在参数里最后改一下 判断 ...

不是单个单元格的问题,因为有时候要合并的东西我不想要连接符,只想把数字完全合并起来,就会出问题,或者连接符有两个或以上的字符时也会有问题出现
我自己做的合并函数是在每次合并时多加一个判断,可能运算速度有所减慢,不过那样比较稳妥点

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-3 13:08 | 显示全部楼层
本帖最后由 百度不到去谷歌 于 2017-8-3 13:11 编辑
雨骤非船 发表于 2017-8-3 11:56
不是单个单元格的问题,因为有时候要合并的东西我不想要连接符,只想把数字完全合并起来,就会出问题,或 ...

改一下就行了呗 ConTxt = Mid(tmptext,len(Dilimitetr)+1)

TA的精华主题

TA的得分主题

发表于 2017-8-3 13:33 来自手机 | 显示全部楼层
百度不到去谷歌 发表于 2017-8-3 13:08
改一下就行了呗 ConTxt = Mid(tmptext,len(Dilimitetr)+1)

嗯这样倒是都解决了!

TA的精华主题

TA的得分主题

发表于 2019-3-17 17:22 | 显示全部楼层
yzlsc 发表于 2017-5-4 23:19
谢谢,学习了。但楼主的代码没有考虑忽略逻辑值,以及合并日期型数据。试着修改了一下,请指教!

“Case "ge" 'Range单元格区域类型,直接遍历”,实际上合并处理“ge”与“()”是存在问题的,因为两者的遍历顺序是不一样的,“ge”是先列后行,而“()”是先行后列,应该在“()”先进行一次转置再遍历,才能得到正确的字符串连接顺序,楼主虽然是分开处理的,在“()”时也没有先进行转置。

TA的精华主题

TA的得分主题

发表于 2023-2-28 09:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-2-28 09:50 | 显示全部楼层
高水平分享和探讨!!!! 我只能学习老师们的精神了。

TA的精华主题

TA的得分主题

发表于 2023-2-28 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
给楼主点赞,为了自己方便,我以前也用笨方法写过一个连接二维数组某一行中指定的列的函数,见笑了
'arrSoc                数据源数组(二维)
'iRow                数据源数组需要取值的行
'arrCol                需要取值的列,需用一维数组引用,可使用Array
'delimiter        连接符
Public Function JoinItem(ByVal arrSoc As Variant, ByVal iRow As Long,  _
            ByVal arrCol As Variant, ByVal delimiter As String) As String
    Dim sJoin$, i&, arrSocLB%, arrSocUB%, arrColLB%, arrColUB%
    arrSocLB = LBound(arrSoc, 2)
    arrSocUB = UBound(arrSoc, 2)
    arrColLB = LBound(arrCol)
    arrColUB = UBound(arrCol)
    If arrColUB - arrColLB > arrSocUB - arrSocLB Then
        MsgBox("要连接的个数不能大于数据源数组单行的个数")
        End
    End If
    For i = arrColLB To arrColUB
        sJoin = sJoin & delimiter & arrSoc(iRow, arrCol(i))
    Next
    JoinItem = Mid(sJoin, 2, Len(sJoin))
End Function
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 22:32 , Processed in 0.038372 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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