ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 统计符合规定条件的2列数据相等或不相等的个数(不包括重复数)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-10 14:41 | 显示全部楼层 |阅读模式
尊敬的各位老师,您好
由于规则2-3的限制,我在网上未能搜寻到适用的相关设置方案,故恳请大咖们给予帮助1

规则1:
1、统计A列为空,且B列不等于D列数值的个数(不包括重复数)
2、B列和D列数值个数不同,排列不是按行一一对应
3、B列和D列数值可以分列在同一个文件2个工作表或不同文件
规则2:统计A列为空,且B列等于D列数值的个数(不包括重复数)


统计符合规定条件的2列数据相等或不相等的个数(不包括重复数).rar (6.6 KB, 下载次数: 11)







  

  

TA的精华主题

TA的得分主题

发表于 2022-10-10 15:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-10-11 22:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
规则1和规则2,不是一样的?

TA的精华主题

TA的得分主题

发表于 2022-10-11 22:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-10-12 17:20 | 显示全部楼层
  1. Sub CheckTwoClnData()
  2.     Dim d As Object
  3.     Dim i As Long, n1 As Long, n2 As Long, n3 As Long, m As Long
  4.     Dim strTemp As String
  5.     Dim arr1 As Variant, arr2 As Variant, brr As Variant, kr As Variant
  6.     Dim rng1 As Range, rng2 As Range, rng As Range
  7.     Set d = CreateObject("scripting.dictionary")
  8.     On Error Resume Next
  9.     Set rng1 = Application.InputBox("请选择需要核对差异的第一列数据", Type:=8)
  10.     '用户选取第一列数据(用A表示)
  11.     If rng1.Columns.Count > 1 Then MsgBox "请选择单列数据。": Exit Sub
  12.     If rng1.Rows.Count = 1 Then MsgBox "不能选择单个单元格。": Exit Sub
  13.     Set rng1 = Intersect(rng1.Parent.UsedRange, rng1)
  14.     '防止用户选取整列造成运算量虚大效率低下
  15.     If Not rng1 Is Nothing Then arr1 = rng1.Value
  16.     '将第一列数据装入arr1
  17.     Set rng2 = Application.InputBox("请选择需要核对差异的第二列数据", Type:=8)
  18.     '用户选取第二列数据(用B表示)
  19.     If rng2.Columns.Count > 1 Then MsgBox "请选择单列数据。": Exit Sub
  20.     If rng2.Rows.Count = 1 Then MsgBox "不能选择单个单元格。": Exit Sub
  21.     Set rng2 = Intersect(rng2.Parent.UsedRange, rng2)
  22.     If Not rng2 Is Nothing Then arr2 = rng2.Value
  23.     For i = 2 To UBound(arr1) '扣除标题行
  24.         If Len(arr1(i, 1)) Then
  25.             d("'" & arr1(i, 1)) = "不存在"
  26.             '将数据统一强制转换为字符串格式
  27.             '数据装入字典,先统一设置item为不存在
  28.         End If
  29.     Next
  30.     If UBound(arr1) > UBound(arr2) Then
  31.     '计算两列最大行数
  32.         m = UBound(arr1)
  33.     Else
  34.         m = UBound(arr2)
  35.     End If
  36.     ReDim brr(0 To m, 1 To 3)
  37.     '结果数组
  38.     '第一列放AB均存在的数据
  39.     '第二列放A有B没有的数据
  40.     '第三列放A没有B有的数据
  41.     For i = 2 To UBound(arr2)
  42.         If Len(arr2(i, 1)) Then
  43.             strTemp = "'" & arr2(i, 1)
  44.             If d.exists(strTemp) Then  '如果A也有
  45.                 n1 = n1 + 1
  46.                 brr(n1, 1) = strTemp
  47.                 d(strTemp) = "存在"    '将AB均有的数据item修改为存在
  48.             Else  '如果A没有
  49.                 n3 = n3 + 1
  50.                 brr(n3, 3) = strTemp
  51.             End If
  52.         End If
  53.     Next
  54.     kr = d.keys
  55.     For i = 0 To UBound(kr)
  56.         If d(kr(i)) = "不存在" Then   '如果A有B没有
  57.             n2 = n2 + 1
  58.             brr(n2, 2) = kr(i)
  59.         End If
  60.     Next
  61.     Err.Clear
  62.     Set rng = Application.InputBox("请选择放置查询结果的单元格,例如C1", Type:=8)
  63.     rng.Parent.Select
  64.     rng.Select
  65.     If Err.Number = 0 Then
  66.         brr(0, 1) = "两列均存在的数据有" & n1 & "条"
  67.         brr(0, 2) = "A有B没有的数据有" & n2 & "条"     'A列独有的数据
  68.         brr(0, 3) = "A没有B有的数据有" & n3 & "条"     'B列独有的数据
  69.         With rng(1).Resize(UBound(brr) + 1, 3)
  70.             .ClearContents   '打扫房间
  71.             .NumberFormatLocal = "@"     '设置文本格式,防止文本数值变形
  72.             .Value = brr
  73.         End With
  74.         MsgBox "核对完成。" & vbLf & brr(0, 1) & vbLf & brr(0, 2) & vbLf & brr(0, 3)
  75.     End If
  76.     Set d = Nothing
  77.     Set rng = Nothing
  78.     Set rng1 = Nothing
  79.     Set rng2 = Nothing
  80.     Erase arr1: Erase arr2: Erase brr
  81. End Sub
复制代码
这是我收藏的网搜的代码,应该部分符合你的要求。结果出来,两列都有的,删除一下重复项就行了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-12 17:41 | 显示全部楼层
规则1,是统计B列数值不等于D列数值的个数,其中重复的统计为1,如:B列的234567899和456789999,D列中没有(即不等于)),其中234567899存在重复,只统计为1,故统计为2

规则2,是统计B列数值等于D列数值的个数,其中重复的统计为1,如:B列的209364045、123456789和345678999,与D列中数值相同(即等于),其中209364045存在重复,只统计为1,故统计为3,恳请各位老师给与帮助,为谢!

统计符合规定条件的2列数据相等或不相等的个数(不包括重复数).rar (7.68 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-13 09:19 | 显示全部楼层
劲钟华 发表于 2022-10-12 17:20
这是我收藏的网搜的代码,应该部分符合你的要求。结果出来,两列都有的,删除一下重复项就行了。

谢谢
2列数据在不同的工作表中,宏代码如何设置?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-13 10:48 | 显示全部楼层
在网上搜寻的数组公式:COUNT(MATCH(B:B,D:D,0))
可以统计B列等于D列数值的个数为4,如何去掉209364045重复的个数,如何设置A列为空的条件;同理,如何设置统计B列不等于D列数值的个数(去掉234567899重复个数)

TA的精华主题

TA的得分主题

发表于 2022-10-13 11:09 | 显示全部楼层
本帖最后由 劲钟华 于 2022-10-13 12:43 编辑
dy591025 发表于 2022-10-13 09:19
谢谢
2列数据在不同的工作表中,宏代码如何设置?

同一个工作簿中两个表也适用,选择第二列的时候,点开另一个工作表再选择列就可以了。代码默认一行标题。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 21:31 , Processed in 0.025200 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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