Excel精英培训网

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

[已解决]请教:每个表各取1行合并去重,及计算

[复制链接]
发表于 2021-7-31 16:29 | 显示全部楼层 |阅读模式
3学分
请教:表1、2所有数据,是由01~99文本数据组成,每行个数及行数是变量。每个表各取1行,进行合并去重,然后按从小到大排列放到“合并去重”表,遍历表1、2。在AY输入一个数值(假设79),首先将“合并去重”表中完全相同的行去重,并将数据个数大于79的行删除掉,最后将结果放到“删除相同行及指定个数行”中。按按钮,完成上述动作。例如:
        表1取出第1行,与表2第1行组合并去重后,按从小到大排列放在“合并去重”表的第1行;然后与表2第2行组合并去重后,按从小到大排列放在“合并去重”表的第2行;直到与表2最后1行行组合并去重后,按从小到大排列放在“合并去重”表的第x行。
        表1取出第2行,与表2第1行组合并去重后,按从小到大排列放在“合并去重”表的第1行;然后与表2第2行组合并去重后,按从小到大排列放在“合并去重”表的第2行;直到与表2最后1行行组合并去重后,按从小到大排列放在“合并去重”表的第y行。
        以此类推,直到表1完成最后1行。
        “合并去重”表中是手动计算的例子。 两表各取1行,进行组合去重及相关计算.rar (15.02 KB, 下载次数: 4)

最佳答案

查看完整内容

Sub demo() Set list1 = CreateObject("System.Collections.ArrayList") Set d = CreateObject("Scripting.Dictionary") Sheets(3).UsedRange.ClearContents a = Sheets(1).UsedRange b = Sheets(2).UsedRange For i = 1 To UBound(a) For k = 1 To UBound(a, 2) Key = a(i, k): If Key = 0 Then Exit For If Not list1.contains(Key) Then list1.Add Key Next ...
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-7-31 16:29 | 显示全部楼层    本楼为最佳答案   
Sub demo()
   Set list1 = CreateObject("System.Collections.ArrayList")
   Set d = CreateObject("Scripting.Dictionary")
   Sheets(3).UsedRange.ClearContents
   a = Sheets(1).UsedRange
   b = Sheets(2).UsedRange
   For i = 1 To UBound(a)
      For k = 1 To UBound(a, 2)
         Key = a(i, k): If Key = 0 Then Exit For
         If Not list1.contains(Key) Then list1.Add Key
      Next
      For j = 1 To UBound(b)
         Set list2 = list1.Clone
         For k = 1 To UBound(b, 2)
            Key = b(j, k): If Key = 0 Then Exit For
            If Not list2.contains(Key) Then list2.Add Key
         Next
         list2.Sort
         r = r + 1
         Sheets(3).Cells(r, 1).Resize(1, list2.Count) = list2.ToArray
      Next
      list1.Clear
   Next
   Sheets(4).UsedRange.Offset(1, 0).ClearContents
   ay = Sheets(4).[ay1]
   r = 1
   With Sheets(3)
      For i = 1 To .[a1].End(4).Row
         c = .Cells(i, 1).End(2).Column
         If c > ay Then GoTo 1
         Set Rng = Range(.Cells(i, 1), .Cells(i, c))
         Key = Join(Application.Transpose(Application.Transpose(Rng)))
         If Not d.exists(Key) Then
            d(Key) = 1
            r = r + 1
            Sheets(4).Cells(r, 1).Resize(1, c).Value = Rng.Value
         End If
1:
      Next
   End With
End Sub

祝順心,南無阿彌陀佛!


demo.rar

101.38 KB, 下载次数: 12

评分

参与人数 2学分 +4 收起 理由
1318573113 + 2 <font style="vertical-align: inh
lygyjt + 2 神马都是浮云

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-8-1 15:46 | 显示全部楼层
cutecpu 发表于 2021-7-31 16:29
Sub demo()
   Set list1 = CreateObject("System.Collections.ArrayList")
   Set d = CreateObject("Sc ...

再次感谢版主的厚爱!版主的深仁厚泽,日后定当效仿。
回复

使用道具 举报

 楼主| 发表于 2021-8-1 16:03 | 显示全部楼层
cutecpu 发表于 2021-7-31 16:29
Sub demo()
   Set list1 = CreateObject("System.Collections.ArrayList")
   Set d = CreateObject("Sc ...

版主,当在AY1输入15,然后按按钮时,在“删除相同行及指定个数行”表中,并未删除那些数据个数大于15的行。请版主方便时,再看下行吗?
回复

使用道具 举报

发表于 2021-8-1 16:10 | 显示全部楼层
lygyjt 发表于 2021-8-1 16:03
版主,当在AY1输入15,然后按按钮时,在“删除相同行及指定个数行”表中,并未删除那些数据个数大于15的 ...

AY1 的格式 改成數字即可

评分

参与人数 1学分 +2 收起 理由
lygyjt + 2 学习了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-8-1 16:12 | 显示全部楼层
cutecpu 发表于 2021-8-1 16:10
AY1 的格式 改成數字即可

哈哈,让版主见笑喽,嘿嘿
回复

使用道具 举报

发表于 2021-8-1 16:13 | 显示全部楼层
lygyjt 发表于 2021-8-1 16:12
哈哈,让版主见笑喽,嘿嘿

那個是我調的,因為原來 AY1 是 79
所以我把 A ~ CA 列都變文字格式
但忘記把 AY1 調回來

评分

参与人数 1学分 +2 收起 理由
lygyjt + 2 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 08:45 , Processed in 0.325189 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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