ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 忽略空格求生克值的自定义函数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-11-10 22:37 | 显示全部楼层
本帖最后由 lss001 于 2018-11-12 17:13 编辑

1 组三-1.zip (1.32 MB, 下载次数: 12)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-10 23:51 | 显示全部楼层
lss001 发表于 2018-11-10 22:37
详细见附件!!!


老师:代码存在两个问题:
1.如本表C1的10000为《00 总表》数据最后行,H2为符合条件的数据最后行4126,则E4126的10000是《组三》最后序号,J4127代表符合条件的数据最后行与C1指定的全部数据最后行之差--也就是当前遗漏,其当前遗漏公式为:=$C$1-INDIRECT("E"&$H$2),计算结果显示在"J"&(H2+1)单元格中。
2.《中位 1》~《中位 6》的I1代表指定中位,《中位 1》提取《总表》K5:K6565里为1的中位,《中位 2》提取《总表》K5:K6565里为2的中位,《中位 3》提取《总表》K5:K6565里为3的中位,......《中位 6》提取《总表》K5:K6565里为6的中位才对;可是,代码计算结果除《中位 1》和《中位 2》正确外,《中位 3》~《中位 6》提取的都是中位为2的数据,没有按照要求提取对应的3~6的中位。

1 组三.zip (522.78 KB, 下载次数: 7)
20181110232219.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-11 09:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 WYS67 于 2018-11-11 10:06 编辑
lss001 发表于 2018-11-10 22:37
详细见附件!!!

20181111094429.png 20181111094449.png

老师:上面是《1 组三》中位和《2 组六》数型所有分类提取的模拟结果。要求修改后的代码复制粘贴进《1 组三》或《2 组六》的模块1后,当点击【总表】里的按钮时,能够自动提取《中位 1》~《中位 6》或《数型 0》~《数型 5》的所有数据,并能在J列自动显示历史遗漏和当前遗漏的计算结果。

两个工作表,一个是《中位》,一个是《数型》,可以把《总表》K4的名称当作检索查询的指定条件使用。

1 组三.zip (654.54 KB, 下载次数: 6)

2 组六.zip (770.91 KB, 下载次数: 19)

怎样把同一个代码复制粘贴进《1 组三》和《2 组六》里,点击按钮,便能自动提取《中位 1》~《中位 6》或《数型 0》~《数型 5》的所有数据,并自动在J列自动显示历史遗漏和当前遗漏的计算结果?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-11 11:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 WYS67 于 2018-11-11 11:34 编辑
lss001 发表于 2018-11-10 22:37
详细见附件!!!

老师:代码应用到《2 组六》的数型时出错。
能不能让代码里的“中位”和“数型”调用《总表》K4里的内容?这样无论“中位”和“数型”或其它内容,都能运算。


Sub 拆分数型()
    Dim ar, br, g, h, s, t, i, j, k, x, y
    h = Sheets("总表").Cells(1, "h") - 4
    ar = Sheets("总表").Range("e5:k" & h + 4)
    g = UBound(ar, 2) - 1
    For k = h To 1 Step -1
        If ar(k, 1) <> "" Then Exit For
    Next
    For y = 1 To Worksheets.Count - 1
        x = 0: ReDim br(1 To k, 1 To g)
        For i = 1 To k
            If ar(i, 7) = y Then
                x = x + 1
                For j = 1 To g
                    If j < 6 Then
                        br(x, j) = ar(i, j)
                    Else
                        If x = 1 Then
                            br(x, j) = br(x, 1) - 4
                        Else
                            br(x, j) = br(x, 1) - br(x - 1, 1)
                        End If
                    End If
                Next
            End If
        Next
        br(x + 1, g) = ar(k, 1) - br(x, 1)
        s = Sheets("数型 " & y & "").Cells(1, "h") - 3
        Sheets("数型 " & y & "").Cells(5, "e").Resize(s, 6) = br
        Erase br
    Next
End Sub



20181111111220.png   

