ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 数据去重合并问题求助

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-21 17:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
LIUZHU 发表于 2024-5-21 17:10
这个合并去重的方式有问题啊,怎么是隔行合并呢,不是按顺序合并,隔行合并,那不是要通过肉眼来观察啊?

主要原始数据是很多行  并不是按顺序去合并,就是全量的根据重复元素重新组合

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-21 17:53 | 显示全部楼层
cnmlgb9998 发表于 2024-5-21 12:26
PQ方案。。。。。。。。。。。。。。。。。。

大佬 PQ用这个码报错  不知道为啥  还方便发个你成功的压缩包我看下啊   多谢了

TA的精华主题

TA的得分主题

发表于 2024-5-21 18:26 来自手机 | 显示全部楼层
报错原因,是因为你 源文件,要重新定义一下,很简单的。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-24 15:40 | 显示全部楼层
本帖最后由 6720918hw 于 2024-5-24 15:51 编辑
cnmlgb9998 发表于 2024-5-21 18:26
报错原因,是因为你 源文件,要重新定义一下,很简单的。

老哥还方便发下代码啊    照你的图片手打报错  不知道是不是敲错了   多谢了  原文件是这个  一万多行的 不知道执行了行不行
image.jpg

两两关系.zip

150.21 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-5-24 17:01 | 显示全部楼层
6720918hw 发表于 2024-5-24 15:40
老哥还方便发下代码啊    照你的图片手打报错  不知道是不是敲错了   多谢了  原文件是这个  一万多行的  ...

你这1万多行数据量太大,很卡。我把数据源 削到1000行了。

5-24-1.rar

65.92 KB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-24 17:20 | 显示全部楼层
本帖最后由 6720918hw 于 2024-5-24 17:22 编辑
cnmlgb9998 发表于 2024-5-24 17:01
你这1万多行数据量太大,很卡。我把数据源 削到1000行了。

原始数据没事,可以先用少的测试,

我刚看了跑完的结果,还是有很多重复的,

如下图橙色
image.jpg
但是表后面部分重复的又没了(就是想要这个效果)
image.jpg



最终结果想要的是大组里面互相没有重复,

附件里面保留了999个小组,里面一共1133个不重复的元素,

最后根据互相关系得到的XX个大组,大组里面的元素互相不重乎,

最后大组元素加起来还是1133个

就下面的逻辑  不知道大佬还有办法啊
a9e2402fb060f71130b2c238bb90776a_174701dqzq18bmmzd2cc8c.png

TA的精华主题

TA的得分主题

发表于 2024-5-25 08:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
留个脚印!继续关注学习!

TA的精华主题

TA的得分主题

发表于 2024-5-25 18:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
關聯群組// ..by.准提部林
未優化...
Xl0000234.rar (14.26 KB, 下载次数: 4)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-25 20:12 | 显示全部楼层
本帖最后由 6720918hw 于 2024-5-25 20:15 编辑
准提部林 发表于 2024-5-25 18:50
關聯群組// ..by.准提部林
未優化...

大佬  用原始的一万多条数据替换了下  转圈圈半小时还没结束

image.png
然后就报错了

TA的精华主题

TA的得分主题

发表于 2024-5-25 22:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
看一下楼主给出的数据,A列与B列是一样的,不知道实际的数据是否是这样,这与楼主给的示例是不同的的,以下代码适用实际数据,分组后是有些较大的组,水平放置是放不下的,按列放置由于分组数很多,有700多组,也是不行的,一个工作表是不好存放结果的。
  1. Option Explicit



  2. Function findRowID_first(rng As Range, key As Variant, Optional first As Long = 1, Optional last As Long = -1) As Long
  3.     Dim low&, hight&, cur&
  4.     low = first
  5.     hight = last
  6.    If last = -1 Then hight = rng.Rows.Count + first - 1
  7.    cur = low
  8.    Do
  9.      If rng.Cells(cur, 1) < key Then
  10.         low = cur
  11.      Else
  12.         hight = cur
  13.      End If
  14.    
  15.        cur = low + (hight - low) \ 2
  16.       
  17.    Loop While hight - low > 1
  18.       findRowID_first = IIf(rng.Cells(hight, 1) = key, hight, -1)
  19.       
  20. End Function


  21. Sub getData()
  22. Dim dt As Object
  23. Dim ds As Object

  24. Dim last&, r&, c&, i&
  25. Dim str$
  26. Dim ar() As Variant
  27. Dim u&, v&

  28. Set dt = CreateObject("Scripting.Dictionary")
  29. Set ds = CreateObject("Scripting.Dictionary")
  30. Application.ScreenUpdating = False
  31. Sheets("s").Cells.ClearContents
  32. Sheets("s1").Cells.ClearContents
  33. Sheets("temp").Cells.ClearContents
  34. Sheets("s").Range("a1") = "number"
  35.   

  36. With Sheets("temp")
  37. Sheets("Sheet2").Range("A1").CurrentRegion.Copy .Range("A1")

  38.   .Range("A1").CurrentRegion.Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range("B2")
  39.   r = 2
  40.   c = 2
  41.     str = .Cells(2, 1)
  42. Do While Len(str) <> 0
  43.    
  44.         dt.RemoveAll
  45.         ds.RemoveAll
  46.         dt(str) = ""
  47.      Do While dt.Count <> 0
  48.      
  49.      
  50.        str = dt.keys()(0)
  51.       
  52.        dt.Remove str
  53.         ds(str) = ""
  54.         last = .Range("a65536").End(xlUp).Row
  55.         i = findRowID_first(.Range("a1:a" & last), str, 2, last)
  56.         
  57.         If i <> -1 Then
  58.           Do While 1
  59.             If .Cells(i, 1) <> str Then Exit Do
  60.             If Not ds.Exists(.Cells(i, 2).Value) Then dt(.Cells(i, 2).Value) = ""
  61.             .Rows(i).Delete
  62.         
  63.            Loop
  64.         
  65.         End If
  66.      Loop
  67.      
  68.      Sheets("s").Range("a" & r) = ds.Count
  69.      
  70.      If ds.Count < 30 Then
  71.        Sheets("s").Range("c" & r).Resize(1, ds.Count) = ds.keys
  72.      Else
  73.        Sheets("s1").Cells(1, c) = ds.Count
  74.        Sheets("s1").Cells(2, c).Resize(ds.Count, 1) = Application.Transpose(ds.keys)
  75.        c = c + 1
  76.       
  77.      End If
  78.        r = r + 1
  79.        str = .Cells(2, 1)
  80. Loop
  81.          
  82.       Sheets("s").Range("b1") = r - 2
  83.          
  84.   End With
  85.    
  86. Application.ScreenUpdating = True
  87. End Sub

复制代码

两两关系 .rar

298.8 KB, 下载次数: 2

评分

2

查看全部评分

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

本版积分规则

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

GMT+8, 2024-6-3 19:35 , Processed in 0.042029 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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