【问题标题】:Loop. Unhide 2 rows for each row showing in another sheet环形。为显示在另一个工作表中的每一行取消隐​​藏 2 行
【发布时间】:2015-06-01 15:37:32
【问题描述】:

我有一个电子表格 (Sheet3),它从其他 25 个工作表中收集和排序数据。所以我在 Sheet3 中没有大量空行我做了一个 VBA 循环,首先检查一个工作表是否可见,然后根据它们是否隐藏在其他 25 个工作表中来隐藏和取消隐藏行,比如所以:

Sheet3.Rows("1791:9290").EntireRow.Hidden = True
For i = 1205 To 1354
    If Sheet1.Visible = True Then
        If Sheet1.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 586).EntireRow.Hidden = False
        End If
    End If

    If Sheet2.Visible = True Then
        If Sheet2.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 886).EntireRow.Hidden = False
        End If
    End If

    If Sheet4.Visible = True Then
        If Sheet4.Rows(i).EntireRow.Hidden = False Then
            Sheet3.Rows(i + 1186).EntireRow.Hidden = False
        End If
    End If

    etc...

由于我需要提取的数据类型,很遗憾,我无法将表 3 与其他 25 个表逐行匹配。对于其他 25 张纸中可见的每一行,我需要 Sheet3 来取消隐藏 2 行

例如,如果 SheetX 第 1 行可见,Sheet3 必须使第 1 行和第 2 行可见。如果 SheetX 第 2 行可见,则 Sheet 3 必须使第 3 行和第 4 行可见,依此类推。

除了我必须更改所有其他 25 张工作表以使其行数加倍之外,还有什么方法可以做到这一点?这只是一个庞大项目的一部分,如果可以避免的话,我不希望再添加几千行。

【问题讨论】:

  • 如果您在 ...EntireRow.Hidden = False 语句中使用包含 2 行的范围,您可以一次取消隐藏 2 行。至于选择不隐藏的行,你可以使用一个相当简单的算术公式,比如Sheet2.Range("A" & 2 * i + 586 & ":" & "A" & 2 * i + 587).EntireRow.Hidden = False
  • 您的建议的问题(这是这里的主要问题)是即使取消隐藏两行也只能在循环的第一步中起作用。如果我告诉它每次都取消隐藏两行,那么你会得到:循环 1-取消隐藏第 1 行和第 2 行;循环 2 - 取消隐藏第 2 行和第 3 行;循环 3- 取消隐藏第 3 行和第 4 行。我需要这样:循环 1- 取消隐藏第 1 行和第 2 行;循环 2 - 取消隐藏第 3 行和第 4 行;循环 3- 取消隐藏第 5 行和第 6 行
  • Idk 如果这甚至可以改进代码。但顺便说一句,您可以重写内部 if 语句以使用布尔逻辑:Sheet3.Rows(i + 586).EntireRow.Hidden = (Sheet3.Rows(i + 586).EntireRow.Hidden And Sheet1.Rows(i).EntireRow.Hidden)

标签: vba loops excel


【解决方案1】:

使用.Cells 并在应用.EntireRow 之前将高度调整为2 行。

Sheet3.Cells(i + 586, 1).Resize(2, 1).EntireRow.Hidden = False

Resize property 将调整被引用范围的高度。随后的Range.EntireRow property 继续更改单元格引用以包含整行。

【讨论】:

  • 嗨吉普。这导致了我在上面提供的评论中引用的相同问题。这仅在第一次通过循环时才能正常工作。当我需要第 3 行和第 4 行时,它给了我第 2 和第 3 行。当我需要第 5 和第 6 行时,它给我第 3 和第 4 行。我需要第 7 和第 8 行,它给我第 4 和第 5 行。我需要一个方法每次通过循环将与 Sheet3 相关的 i 增加一个计数。
【解决方案2】:

我意识到这样做的唯一方法是添加另一个整数,每次循环都会改变。所以我添加了Dim J As Integer 并设置了j = 0。我添加了一行来取消隐藏每个循环中的两行并将j 合并到该代码中。然后我在循环末尾添加了j = j + 1

下面是它的外观:

Dim j As Integer
j = 0        

Sheet3.Rows("1791:9290").EntireRow.Hidden = True
        For i = 1205 To 1354
            If Sheet1.Visible = True Then
                If Sheet1.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 586).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 587).EntireRow.Hidden = False
                End If
            End If

            If Sheet2.Visible = True Then
                If Sheet2.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 886).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 887).EntireRow.Hidden = False
                End If
            End If

            If Sheet4.Visible = True Then
                If Sheet4.Rows(i).EntireRow.Hidden = False Then
                    Sheet3.Rows(i + j + 1186).EntireRow.Hidden = False
                    Sheet3.Rows(i + j + 1187).EntireRow.Hidden = False
                End If
            End If

    etc...

        j = j + 1
        Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2011-12-14
    相关资源
    最近更新 更多