有没有办法遍历表(listobject)列中的可见单元格?

Posted

技术标签:

【中文标题】有没有办法遍历表(listobject)列中的可见单元格?【英文标题】:Is there a way to loop through the visible cells in a table (listobject) column? 【发布时间】:2022-01-12 05:50:32 【问题描述】:

在 Excel 表 (ListObject) 中,我已经开始跟踪数百部电影及其状态,因为我将它们撕成光盘以在 Plex 中使用。这张桌子没有什么花哨的;它存储您期望的内容,例如翻录文件夹、Plex 媒体文件夹、电影名称、发行年份、我存储原始光盘文件副本的备份文件夹等。我在之后创建了工作簿我已经拍了几百部电影以使跟踪更容易。由于在创建工作簿之前我的方法不一致,我现在需要在工作簿中进行一些清理工作。我想使用 VBA 来做,因为手动更正会很乏味、容易出错并且需要很长时间。我有一个我相信会起作用的算法,但它依赖于遍历过滤表列中可见单元格的能力——我将使用该列来确定是否需要对该行进行任何更正,然后在需要的地方,需要进行更正的列。

如有任何指导,我们将不胜感激! 谢谢

【问题讨论】:

为什么循环必须发生在过滤的行上?为什么不能将用作表格过滤器的条件转换为循环内的条件语句? 好问题。简短的回答是因为我预计情况会以我无法预测的方式发生变化,因为它们是基于我将来犯的任何错误。我已经拍了 400 部电影;我有大约 1000 台机器要做,为了提高效率,我设置了 3 台机器来处理它们,因此我将更新所有 3 台机器的工作簿(它们具有不同的本地驱动器,可用于中间翻录阶段)。这个过程既乏味又漫长,所以我预计我会犯一些错误。所以我希望这个纠正过程足够灵活来处理这个问题。 @JosWoolley 的另一个原因是因为我想限制范围 - 以及潜在的损害 - 如果我的代码中存在错误,并且在代码运行限制,我需要检查错误。我不确定您是否问过,因为我想做的事情要么是不可能的,要么是不可取的。无论哪种情况,我都想知道,因为我只有 VBA 的中级技能,我是来学习的。谢谢 【参考方案1】:
Sub Test()

Set MyTable = Worksheets("Sheet1").ListObjects("Table1")

With MyTable
    For i = 1 To .DataBodyRange.Rows.Count
        If .DataBodyRange.Rows(i).EntireRow.Hidden = False Then
            [Do Something]
        End If
    Next i
End With

End Sub

[Do Something] 替换为您想要对可见行执行的操作,例如:

Sub Test()

Set MyTable = Worksheets("Sheet1").ListObjects("Table1")

With MyTable
    For i = 1 To .DataBodyRange.Rows.Count
        If .DataBodyRange.Rows(i).EntireRow.Hidden = False Then
            .DataBodyRange(i, 3).Value = "I'm not hidden!"
        End If
    Next i
End With

End Sub

输入“我没有隐藏!”将每个可见行放入该表的第三列。

【讨论】:

谢谢@joswoolley。我实施了您的解决方案的修改版本,效果很好!我以前见过.EntireRow 属性,但不知道它有.Hidden 属性。看起来它们可能起作用的方法的数量之多使得反复试验变得乏味。你节省了我很多时间!

以上是关于有没有办法遍历表(listobject)列中的可见单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有任何数据行的 Excel 表/ListObject 中读取计算列的公式

如何通过仅选择表正下方行中的任何单元格来触发宏(ListObject)

有没有办法在不使用游标的情况下循环遍历 SQL 中的表变量?

在 PHP 中,有没有办法循环查询并根据值将其组织到特定列中?

循环遍历一张表中的列值并将另一列中的 COUNTIF 值粘贴到另一张表中

根据条件VBA删除表行