ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-3 22:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2018-10-3 22:17
把→Int(k / rn) * rn
改为→k

已修改测试:显示结果都完全正确!再次谢谢老师!祝老师晚安!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-3 22:52 | 显示全部楼层
lss001 发表于 2018-10-3 22:17
把→Int(k / rn) * rn
改为→k

老师:刚才那种改法结果就都正确啊。也测试了把→Int(k / rn) * rn   改为→k  ,显示的结果也都正确。老师:我有些无所适从了--从结构严谨,结果正确,运行平稳方面考虑,到底哪个更好些?

TA的精华主题

TA的得分主题

发表于 2018-10-3 23:03 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lss001 于 2018-10-4 09:14 编辑

以最后修改为准

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-4 18:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lss001 发表于 2018-10-3 23:03
以最后修改为准

老师:是不是下面的代码不能嵌套自定义函数?我试着嵌套 CONTXT,结果显示错误。
            Case "CONTXT": br(dr(i, 2), 1) = Application.Contxt(cr)

这是自定义函数CONTXT,用于文本合并:
Function CONTXT(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 TypeName(args(i))
            Case "Range"
                For Each cell In args(i)
                    tmptext = tmptext & cell
                Next cell
            Case "Variant()"
                For Each cellv In args(i)
                    tmptext = tmptext & cellv
                Next cellv
            Case Else
                tmptext = tmptext & args(i)
            End Select
        End If
    Next i

    CONTXT = tmptext
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-4 19:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
                 Select Case UCase(b): Case"SUMIF", "COUNTIF","CONTXT", "JGHS": er(j * rn - rn + 1, 2) = i: End Select
            Case "CONTXT": br(dr(i, 2), 1) = Application.CONTXT(Range(Cells(g, rng.Column), Cells(er(i, 2) + 4, rng.Column)), c)


CONTXT的代码在49楼,已加载宏。计算结果显示#VALUE!错误
,会是什么原因?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-4 19:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 WYS67 于 2018-10-4 19:33 编辑
lss001 发表于 2018-10-4 19:21
去掉→,c
改为→Case "CONTXT": br(dr(i, 2), 1) = Application.CONTXT(Range(Cells(g, rng.Column), Ce ...

去掉→,c  后,还是出现#VALUE!错误.CONTXT也没有问题,一开始时   我写成         Case "CONTXT": br(dr(i, 2), 1) = Application.Contxt(cr)     显示错误,才改成             Select Case UCase(b): Case"SUMIF", "COUNTIF","CONTXT", "JGHS": er(j * rn - rn + 1, 2) = i: End Select
            Case "CONTXT": br(dr(i, 2), 1) = Application.CONTXT(Range(Cells(g, rng.Column), Cells(er(i, 2) + 4, rng.Column)), c)


仍然显示错误!

现在,去掉→,c   还是显示错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-4 19:38 | 显示全部楼层
lss001 发表于 2018-10-4 19:33
去掉→,c以及Application.
改为→Case "CONTXT": br(dr(i, 2), 1) = CONTXT(Range(Cells(g, rng.Column) ...

普大喜奔!这次能够正确显示结果了!感谢老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-4 20:17 | 显示全部楼层
lss001 发表于 2018-10-4 19:53
重新看了一下Contxt自定义函数声明了数组变量
所以为了提高速度,应改为→
Case "CONTXT": br(dr(i, 2),  ...

特别佩服老师一丝不苟、追求极致的严谨态度!Case "CONTXT": br(dr(i, 2), 1) = CONTXT(cr)  已测试,速度明显有提高

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 15:50 | 显示全部楼层
lss001 发表于 2018-10-3 22:17
把→Int(k / rn) * rn
改为→k

老师:看看http://club.excelhome.net/forum. ... 775&pid=9677230版主写的代码,2楼的代码出现了--当三个分表也都处于打开状态【这样可以很方便数据更新后分类查看比较】下,指定J1为“3”,点击《00 总表》里的更新按钮后,会只保留一个分表处于打开状态,其余两个会自动关闭。

经他提醒,去掉wb.close true后,三个分表更新后倒是不再自动关闭了,却出现了---指定J1为偶数【0、2】时可以刷新数据,奇数【1、3】时却不能刷新数据的新情况。

   以您的经验,觉得会是什么原因造成的呢?怎样解决?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-10-5 18:47 | 显示全部楼层
lss001 发表于 2018-10-5 17:44
Sub 更新保存()
sj = Timer
    Application.ScreenUpdating = False

老师:首先感谢您不辞辛苦地重新编写代码。其实,我请教您的初衷是:想让你您帮忙诊断一下lsc900707版主写的代码--指定J1为偶数【0、2】时可以刷新数据,奇数【1、3】时却不能刷新数据的原因何在?
  没想到您却重新写了代码。由于原代码是lsc900707版主写的,所以说明里只是提到新增指定J1数字为更新分表的条件,其它都没有涉及,造成了您的不知情。

原先的整个规则是:
1.《00 总表》的J列为条件区域,各分表的I1为指定条件,在《00 总表》里提取符合I1指定条件的E:I列数据到对应的分表;比如:《0 三同》的I1指定为“0”,则提取《00 总表》J5:J&G1【G1为最大行号】中为0的E:I列数据到《0 三同》的相应位置。2.《0 三同》J列的期差公式为:令E4为“4”,J5=E5-E4,公式下拉至最后一个数据为止【J456行】;
    注意!《0 三同》最后一个数据对应于E列的E456为“4892”,而C1显示的《00 总表》最后行号是4894,令C1-E456=2,则J457显示为“2”,代表已经有两期没有符合I1指定条件的数据了!

3以上就是原代码的运算规则,特别注意,数据源《00 总表》指定的最大行号和三个分表各自的最大行号都不同!必须让代码运行在指定列的指定行号区域内!
4.接下来才是http://club.excelhome.net/thread-1438775-1-1.html 的任务-- 给代码增加按J1指定数字代号,更新数据到对应分表的功能

5.所以,您写的代码有许多地方显示的结果都不是我所要的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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