Excel精英培训网

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

[已解决]VBA实现提取单元格内包含某包含某一值的行,大数据处理需要快速计算算法

[复制链接]
发表于 2015-3-3 10:52 | 显示全部楼层 |阅读模式
本帖最后由 jk0932 于 2015-3-3 11:31 编辑

如下所示某表格为:

比赛项目        运动员编号        成绩
排球        2021        55
排球        2022        77
排球        2023        33
排球        2024        11
排球        2025        18
排球        2026        37
排球        2027        89
排球        2028        72
排球        2029        59.60714286
羽毛球        2021        61.96428571
羽毛球        2022        64.32142857
羽毛球        2023        66.67857143
羽毛球        2024        69.03571429
羽毛球        2025        71.39285714
网球        2021        73.75
网球        2022        76.10714286
网球        2023        78.46428571
网球        2024        80.82142857
网球        2025        83.17857143
现在想提取运动员编号为2021的行,结果为
比赛项目        运动员编号        成绩
排球        2021        55
羽毛球        2021        61.96428571
网球        2021        73.75

大数据处理需要快速运算方法。

求解:

最佳答案
2015-3-3 11:08
  1. Sub 查找()
  2.     arr = [a1].CurrentRegion
  3.     mr = UBound(arr): mc = UBound(arr, 2)
  4.     xm = [g1]: xsearch = [h1]
  5.     c = [a1].Resize(1, mc).Find(xm).Column       '待查找项目所在的列
  6.     brr = arr: n = 1
  7.     For i = 2 To mr
  8.         If InStr(arr(i, c), xsearch) > 0 Then
  9.             n = n + 1
  10.             For j = 1 To mc: brr(n, j) = arr(i, j): Next
  11.         End If
  12.     Next
  13.     If n > 1 Then
  14.         [f3].Resize(mr, mc).Clear
  15.         [f3].Resize(n, mc) = brr
  16.     End If
  17. End Sub
复制代码
发表于 2015-3-3 11:08 | 显示全部楼层    本楼为最佳答案   
  1. Sub 查找()
  2.     arr = [a1].CurrentRegion
  3.     mr = UBound(arr): mc = UBound(arr, 2)
  4.     xm = [g1]: xsearch = [h1]
  5.     c = [a1].Resize(1, mc).Find(xm).Column       '待查找项目所在的列
  6.     brr = arr: n = 1
  7.     For i = 2 To mr
  8.         If InStr(arr(i, c), xsearch) > 0 Then
  9.             n = n + 1
  10.             For j = 1 To mc: brr(n, j) = arr(i, j): Next
  11.         End If
  12.     Next
  13.     If n > 1 Then
  14.         [f3].Resize(mr, mc).Clear
  15.         [f3].Resize(n, mc) = brr
  16.     End If
  17. End Sub
复制代码

工作簿1.rar

9.64 KB, 下载次数: 12

回复

使用道具 举报

发表于 2015-3-3 11:20 | 显示全部楼层
请勿设置“仅作者可见”,会使得其他朋友无法查看。
回复

使用道具 举报

 楼主| 发表于 2015-3-4 21:49 | 显示全部楼层
grf1973 发表于 2015-3-3 11:08

编译提示,对象变化或with块变量未设置,如何改进。
我将代码      
xm = [g1]
c = [a1].Resize(1, mc).Find(xm).Column       '待查找项目所在的列
改为:
        xm = Application.InputBox("请输入name")
        c = [a1].Resize(1, mc).Find(xm).Column       '待查找项目所在的列
出现问题
编译提示,对象变化或with块变量未设置,如何改进
回复

使用道具 举报

匿名  发表于 2015-3-5 00:01
学习了,果然有有气氛的
回复

使用道具

发表于 2015-3-5 08:19 | 显示全部楼层
数据分列、筛选不就可以了吗。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 14:02 , Processed in 0.282036 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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