2 组六.zip (928.97 KB, 下载次数: 3)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-11 12:03 | 显示全部楼层
本帖最后由 WYS67 于 2018-11-11 12:10 编辑
lss001 发表于 2018-11-11 11:39
附件再次更正
→→请重新下载22楼2个附件!
注意2个附件都有更正!!!

已下载。经测试,以下需修正或改进:
1.《2 组六》《数型 0》~《数型 5》J列最后的当前遗漏比实际数据都少1个数;

改进之处:
1.按钮名称:就是代码第一行的    Sub 拆分数型     修改为 Sub 拆分K列
2.把下面代码里的“数型”改为引用《总表》K4单元格里的名称,《2 组六》总表!K4里是“数型”,《1 组三》总表!K4里是“中位”;如果在代码里调用表!K4的内容,是不是《1 组三》就能和《2 组六》的代码合二为一,变成通用的了?
s = Sheets("数型 " & y & "").Cells(1, "h") - 4 '***
        Sheets("数型 " & y & "").Cells(5, "e").Resize(s, 6) = br '***
        If x >= s - 4 Then
            Sheets("数型 " & y & "").Cells(s + 1, "j") = ar(k, 1) - br(s - 4, 1) '***
        Else
            Sheets("数型 " & y & "").Cells(x + 5, "j") = ar(k, 1) - br(x, 1) '***
3.在代码里注明条件列标,如《1 组三》和《2 组六》的条件列标为总表!K。这样,即使其他工作簿里的条件列标不是总表!K,而是总表!L或其他列标,只需修改一下条件列标就可以自动运行代码,显示想要达到的结果了!



TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-11 13:38 | 显示全部楼层
lss001 发表于 2018-11-11 12:58
22楼附件改为通用型!
可用于组三,组六,三同!
请重新下载22楼附件!

嗯。问题1、2已圆满解决! 20181111132410.png

各个分表里增加J1指定为《总表》的条件列标参数
《1 组三》的【中位 1】~【中位 6】的J1为《总表》的条件列标,使代码提取符合条件的《总表》E:I列数据,这样更方便随时提取当条件在其它列时的数据。
    比如《1 组三》的K:N列用于其他计算,O列为《总表》条件列标,只需指定《1 组三》的【中位 1】~【中位 6】的J1为“O”,点击《总表》里的拆分按钮,就能自动拆分符合条件的E:I列数据到对应分表中。

1 组三 (3).zip (521.45 KB, 下载次数: 17)
2 组六 (3).zip (639.97 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-11 14:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2018-11-11 13:25
22楼再更新!
增加当改变条件不为K列时的修改说明!

测试了您最后修改的两个附件,感觉31楼指定各分表J1为条件列标参数的方法更简单明了,容易操作。恳请老师按31楼里的要求修改代码。

TA的精华主题

TA的得分主题

发表于 2018-11-11 15:27 | 显示全部楼层
lss001 发表于 2018-11-11 14:50
附件还是在22楼,条件列更改为各分表J1指定!!!

谢谢老师!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-12 12:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

20181112123326.png 20181112123339.png

下面的《1 组三》里多了《标准》、《1 中位号》、《2 号码》和《3 号隔》4个工作表,导致点击“拆分K列”按钮时,运行22楼代码就会出现上面的错误。

怎样修改代码,才能使“拆分K列”不受其它工作表影响,把《总表》里K列数据拆分到对应的《中位 1》~《中位 6》里?

1 组三.zip (1.38 MB, 下载次数: 4)

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-12 15:32 | 显示全部楼层
本帖最后由 WYS67 于 2018-11-12 15:46 编辑

老师:最新代码怎么无法把《2 组六》K列等于3、4、5的数据,拆分到对应的《数型 3》、《数型 4》和《数型 5》里?里面的数据怎么和《数型 0》完全相同?
  35楼的代码为通用代码,可以按《1 组三》和《2 组六》总表!K列的条件,自动把《总表》E:I列的数据拆分到对应的《中位 *》和《数型 *》里。新代码怎么不通用了呢?


2 组六.zip (747.28 KB, 下载次数: 7)


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

本版积分规则

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

GMT+8, 2024-9-28 12:23 , Processed in 0.040735 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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