Excel精英培训网

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

[已解决]数据匹配后产生新的数据

[复制链接]
发表于 2021-12-8 14:42 | 显示全部楼层 |阅读模式
求助:下总共三组数据(在实际中是随机产生,三组数据不等,实际中每组数据大约在450个),以第一组数据为基数,在第二组中寻找符合第一组数据的第2位和第3位进行匹配,匹配后会产生一个4位数,这个4位数的第3位第4位再和第3组数据进行匹配,会产生一个5位数,并以此排列。
举例:第一组017对应第二组17*的数据。0170,0172,0173等等。0170对应第三组数据70开始的数据,会产生一组5位数:0170101702,01703等等

最佳答案
2021-12-8 17:24
  1. Sub 数据生成()
  2. Dim newarr(), ar As Integer, br As Integer, cr As Integer, a As Integer, b As Integer, c As Integer
  3. Dim aa As String, bb As String, cc As String, k As Byte
  4. Range("e2:CA10000").ClearContents
  5. ar = Range("a65536").End(xlUp).Row
  6. ReDim newarr(1 To ar - 1, 1 To 200)
  7. For a = 2 To ar
  8.     If Range("a" & a) = "" Then
  9.     a = a + 1
  10.     End If
  11.    
  12.     aa = Mid(Range("a" & a), 2, 2)
  13.     On Error Resume Next
  14.     br = Application.Match(aa & "*", Range("b1:b65536"), 0)
  15.     Do While aa = Mid(Range("b" & br), 1, 2)
  16.     bb = Mid(Range("b" & br), 2, 2)
  17.     cr = Application.Match(bb & "*", Range("c1:c65536"), 0)
  18.     Do While bb = Mid(Range("c" & cr), 1, 2)
  19.         k = k + 1
  20.             newarr(a - 1, k) = Mid(Range("A" & a), 1, 3) & Mid(Range("c" & cr), 2, 2)
  21.         cr = cr + 1
  22.     Loop
  23.        br = br + 1
  24.     Loop
  25.     k = 0
  26. Next
  27. Range("e2").Resize(a - 2, 200) = newarr
  28. End Sub

复制代码

数据匹配表.rar

16.17 KB, 下载次数: 9

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-12-8 15:12 | 显示全部楼层
本帖最后由 心正意诚身修 于 2021-12-8 15:24 编辑

............
回复

使用道具 举报

发表于 2021-12-8 16:44 | 显示全部楼层
猜看看   
D2 下拉{=INDEX(A:A,INT(SMALL(IF(RIGHT(A$2:A$482,2)=TRANSPOSE(LEFT(B$2:B$482,2)),ROW($2:$482)/1%%+TRANSPOSE(ROW($2:$482))),ROW(A1))/10000))&RIGHT(INDEX(B:B,RIGHT(SMALL(IF(RIGHT(A$2:A$482,2)=TRANSPOSE(LEFT(B$2:B$482,2)),ROW($2:$482)/1%%+TRANSPOSE(ROW($2:$482))),ROW(A1)),4)))
回复

使用道具 举报

发表于 2021-12-8 17:24 | 显示全部楼层    本楼为最佳答案   
  1. Sub 数据生成()
  2. Dim newarr(), ar As Integer, br As Integer, cr As Integer, a As Integer, b As Integer, c As Integer
  3. Dim aa As String, bb As String, cc As String, k As Byte
  4. Range("e2:CA10000").ClearContents
  5. ar = Range("a65536").End(xlUp).Row
  6. ReDim newarr(1 To ar - 1, 1 To 200)
  7. For a = 2 To ar
  8.     If Range("a" & a) = "" Then
  9.     a = a + 1
  10.     End If
  11.    
  12.     aa = Mid(Range("a" & a), 2, 2)
  13.     On Error Resume Next
  14.     br = Application.Match(aa & "*", Range("b1:b65536"), 0)
  15.     Do While aa = Mid(Range("b" & br), 1, 2)
  16.     bb = Mid(Range("b" & br), 2, 2)
  17.     cr = Application.Match(bb & "*", Range("c1:c65536"), 0)
  18.     Do While bb = Mid(Range("c" & cr), 1, 2)
  19.         k = k + 1
  20.             newarr(a - 1, k) = Mid(Range("A" & a), 1, 3) & Mid(Range("c" & cr), 2, 2)
  21.         cr = cr + 1
  22.     Loop
  23.        br = br + 1
  24.     Loop
  25.     k = 0
  26. Next
  27. Range("e2").Resize(a - 2, 200) = newarr
  28. End Sub

复制代码

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:05 , Processed in 0.266239 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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