Excel精英培训网

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

[已解决]EXCEL自动识别数据并整理成表格

[复制链接]
发表于 2017-7-25 21:33 | 显示全部楼层 |阅读模式
本帖最后由 Kiki2Q17 于 2017-7-27 08:51 编辑

求助各位大神和老师:
我需要把图一的数据

图一

图一

让EXCEL自动生成图二的表格

图二

图二

应该怎么办,麻烦帮忙解答,万分感谢!
EXCEL.zip (9.31 KB, 下载次数: 24)
发表于 2017-7-25 22:16 | 显示全部楼层
Sheet2
B2=IFERROR(INDEX(Sheet1!$C:$C,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1))&"("&IFERROR(INDEX(Sheet1!$B:$B,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1)),"")&")","")

数组
回复

使用道具 举报

发表于 2017-7-25 22:17 | 显示全部楼层
Sheet2
B2=IFERROR(INDEX(Sheet1!$C:$C,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1))&"("&IFERROR(INDEX(Sheet1!$B:$B,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1)),"")&")","")

数组
回复

使用道具 举报

发表于 2017-7-25 23:37 | 显示全部楼层
按照你显示结果的表格的设计,如果同一分数段出现两个以上的人名,只能显示一个
回复

使用道具 举报

 楼主| 发表于 2017-7-25 23:43 | 显示全部楼层
哇!好厉害!!谢谢!
录入了一下,确实可以,不过向下拉时,其他数段不显示数据,是不是向下拉函数的时候,我需要改哪里?烦请赐教

回复

使用道具 举报

 楼主| 发表于 2017-7-25 23:46 | 显示全部楼层
cabcyvr 发表于 2017-7-25 23:37
按照你显示结果的表格的设计,如果同一分数段出现两个以上的人名,只能显示一个

我的目标确实是都全部自动显示,不过能显示一个已经帮了大忙了,感谢!
回复

使用道具 举报

 楼主| 发表于 2017-7-25 23:48 | 显示全部楼层
cabcyvr 发表于 2017-7-25 22:17
Sheet2
B2=IFERROR(INDEX(Sheet1!$C:$C,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0) ...

没用对回复,重新发一次
*****************************************
哇!好厉害!!谢谢!
录入了一下,确实可以,不过向下拉时,其他数段不显示数据,是不是向下拉函数的时候,我需要改哪里?烦请赐教


回复

使用道具 举报

发表于 2017-7-26 10:15 | 显示全部楼层
  1. Sub aaa()
  2. Dim arr, brr, i&, j&, d As Object
  3. Set d = CreateObject("scripting.dictionary")
  4. For j = 2 To Sheets(2).Cells(1, Columns.Count).End(1).Column
  5.   d(Sheets(2).Cells(1, j).Value) = j - 1
  6. Next j
  7. ReDim brr(1 To 10, 1 To d.Count)
  8. arr = Sheets(1).[a1].CurrentRegion
  9. For i = 2 To UBound(arr)
  10.   brr(-Int(-arr(i, 4) / 10), d(arr(i, 1))) = brr(-Int(-arr(i, 4) / 10), d(arr(i, 1))) & arr(i, 3) & "(" & arr(i, 2) & ")"
  11. Next i
  12. Sheets(2).[b2].Resize(10, d.Count) = brr
  13. End Sub
复制代码
回复

使用道具 举报

发表于 2017-7-26 12:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 cabcyvr 于 2017-7-26 12:51 编辑

[img][/img]  B2的公式是数组,要 CONTROL SHIFT ENTER 3键一起按压执行,之后复制到其他单元格内。直接按ENTER执行没有用的。

Sheet2
B2=IFERROR(INDEX(Sheet1!$C:$C,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1))&"("&IFERROR(INDEX(Sheet1!$B:$B,SMALL(IF((Sheet1!$D$2:$D$1000>=SUBSTITUTE(LEFT($A2,2),"~",)-0)*(Sheet1!$D$2:$D$1000<=SUBSTITUTE(MID($A2,3,9),"~",)-0)*(Sheet1!$A$2:$A$1000=B$1),ROW(Sheet1!$A$2:$A$1000),"/"),1)),"")&")","")
test.jpg
回复

使用道具 举报

 楼主| 发表于 2017-7-27 08:36 | 显示全部楼层

赞!一直以来很想用VBA来解决这个问题,我试试看,谢谢谢谢!!
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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