ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 390|回复: 10

[求助] 按条件多次筛选存入数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-22 16:57 | 显示全部楼层 |阅读模式
  1. Sub 宏1()
  2.     Dim filterRange As Range
  3.     Dim brr() As String, a As Integer, i%, m%
  4.     Dim filterdata() As Variant
  5.     a = ThisWorkbook.Worksheets("sheet5").Range("A1").CurrentRegion.Rows.Count
  6.     ReDim brr(1 To a)
  7.     For i = 1 To a
  8.         brr(i) = Worksheets("sheet5").Range("A" & i).Value
  9.         Dim wa As Worksheet
  10.         Set wa = ThisWorkbook.Worksheets("sheet1")
  11.         Dim arr, rng As Range, RngUnion As Range
  12.         wa.UsedRange.AutoFilter field:=1, Criteria1:=brr(i)
  13.         On Error Resume Next '如果存在文本,会有类型匹配出错提示,忽略提示继续执行
  14.         Set rng = wa.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
  15.         filterdata = rng
  16.         On Error GoTo 0 '恢复
  17.         
  18.         If wa.AutoFilterMode Then
  19.             wa.AutoFilterMode = False '清除筛选
  20.         End If
  21.     Next i
  22.     Set rng = Worksheets("sheet4").Range("A1").CurrentRegion
  23.         arr = rng
  24. End Sub
复制代码
第一次循环后,数组filterdata内容正确,第二次循环后数组只显示一行。想要实现按学校名称筛选,每次筛选的结果要追加到上一次筛选的结果后面。

筛选实验.rar

22.63 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-5-22 17:55 | 显示全部楼层
参与一下
image.png

筛选实验.rar

23.72 KB, 下载次数: 13

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-22 18:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个就是将数组按照A列的排序吧,只是A列的排序方式是给定的

TA的精华主题

TA的得分主题

发表于 2024-5-22 18:14 | 显示全部楼层
数组排序这种问题交给WPS吧
录制_2024_05_22_18_13_07_4.gif

TA的精华主题

TA的得分主题

发表于 2024-5-22 18:14 | 显示全部楼层
JSA代码简单,效率高
  1. function 排序(){
  2.         const arr=Range("a1").CurrentRegion.Value2;
  3.         let obj=Sheets.Item("Sheet5").Range("a1").CurrentRegion.Value2.reduce((obj,[x],i)=>(obj[x]=i,obj),{});                //保存排序规则
  4.         arr.sort(([a],[b])=>arr[0][0]==b || obj[a]-obj[b]);
  5.         Range("k1").Resize(arr.length,2).Value2=arr;
  6. }
复制代码

TA的精华主题

TA的得分主题

发表于 2024-5-22 18:15 | 显示全部楼层
WPS打开测试,运行JS宏

筛选实验.zip

22.29 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-5-22 18:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-23 19:59 | 显示全部楼层

代码有问题?最后一个IF语句没有ENDIF 结束语句。还有最后的
for each 中的if 语句的是什么意思?为什redim arr1(1 to 2,1 to rowcount)是两行四列?元数据是两列?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-24 08:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-24 08:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 09:30 , Processed in 0.046338 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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