Excel精英培训网

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

[已解决]组合数据并提取出来的问题

[复制链接]
发表于 2015-1-12 10:40 | 显示全部楼层 |阅读模式
本帖最后由 Baibdu 于 2015-1-12 16:29 编辑

附件 提取数据附件.rar (36.14 KB, 下载次数: 16)
发表于 2015-1-12 11:55 | 显示全部楼层
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Dim brr(1 To 10000, 1 To 2)
  4.     a = 47: b = 47
  5.     For i = 1 To UBound(arr)
  6.         For j = UBound(arr, 2) To 2 Step -1
  7.             x = arr(i, j)
  8.             If t = 0 And x = a Then
  9.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  10.                 brr(n + 2, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(a, "00")
  11.                 t = t + 1
  12.             ElseIf t = 1 And x = b Then
  13.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  14.                 brr(n + 1, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(a, "00")
  15.                 brr(n + 1, 2) = arr(i, j + 1)
  16.                 t = 0
  17.                 n = n + 2
  18.             End If
  19.         Next
  20.     Next
  21.     Sheet2.[a1].Resize(n + 2, 2) = brr
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2015-1-12 11:57 | 显示全部楼层    本楼为最佳答案   
请看附件。没有很严谨的考虑数组的边界。本组数据没有报错。

提取数据附件.rar

50.49 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2015-1-12 12:27 | 显示全部楼层
grf1973 发表于 2015-1-12 11:57
请看附件。没有很严谨的考虑数组的边界。本组数据没有报错。

老师您好,谢谢您帮助。
下载试了一下,发现有个小问题。

附件中,一共261行数据,那么表2的结果,应该是522行,实际运行出来的结果却有524行。
再仔细一对比,发现结果中的,第二组数据,不知是从哪里来的。表1中,没有相对应的行。
麻烦老师看看,再谢。
回复

使用道具 举报

 楼主| 发表于 2015-1-12 12:40 | 显示全部楼层
grf1973 发表于 2015-1-12 11:57
请看附件。没有很严谨的考虑数组的边界。本组数据没有报错。

刚才仔细看了一下,才发现,原来,结果中的第二组数据,也是来自第一行。
这个问题,附件中忽略了,也就是,每一行中,只能提取从左到右,一组数据,而不能同时提取两组。
附件中的数据,因进行了严格的筛选,除了第一行人为加进去多个47外,其余行,都只有两个47,因此造成了假象。
实际中,并不是这样的,比如:如果要输入两个数,是相同的,47  47,而这个数,在每一行,都铁定有5个,那么,只能选从右到左(即从后面到前面)最前面两个。输入不同的两个数,也是一样,总是选最前面的一个或两个。
回复

使用道具 举报

发表于 2015-1-12 12:58 | 显示全部楼层
小改一下就行了,找到第二个数后就跳出内循环
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Dim brr(1 To 10000, 1 To 2)
  4.     a = 47: b = 47
  5.     For i = 1 To UBound(arr)
  6.         For j = UBound(arr, 2) To 2 Step -1
  7.             x = arr(i, j)
  8.             If t = 0 And x = a Then
  9.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  10.                 brr(n + 2, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(a, "00")
  11.                 t = t + 1
  12.             ElseIf t = 1 And x = b Then
  13.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  14.                 brr(n + 1, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(a, "00")
  15.                 brr(n + 1, 2) = arr(i, j + 1)
  16.                 t = 0
  17.                 n = n + 2
  18.                 Exit For
  19.             End If
  20.         Next
  21.     Next
  22.     Sheet2.[a1].Resize(n + 2, 2) = brr
  23. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-1-12 15:34 | 显示全部楼层
grf1973 发表于 2015-1-12 12:58
小改一下就行了,找到第二个数后就跳出内循环

谢谢老师了。试了一下,如果是纯两位数,运行正常。但遇上带0头的两位数,在代码里,就会出现问题,我搞不懂这里为什么。比如:输入两个数,47   7,出来的结果,六位数里,后面两位全部是47,我又在代码里,把7改为两位数07,但不成功,手一离开,又变成一位数 7 了。
回复

使用道具 举报

发表于 2015-1-13 08:59 | 显示全部楼层
Baibdu 发表于 2015-1-12 15:34
谢谢老师了。试了一下,如果是纯两位数,运行正常。但遇上带0头的两位数,在代码里,就会出现问题,我搞不 ...
  1. Sub tt()
  2.     arr = [a1].CurrentRegion
  3.     Dim brr(1 To 10000, 1 To 2)
  4.     a = 47: b = 7
  5.     For i = 1 To UBound(arr)
  6.         For j = UBound(arr, 2) To 2 Step -1
  7.             x = arr(i, j)
  8.             If t = 0 And x = a Then
  9.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  10.                 brr(n + 2, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(a, "00")
  11.                 t = t + 1
  12.             ElseIf t = 1 And x = b Then
  13.                 y1 = arr(i, j - 2): y2 = arr(i, j - 1)
  14.                 brr(n + 1, 1) = "'" & Format(y1, "00") & Format(y2, "00") & Format(b, "00")
  15.                 brr(n + 1, 2) = arr(i, j + 1)
  16.                 t = 0
  17.                 n = n + 2
  18.                 Exit For
  19.             End If
  20.         Next
  21.     Next
  22.     With Sheet2
  23.         .Cells.Clear
  24.         .[a1].Resize(n + 2, 2) = brr
  25.         .Activate
  26.     End With
  27. End Sub
复制代码
回复

使用道具 举报

发表于 2015-1-13 09:00 | 显示全部楼层
有点小错误,改过来就好了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 19:25 , Processed in 1.104750 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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