Excel精英培训网

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

求助VBA重复数的代码

[复制链接]
发表于 2019-11-24 20:38 | 显示全部楼层 |阅读模式
求VBA的重复数统计VBA代码,详见附件,感谢!

求VBA代码.zip

11.61 KB, 下载次数: 6

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2019-11-25 17:05 | 显示全部楼层
回复

使用道具 举报

发表于 2019-11-26 09:28 | 显示全部楼层
虽然你解释的很多,我仍然看好久才看了个大概,也不知道是不是对的?
1、首先,我是凭兴趣写的代码,实际根本就用不到,这种问题建议不要提,纯粹是为了把人难倒;
2、把C列删掉,代码计算的答案会占用 C-F 列,在c列仅仅写个“答案”的文字很多余;
3、我不知道能不能对6万记录做很效率的统计,你样本太少了。既然有6万,好歹也要上传1-2万才好测试效率;
4、你的样本答案我有疑问:
     第4行的答案 2 不知道什么意思,如果有不是 1 的数字,那就表示我完全理解错了;
     第5行的答案结果是5个重复的,但你的答案是 1 0 1 0,我觉得时 1 1 1 0才符合我理解的题意,否则表示我还是没搞对;

完整代码:

Range(Cells(2, 3), Cells([a100000].End(3).Row, 6)).ClearContents
Dim arr(1 To 4, 1 To 6)
For i = 2 To 5
    s = Split(Cells(i, 2), ",")
    For k = 0 To UBound(s)
        arr(i - 1, k + 1) = s(k)
    Next k
Next i
For i = 2 To [a100000].End(3).Row
    s = Split(Cells(i, 1), ",")
    js1 = 0
    For k = 1 To 4
        js = 0
        For j = 0 To UBound(s)
            For l = 1 To 6
                If s(j) = arr(k, l) Then
                   js = js + 1
                End If
            Next l
        Next j
        js1 = IIf(js1 > js, js1, js)
    Next k
    If js1 >= 3 Then
       Cells(i, 3) = 1
    End If
    If js1 >= 4 Then
       Cells(i, 4) = 1
    End If
    If js1 >= 5 Then
       Cells(i, 5) = 1
    End If
    If js1 >= 6 Then
       Cells(i, 6) = 1
    End If
Next i


回复

使用道具 举报

 楼主| 发表于 2019-11-26 15:05 | 显示全部楼层
hfwufanhf2006 发表于 2019-11-26 09:28
虽然你解释的很多,我仍然看好久才看了个大概,也不知道是不是对的?
1、首先,我是凭兴趣写的代码,实际 ...

您好,非常感谢您!关于您的疑问
1,第4行,是A4与B列每个单元格查询重复数字个数。
然后在A4单元格对应的列统计重复数字大于或等于3,4,5的次数。
因为A4在B列出现了两次3个重复数字,所以在《重复≥3》的第4行应该为2次
以下单独列出A4统计
A数据
B数据
A3 B2
A3 B3
A3 B4
A3 B5
重复≥3
重复≥4
重复≥5
重复≥6
 
1,2,7,8,11,13
 
5,55,67,89,91
1,2,3,11,1081,2,3,9,27,84
3
0
3
0
2
0
0
0
 
4,5,6,37


2,第二个问题,第5行的答案是我写错了,非常抱歉。

麻烦您能从新写下完整代码,用代码框,发一下吗?非常感谢您!
回复

使用道具 举报

发表于 2019-11-26 16:11 | 显示全部楼层
q563262982 发表于 2019-11-26 15:05
2,第二个问题,第5行的答案是我写错了,非常抱歉。

麻烦您能从新写下完整代码,用代码框,发一下 ...

说明:     你模拟数据的B列只有4行,最大元素个数是6个,所以我就定义了 4*6 个计数器。这一点很重要,不能定义无限个计数器,总要有个上限。也不能是浮动的,会把代码严重复杂化,不值得;     如果实际情况有变动,你就自己改参数,需要在代码中按照顺序依次找对应下面的行代码:
     有些行代码是完全一样的,但他们的位置不同,含义也不一样,严格按照顺序找,下面的行代码应该一一对应都能找到;
       Dim arr(1 To 4, 1 To 6),定义计数器 4*6

       For i = 2 To 5 ,读取第2行到第5行,总数还是4行;
       Dim arr1(1 To 4),定义4个标志,分别对应每一行;
       For k = 1 To 4 ,初始化4个行标志
       For k = 1 To 4,后面紧接着还有一个这样的行,是做4次行对比
       For l = 1 To 6 ,做6次计数器统计
       For k = 1 To 4,分别对4个行做最后的样本统计,将来会分别填在c\d\e\f列





修改:求VBA代码.rar

23.01 KB, 下载次数: 3

评分

参与人数 1学分 +2 收起 理由
q563262982 + 2 真是太感谢了!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 01:20 , Processed in 0.493045 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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