ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 字典怎么玩?A列B列数据比较

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2021-5-12 15:41 | 显示全部楼层
'再练习一个,不用字典。效率应该也是可以的,,,

Option Explicit

Sub test()
  Dim arr, m(4), p(2), i, j
  arr = Range("a2:b" & ActiveSheet.UsedRange.Rows.Count).Value
  ReDim brr(1 To UBound(arr, 1) * 2 + 1, 1 To 2), crr(1 To UBound(brr, 1), 1 To 4)
  For j = 1 To 2
    For i = 1 To UBound(arr, 1)
      If Len(arr(i, j)) > 0 Then m(0) = m(0) + 1: brr(m(0), 1) = arr(i, j): brr(m(0), 2) = j
    Next
  Next
  Call qsort(brr, 1, m(0), 1, 2, 1)
  For i = 1 To m(0)
    p(brr(i, 2)) = 1
    If brr(i, 1) <> brr(i + 1, 1) Then
      If p(1) = 1 And p(2) = 0 Then
        p(1) = 1
      ElseIf p(1) = 0 And p(2) = 1 Then
        p(1) = 2
      Else
        p(1) = 3
      End If
      m(p(1)) = m(p(1)) + 1: crr(m(p(1)), p(1)) = brr(i, 1)
      m(4) = m(4) + 1: crr(m(4), 4) = brr(i, 1)
      p(1) = 0: p(2) = 0
    End If
  Next
  [r2].Resize(UBound(crr, 1), 4) = crr
End Sub

Function qsort(arr, first, last, left, right, key)
  Dim i As Long, j As Long, k As Long, x, t
  i = first: j = last: x = arr((first + last) \ 2, key)
  While i <= j
    While arr(i, key) < x: i = i + 1: Wend
    While x < arr(j, key): j = j - 1: Wend
    If i <= j Then
      For k = left To right
        t = arr(i, k): arr(i, k) = arr(j, k): arr(j, k) = t
      Next
      i = i + 1: j = j - 1
    End If
  Wend
  If first < j Then qsort arr, first, j, left, right, key
  If i < last Then qsort arr, i, last, left, right, key
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-4-8 07:25 来自手机 | 显示全部楼层
标记一下,以便学习备用!

TA的精华主题

TA的得分主题

发表于 2022-8-1 10:40 | 显示全部楼层
翻篇,今天想重写一次字典AB比对,再看一遍,翻出来共同学习

TA的精华主题

TA的得分主题

发表于 2022-8-1 15:08 | 显示全部楼层
一把小刀闯天下 发表于 2021-5-12 14:58
'我也来练习一下,单字典,,,

Option Explicit


'我也来练习一下,单字典,,,

Option Explicit

Sub test()
  Dim arr, m(4), p(2), i, j, dic
  Set dic = CreateObject("scripting.dictionary")
  arr = Range("a2:b" & ActiveSheet.UsedRange.Rows.Count).Value
  ReDim brr(1 To UBound(arr, 1) * 2, 1 To 2), crr(1 To UBound(brr, 1), 1 To 4)
  For i = 1 To UBound(arr, 1)
    For j = 1 To UBound(arr, 2)
      If Len(arr(i, j)) > 0 Then
**************
这个arr(i, j)构架的不合理吧?

TA的精华主题

TA的得分主题

发表于 2022-8-3 10:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
A和B两个数组,比对后返回结果,可能需要得到的结果有:
1,两个数组合集(相同项合并,并统计重复次数)
2,两个数组合集(相同项合并,分别统计每一个元素在A和B中的数量(应对A或B本身内部有重复的情况))
3,两个数组合集(重复项不合并,单独列出(注明所属源数组),有重复情况可统计重复次数)
4,返回A有B无项
5,返回A无B有项
6,返回A B交集(有重复情况,注明分别在A B中重复次数)
7....(还没想好需要返回其他什么结果)

TA的精华主题

TA的得分主题

发表于 2022-8-8 18:47 | 显示全部楼层
经典案例学习一下。。。

TA的精华主题

TA的得分主题

发表于 2022-12-4 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
留个脚印学习

TA的精华主题

TA的得分主题

发表于 2023-6-14 21:06 | 显示全部楼层
请教一下,面对百万行数据如何提高处理速度

TA的精华主题

TA的得分主题

发表于 2023-6-14 21:16 | 显示全部楼层
·遁去的一· 发表于 2023-6-14 21:06
请教一下,面对百万行数据如何提高处理速度

我认为不要老是在百万级数据量上纠结,因为VBA本身就是一个脚本语言,用于处理一些小数据量的,灵活方便,那此大数据分析处理是数据库等中大型软件干的事。其实学习数据库的一般应用也不难(很多年前接触过,长久不用又忘了,我想再学可能只要几天工夫)

TA的精华主题

TA的得分主题

发表于 2023-6-14 22:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
吴中泉 发表于 2023-6-14 21:16
我认为不要老是在百万级数据量上纠结,因为VBA本身就是一个脚本语言,用于处理一些小数据量的,灵活方便 ...

收到,没事研究一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 15:41 , Processed in 0.052774 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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