ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按指定条件连接数据,指定位置显示结果

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 03:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lss001 发表于 2018-12-19 23:57
一直忙着,以后请重新发帖求助!
Function SSLJ(rng As Range, a, Optional b = "")
    Application.V ...

20181220021645.png

老师:上面是1楼附件的要求。
经反复测试,发现69楼的代码虽然补齐了被遗漏的最后一个三位数,代码运行时卡顿现象轻了很多!但又出现了新的问题,如下面截图所示:
20181220024805.png 20181220024833.png
上面两张截图是没有空格的数据源。1.图1显示的是:E:H列有指定显示位置参数的计算结果,最后一个三位数没有恰好显示在指定行号上,而是靠上了一行;2.图2显示的是G:H列:当指定行号数少于数据源连成的三位数个数时,计算结果就会显示空白。3.而当数据源有空格时,E:F列除了最后一个三位数没有恰好显示在指定行号上,而是靠上了一行外,全部没有显示连接而成的三位数,而是空白:
20181220030519.png

以上问题解决以后,决不再麻烦打扰老师!恳请老师处理上述问题。

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

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 09:20 | 显示全部楼层
lss001 发表于 2018-12-19 23:57
一直忙着,以后请重新发帖求助!
Function SSLJ(rng As Range, a, Optional b = "")
    Application.V ...

老师:比较而言,11楼的代码【也就是59楼反映的】更接近要求。出现遗漏的总是最后一个三位数,如果把存放计算结果的起始行上移一行,然后顺次排列下来就行了!但69楼的代码运行效率更高!如果各取所长,就完美无憾了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 10:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lss001 发表于 2018-12-19 23:57
一直忙着,以后请重新发帖求助!
Function SSLJ(rng As Range, a, Optional b = "")
    Application.V ...

老师:比较而言,11楼的代码【也就是59楼反映的】更接近要求。偶尔出现遗漏的也总是最后一个三位数,如果把存放计算结果的起始行上移一行,然后顺次排列下来就行了!但69楼的代码运行效率更高!如果各取所长,就完美无憾了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 13:42 | 显示全部楼层
lss001 发表于 2018-12-19 23:57
一直忙着,以后请重新发帖求助!
Function SSLJ(rng As Range, a, Optional b = "")
    Application.V ...

老师:新帖发在http://club.excelhome.net/thread-1452453-1-1.html,可惜没有人能够写出代码,只得厚着脸皮再次恳请您解决问题。切切拜上!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 15:39 | 显示全部楼层
lss001 发表于 2018-12-19 23:57
一直忙着,以后请重新发帖求助!
Function SSLJ(rng As Range, a, Optional b = "")
    Application.V ...

附: 原代码
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时,就会出现如下所示的最后一个三位数被遗漏,而没有显示的错误。如下面三个截图所示


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


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

TA的精华主题

TA的得分主题

发表于 2018-12-20 17:59 来自手机 | 显示全部楼层
WYS67 发表于 2018-12-20 15:39
附: 原代码
Function SSLJ(rn As Range, a, Optional b = "")
    Dim ar, br, cr, dr, c%, d&, i&, j ...

实在忙,没过多验证,难免有误差!
现在只能挤点时间验证一下,见69楼附件!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 18:36 | 显示全部楼层
本帖最后由 WYS67 于 2018-12-20 18:41 编辑
lss001 发表于 2018-12-20 17:59
实在忙,没过多验证,难免有误差!
现在只能挤点时间验证一下,见69楼附件!
20181220183758.png


经测试,这次基本正确!只是不明白,在E5:E120输入公式 {=SSLJ($A$5:$A$120,E$3,$F$1)  后,会显示#VALUE!错误?如果变成在E5:E145输入公式 {=SSLJ($A$5:$A$145,E$3,$F$1),就能显示正确结果!
十分感谢老师在百忙中抽出时间为我呕心费神!以后坚决不会再打扰老师了!祝老师身体健康,工作顺利!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 18:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lss001 发表于 2018-12-20 17:59
实在忙,没过多验证,难免有误差!
现在只能挤点时间验证一下,见69楼附件!

[size=0.83em]20181220183758.png (142.96 KB, 下载次数: 0)
下载附件  [url=]保存到相册[/url]
[color=rgb(153, 153, 153) !important]2018-12-20 18:38 上传






经测试,这次基本正确!只是不明白,在E5:E120输入公式 {=SSLJ($A$5:$A$120,E$3,$F$1)  后,会显示#VALUE!错误?如果变成在E5:E145输入公式 {=SSLJ($A$5:$A$145,E$3,$F$1),就能显示正确结果!
十分感谢老师在百忙中抽出时间为我呕心费神!以后坚决不会再打扰老师了!祝老师身体健康,工作顺利!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-20 18:45 | 显示全部楼层
lss001 发表于 2018-12-20 17:59
实在忙,没过多验证,难免有误差!
现在只能挤点时间验证一下,见69楼附件!

20181220183758.png

经测试,这次基本正确!只是不明白,在E5:E120输入公式 {=SSLJ($A$5:$A$120,E$3,$F$1)  后,会显示#VALUE!错误?如果变成在E5:E145输入公式 {=SSLJ($A$5:$A$145,E$3,$F$1),就能显示正确结果!
十分感谢老师在百忙中抽出时间为我呕心费神!以后坚决不会再打扰老师了!祝老师身体健康,工作顺利!

TA的精华主题

TA的得分主题

发表于 2018-12-20 21:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
WYS67 发表于 2018-12-20 18:45
经测试,这次基本正确!只是不明白,在E5:E120输入公式 {=SSLJ($A$5:$A$120,E$3,$F$1)  后,会显示#V ...

参考69楼加入刷新代码!

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 02:41 , Processed in 0.026855 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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