根据多个单元格值隐藏和取消隐藏行(比较)

根据多个单元格值隐藏和取消隐藏行(比较)

我正在尝试比较几家公司 (a、b、c、d) 的详细信息,这些详细信息显示在单元格 A1 和 B1 的下拉列表中。我使用 VBA 例程(如下所示)在整行没有值时隐藏行,但即使有一个值也保持未隐藏状态

对于此示例 1,例程不应隐藏任何行,但它隐藏了第 2 行和第 3 行,但第 4 行未被隐藏

    A           B
1   Company A   Company B
2   las vegas
3               boston
4   north       north

我如何确保 VBA 不会隐藏示例中的第 2 行和第 3 行?

我使用了以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, c As Range

    Set r = range[a2:b3]
    Application.ScreenUpdating = False
    For Each c In r
        If Len(c.Value) > 0 Then
            c.EntireRow.Hidden = False
        Else
            c.EntireRow.Hidden = True
        End If
    Next c
    Application.ScreenUpdating = True
End Sub

我上面使用的 VBA 仅适用于一列值,而不适用于用于比较的多列值。

我怎样才能做到这一点?

答案1

我对你的问题有点困惑。当我尝试运行你的程序时,它立即阻塞了Set r =,因为Union()必须给出至少两个参数。但是,当我将其更改为时Set r = [a2:b3],它会运行,并隐藏第 2 行,但不会隐藏第 3 行。

这正是我期望例程做的事情。

它逐个查看范围内的每个单元格A2:B3,然后对其采取行动。它会从上到下遍历该范围,然后从每行的左到右遍历该范围。(至少这是默认行为;也许可以更改它。)因此,会发生以下情况:

  1. 看看单元格A2。它有一个值,所以我们联合国隐藏第 2 行。
  2. 查看单元格B2。它没有值,因此我们隐藏第 2 行。
  3. 查看单元格A3。它没有值,因此我们隐藏第 3 行。
  4. 看看单元格B3。它有一个值,所以我们联合国隐藏第 3 行。

因此第 2 行最终被隐藏,而第 3 行最终被取消隐藏。

你需要看的是范围,而不是仅仅看一堆细胞,但作为一组行(每行都是一组单元格)。您需要另一个变量,它将采用逻辑(True/False)值。对于每一行,首先将变量设置为 True,这意味着“是的,据我所知,此行没有任何数据。”然后,对于该行中的每个单元格,如果该单元格有值,则将变量设置为 False,这意味着“不,此行不为空。”并且,在查看完一行中的每个单元格后,将该行的Hidden属性设置为变量的值。

相关内容