循环遍历excel表中的特定列

时间:2017-08-11 13:38:05

标签: excel vba

我想遍历一个excel表,并用颜色标记所有行,找到一个空单元格。这很有效。

但是我想现在指定它应该只搜索的列。 这是实际的代码:

Sub Mark_Empty()

Dim myTable As ListObject
Dim myArray As Variant


Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.DataBodyRange


For Each cell In myArray
    If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
Next cell

End Sub

2 个答案:

答案 0 :(得分:1)

您可以使用Set myArray = myTable.ListColumns(2).Range选择特定列而不是整个表格。将2更改为您需要的任何列。

Sub Mark_Empty()

Dim myTable As ListObject
Dim myArray As Variant


Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.ListColumns(2).Range


For Each cell In myArray
    If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
Next cell

End Sub

修改

我回到原始解决方案迭代每个单元格,然后使用Case语句检查列号。只有当列号与IF中定义的列号相匹配时,才会执行您的初始Case

我并不认为它是最好的解决方案,但会做你需要的。

Sub Mark_Empty()

Dim myTable As ListObject
Dim myArray As Variant


Set myTable = ActiveSheet.ListObjects("Table1")
Set myArray = myTable.DataBodyRange


For Each cell In myArray
    Select Case cell.Column
        Case 2, 4, 5
            If IsEmpty(cell) = True Then cell.EntireRow.Interior.ColorIndex = 4
    End Select

Next cell

End Sub

答案 1 :(得分:0)

属性DataBodyRange会返回Range,因此您可以取出Range并根据需要进一步限制它。 请注意,您要将返回值分配给myArrayVariant,因此您应该在使用我的建议之前解决此问题。

另外,ListObject还有其他有用的属性:

  1. ListColumns,返回“表示ListObject对象中所有列的集合”。

  2. Range,返回“一个Range对象,表示指定列表对象的范围”。

  3. 在不了解您希望如何限制使用Range的情况下,可以说这一切。