ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按指定条件连接A列数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-20 00:16 | 显示全部楼层 |阅读模式
本帖最后由 WYS67 于 2018-12-20 15:41 编辑

20181220141629.png 20181220141643.png 20181220141658.png

请老师帮忙创建一个 按指定条件对A列源数据上下连接的自定义函数。
重要提示:1.如果G:H列显示位置指定的行号数少于数据源组合成的三位数个数,则自动去掉排在上面的三位数,只保留最大行号能够恰好容纳的最下面的三位数;2.组合三位数时,自动忽略数据源A列中间和下面的空格。

多条件连接A列数据.zip (19.16 KB, 下载次数: 7)

最简单的方法,是根据http://club.excelhome.net/forum. ... 1438068&pid=9764322 59楼反映的原代码,只需解决里面提到的两处问题就行了。
也就是59楼的计算结果几乎完全符合要求。其间偶尔出现遗漏的总是最后一个三位数,我觉得是没有正确计算结果显示的起始行号---如果把存放计算结果的起始行上移一行,然后顺次排列下来就行了!

附:http://club.excelhome.net/forum. ... 1438068&pid=9764322    原代码
Function SSLJ(rn As Range, a, Optional b = "")
    Dim ar, br, cr, dr, c%, d&, i&, j&, m&, n&, x&, y&
    Application.Volatile
    ar = rn: x = Application.Count(rn)
    c = (x - 2) Mod 3: d = Int(x / 3)
    For j = UBound(ar) To 1 Step -1
        If ar(j, 1) <> "" Then Exit For
    Next
    ReDim br(1 To j, 0): ReDim cr(1 To UBound(ar), 0): ReDim dr(1 To UBound(ar), 0)
    For i = 1 To j
        If ar(i, 1) <> "" Then y = y + 1: br(y, 0) = ar(i, 1)
    Next
    For i = 1 To UBound(ar)
        m = i * 3 + c
        If i < d Then cr(i, 0) = br(m - 2, 0) & br(m - 1, 0) & br(m, 0) Else: cr(i, 0) = ""
        If b <> 0 And b <> "" Then
            n = b - d - 3
            If i > n And i < b - 3 Then dr(i, 0) = cr(i - n, 0) Else: dr(i, 0) = ""
        End If
    Next
    If a = 1 And (b = 0 Or b = "") Then cr(d, 0) = br(x - 1, 0) & br(x, 0)
    If a = 1 And b <> 0 And b <> "" Then dr(b - 3, 0) = br(x - 1, 0) & br(x, 0)
    If b = 0 Or b = "" Then SSLJ = cr
    If b <> 0 And b <> "" Then SSLJ = dr
End Function
      此代码,当E:H列输入完整公式 {=SSLJ(数据区域,连接模式【0或1】,显示位置【0或指定行号】)  时,当A列数据个数除以3的余数为0或1时,显示的计算结果都非常正确但余数为2时,就会出现如下所示的最后一个三位数被遗漏,而没有显示的错误。如下面最右边截图所示:
20181220153247.png 20181220153257.png 20181220153314.png

麻烦老师们看看是代码的哪一步计算出现的错误,并给予改正。下面是附件:


多条件连接A列数据.zip (52.99 KB, 下载次数: 8)



TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 08:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
恳请老师们帮忙修改代码。

TA的精华主题

TA的得分主题

发表于 2018-12-20 09:24 | 显示全部楼层
昨天看了半天自定义函数的帖子,也没看明白。

首先我的确认一点,楼主要求函数结果显示到不同区域,这个自定义函数能不能做到呢?
自定义函数,不是写在单元格里,然后结果显示出来吗?
那不应该是公式写在哪,结果显示在哪吗?难道还可以A1写公式,B1列出结果?那A1显示什么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 09:40 | 显示全部楼层
恳请老师们帮忙修改代码。

TA的精华主题

TA的得分主题

发表于 2018-12-20 09:48 | 显示全部楼层
太多的说明让人退避三舍:直接说明条件模拟几个结果,规定这个那个,楼主自己做好了

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:02 | 显示全部楼层
本帖最后由 WYS67 于 2018-12-20 10:12 编辑
dsmch 发表于 2018-12-20 09:48
太多的说明让人退避三舍:直接说明条件模拟几个结果,规定这个那个,楼主自己做好了

老师:最简单的方法,是根据http://club.excelhome.net/forum. ... 1438068&pid=9764322 59楼反映的原代码,只需解决里面提到的两处问题就行了。
也就是59楼的计算结果几乎完全符合要求。其间偶尔出现遗漏的总是最后一个三位数,我觉得是没有正确计算结果显示的起始行号---如果把存放计算结果的起始行上移一行,然后顺次排列下来就行了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:15 | 显示全部楼层
micch 发表于 2018-12-20 09:24
昨天看了半天自定义函数的帖子,也没看明白。

首先我的确认一点,楼主要求函数结果显示到不同区域,这个 ...

老师:看一下1楼最下面的最新补充。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:18 | 显示全部楼层
dsmch 发表于 2018-12-20 09:48
太多的说明让人退避三舍:直接说明条件模拟几个结果,规定这个那个,楼主自己做好了

恳请老师按6楼里描述的,修改http://club.excelhome.net/forum. ... 1438068&pid=9764322 59楼的原代码,把出现错误的存放计算结果的起始行上移一行,然后顺次排列下来;优化代码结构,解决运行卡顿的问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:33 | 显示全部楼层
micch 发表于 2018-12-20 09:24
昨天看了半天自定义函数的帖子,也没看明白。

首先我的确认一点,楼主要求函数结果显示到不同区域,这个 ...

老师:结果显示选择是自定义函数的第三参数显示位置决定的。请看下面截图里的I22:I27
20181220103039.png



TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 04:50 , Processed in 0.028504 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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