Excel VBA用于选择可见行/活动表的正确代码?

Excel VBA correct code for selecting visible rows/the active table?

提问人:MikeE 提问时间:10/23/2023 更新时间:10/23/2023 访问量:68

问:

大家早上好,

我创建了VBA代码来自动执行一个非常手动的过程,将数据从一个工作表解析为其他几个工作表,以便继续另存为单个工作表。CSV 文件。该宏效果很好,我什至对宏进行了排序,以将每个单独的工作表保存为 .CSV 放入文件夹中,因此在生产力方面,它看起来非常好!

我的问题是关于选择受自动过滤器约束的数据的活动表的内容。例如,我在这个工作表中有大量数据跨越到第 851079 行,我应用了一些过滤器,显示最多 29369 行。这部分代码显示它使用绝对引用:

 ActiveSheet.Range("$A$1:$Q$851079").AutoFilter Field:=5, Criteria1:="EE"
    ActiveSheet.Range("$A$1:$Q$851079").AutoFilter Field:=6, Criteria1:="2G"
    Range("A1:Q851079").Select
    Range("F29342").Activate
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste

这适用于此工作簿,但并非每个我需要运行宏的工作簿都会有正好851079行,它会有更多/更少,但可能永远不会相同。

我最初的想法是相当“农业”的,因为将范围更改为工作表(1048576)的最后一行。列数将始终相同。

但是有没有更聪明的方法呢?

Excel VBA 选择 范围 自动筛选

评论

1赞 Shai Rado 10/23/2023
您可以首先使用 Upwork 上的搜索功能,您将 stackoverflow.com/questions/11169445/ 获得此链接......
0赞 vbakim 10/23/2023
在特定列中查找最后使用的行,使用数据所在的列,例如:LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, “A”)。结束 (xlUp)。Row ' 根据动态范围应用过滤器 ActiveSheet.Range(“$A$1:$Q$” & LastRow)。自动筛选字段:=5,条件 1:=“EE”
0赞 Notus_Panda 10/23/2023
您还应该看看如何避免选择
0赞 MikeE 10/23/2023
@vbakim我喜欢这个,它似乎运行得很好。我想用另一个具有更多行的工作簿来测试它,以确认它是否正常工作。不过,有一个问题,即您定义如何计算范围的第一部分:在引用范围和选择时,我是否需要在整个宏的每个点都包含它?目前,我只在开始时使用它,并在需要时使用以下内容: 和LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).RowActiveSheet.Range("$A$1:$Q$" & LastRow).AutoFilter Field:=6, Criteria1:="2G"Range("$A$1:$Q$" & LastRow).Select
0赞 Nick Abbot 10/23/2023
设置过滤器后,您可以尝试仅选择可见单元格:ActiveSheet.UsedRange.Columns(1)。SpecialCells(xlCellTypeVisible)。细胞

答: 暂无答案