2015-06-01 38 views
0

我有一個電子表格(Sheet3),用於收集和排序來自其他25張紙張的數據。所以我在Sheet3中沒有大量的空行我做了一個VBA循環,首先檢查一個表是否可見,然後根據它們是否隱藏在其他25個表中來隱藏和取消隱藏行,如所以:循環。顯示在另一張紙上的每行顯示2行

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... 

由於數據的I型需要拉我可惜不能匹配片3向上與其他25張排爲一行。對於其他25行中可見的每行,我需要Sheet3至取消隱藏2行

例如,如果SheetX行1是可見的,Sheet3必須使行1和行2可見。如果SheetX Row 2可見,則Sheet 3必須使行3和4可見,依此類推。

有沒有辦法做到這一點,我不得不改變所有的25張其他牀單加倍他們的行數?這只是一個巨大項目的一部分,如果可以避免的話,我不想再增加幾千行。

+1

如果您使用包含在'... EntireRow.Hidden = FALSE'聲明2行的範圍內,你可以同時取消隱藏2行。至於選擇要隱藏的行,你可以使用一個相當簡單的算術公式,比如'Sheet2.Range(「A」&2 * i + 586&「:」&「A」&2 * i + 587).EntireRow。隱藏=假「。 – 314UnreadEmails

+0

你的建議(這是這裏的主要問題)的問題是即使取消隱藏兩行也只能在循環的第一步中工作。如果我告訴它每次取消隱藏兩行,那麼你會得到這個:循環1-取消隱藏行1和2;循環2-取消隱藏第2行和第3行;循環3-取消隱藏行3和4.我需要它像這樣:循環1-取消隱藏行1和2;循環2-取消隱藏第3行和第4行;循環3-取消隱藏第5行和第6行 –

+0

Idk如果甚至完全改善了代碼。但作爲一個觀點,你可以重寫內部的'if'語句來替代使用布爾邏輯:'Sheet3.Rows(i + 586).EntireRow.Hidden =(Sheet3.Rows(i + 586).EntireRow.Hidden And Sheet1 .Rows(i).EntireRow.Hidden)' – chancea

回答

0

我意識到要做到這一點的唯一方法是添加另一個整數,每次在整個循環中都會發生變化。所以我加了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 
0

使用.Cells並在應用.EntireRow之前調整高度爲2行。

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

Resize property將調整被引用範圍的高度。隨後的Range.EntireRow property繼續更改單元格引用以包含整個行。

+0

嗨Jeeped。這導致了我在上面提供的評論中引用的相同問題。這隻能在第一次通過循環時正常工作。當我需要第3行和第4行時,它給了我第2行和第3行。當我需要第5行和第6行時,它給了我第3行和第4行。我需要7和8,它給了我4和5。通過循環每次增加i,因爲它與Sheet3相關的次數爲一次。 –