Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 9617|回复: 7

[已解决]这个统计的代码应该怎么写啊?

[复制链接]
发表于 2021-3-20 01:40 | 显示全部楼层 |阅读模式
2学分
本帖最后由 ryoryo66 于 2021-3-20 10:14 编辑

E:G的数字(个位数0-9),对比H1:P1的数字(2位数,不重复的数值),如果H1:P1的数字在E:G里面包含了2个,那么就在H9开始对应的位置返回2,如是包含其它的数量就不需要返回;
返回就从H9开始到后面有数据的列和E列不为空的行;
这是1张工作表的情况,工作表一共有"断断"和"1","2"…….一直到"20",共21个,都是一样的位置和格式(因为太大,所以就用了4个表);
因为公式太大太慢了,所以请问这个代码用数组或字典的快速方法怎么写啊?





最佳答案
2021-3-20 01:40
本帖最后由 shuidisyy 于 2021-3-23 20:22 编辑
ryoryo66 发表于 2021-3-23 09:52
求大师们帮忙看看吧.

附件供参考

求助.zip

320.09 KB, 下载次数: 5

最佳答案

查看完整内容

附件供参考
发表于 2021-3-20 01:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 shuidisyy 于 2021-3-23 20:22 编辑
ryoryo66 发表于 2021-3-23 09:52
求大师们帮忙看看吧.

附件供参考

求助.rar

540.38 KB, 下载次数: 5

回复

使用道具 举报

 楼主| 发表于 2021-3-23 09:52 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2021-3-23 19:34 | 显示全部楼层
本帖最后由 ryoryo66 于 2021-3-23 19:56 编辑

非常感谢老师,强大.
还想问一下,我统计If n = 0 Then arrResult(i, j) = n(这个如果在区域内有空的列),应该怎么加个判断呢,我加了几次加不好.
回复

使用道具 举报

发表于 2021-3-23 20:18 | 显示全部楼层
本帖最后由 shuidisyy 于 2021-3-23 20:21 编辑
ryoryo66 发表于 2021-3-23 19:34
非常感谢老师,强大.
还想问一下,我统计If n = 0 Then arrResult(i, j) = n(这个如果在区域内有空的列), ...

可以判断一下空的列(如:j1)不为空,再执行后边的代码,楼上更新了
回复

使用道具 举报

 楼主| 发表于 2021-3-24 09:41 | 显示全部楼层
shuidisyy 发表于 2021-3-23 20:18
可以判断一下空的列(如:j1)不为空,再执行后边的代码,楼上更新了

感谢,非常感谢老师!
回复

使用道具 举报

 楼主| 发表于 2021-3-24 16:53 | 显示全部楼层
ryoryo66 发表于 2021-3-24 09:41
感谢,非常感谢老师!

老师,再麻烦你有空的时候看看,这个能不能写,这个简单的公式居然耽误了不少的打开速度.但是打开后的运算速度倒是不慢.
http://www.excelpx.com/forum.php ... d=462228&extra=



回复

使用道具 举报

 楼主| 发表于 2021-4-1 15:28 | 显示全部楼层
本帖最后由 ryoryo66 于 2021-4-1 15:34 编辑
ryoryo66 发表于 2021-3-24 09:41
感谢,非常感谢老师!

尊敬的老师,这个代码在运用中,我想改写成这样的情况,在范围内单列统计单列的情况,改来改去实在是改不好.
麻烦您再帮我改一次,捉摸了好几天,实在没办法,再来求您一次.

就是 E9:E如果有和T1相同,就在T9开始返回T1的值;
G9:G如果有和V1相同,就在V9开始返回V1的值;
.....
一直到R9:R如果有和AG1相同,就在AG9开始返回AG1的值.
中间要是有空的列,就不用返回了.
排除"开奖数据",其它工作表都返回一样的格式.
求老师再帮忙改一次.




附加原来的代码:
Option Explicit

Sub test()
    Dim arrList, arrData, arrResult, arrTable
    Dim i%, j%, y%, n%, k%, irow%, str$, rng As Range
    ReDim arrTable(0 To 3)
    For i = 1 To UBound(arrTable)
        arrTable(i) = CStr(i)
    Next i
    arrTable(0) = "断断"
    For k = 0 To UBound(arrTable)
        With Worksheets(arrTable(k))
            Set rng = .Range("e:e").Find("*", , xlValues, , , xlPrevious)
            If Not rng Is Nothing Then irow = rng.Row
            If irow > 9 Then
                arrData = .Range("e9:g" & irow).Value
                arrList = .Range("h1:p1").Value
                ReDim arrResult(1 To UBound(arrData), 1 To UBound(arrList, 2))
                For j = 1 To UBound(arrList, 2)
                    str = arrList(1, j)
                    If Len(str) > 0 Then
                        For i = 1 To UBound(arrData)
                            n = 0
                            For y = 1 To 3
                                If InStr(str, arrData(i, y)) Then n = n + 1
                            Next y
                            If n = 2 Then arrResult(i, j) = n
                        Next i
                    End If
                Next j
                .Range("h9").Resize(UBound(arrResult), UBound(arrResult, 2)) = arrResult
            End If
        End With
    Next k
End Sub


求助.rar

890.12 KB, 下载次数: 0

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-5 20:28 , Processed in 0.316514 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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