2017-03-06 7 views
0

は、私は2つの基準に基づいて行を非表示にしようとしています:エクセルVBAを隠す行は、セルの色に基づいて、コマンドが「はい」と言う場合

基準1:セルQ3は基準によって適合した値「yes」を非表示セルがある場合2

基準2:列Aのセルの色がRGB(253,233,217)の場合は、その行全体を非表示にします。

本質的には、1日あたりの電子メールの数を追跡する日のリストがあり、トレンドを示すグラフに表示されないように週末を非表示にしたいと考えています。私は自分の上司に言わせてやっているので、セルQ3のドロップダウンから「はい」または「いいえ」をクリックして週末の行を隠すだけです。週末は明るいオレンジ(上記のrgbコード)に色付けされています。セルQ3が「いいえ」と言った場合には、すべての行が非表示/非表示のままであることも重要である。私が今持っているコードは次のとおりです。

Sub HideRows() 
BeginRow = 1 
EndRow = 1000 
ChkCol = 1 
ChkCommCol = 17 

For RowCnt = BeginRow To EndRow 
    If Cells(RowCnt, ChkCommCol).Value = "Yes" Then 
     If Cells(RowCnt, ChkCol) = RGB(253, 233, 217) Then 
      Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
     Else 
      Cells(RowCnt, ChkCol).EntireRow.Hidden = False 
    If Cells(RowCnt, ChkCol).EntireRow.Hidden = True Then 
     Cells(RowCnt, ChkCol).EntireRow.Unhide = True 
    End If 
Next RowCnt 

End Sub 

詳細な情報が必要な場合、私に知らせて!手伝ってくれてどうもありがとう。

+0

eが機能していない場合は、エラーとその発生場所を記述してください。 – SJR

答えて

0

あなたが任意のモジュールのコードウィンドウにこのコードを試みることができる:

Sub HideRows() 
    Dim beginRow As Long, endRow As Long, chkCol As Long, chkCommCol As Long, rowCnt As Long 

    beginRow = 1 
    endRow = cells(Rows.Count, 1).End(xlUp).Row '<--| set 'endRow' to column A last not empty cell row index 
    chkCol = 1 
    chkCommCol = 17 

    Rows.EntireRow.Hidden = False 'unhides all rows. Subsequent code will hide relevant ones 

    If cells(3, chkCommCol).Value = "Yes" Then '<--| if Q3 value is "Yes" 
     For rowCnt = beginRow To endRow '<--| loop through the "limit" rows indexes 
      With cells(rowCnt, chkCol) '<--| reference current cell to be cheked 
       .EntireRow.Hidden = (.Interior.Color = RGB(253, 233, 217)) '<--| set its corresponding Row 'Hidden' property to True if currently referenced cell has wanted color 
      End With 
     Next 
    End If 
End Sub 

とあなたの関連で次のコードを配置しますワークシートコードペイン:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$Q$3" Then HideRows '<--| if "Q3" cell has been changed then run 'HideRows' macro 
End Sub 
+0

このコードがうまくいけば教えてもらいたいです。しかし、モジュールに入力して実行を押すと起動しましたが、今は停止しません。VBEは絶えず稼働しており、Excelの本自体は常に左下にCalculateと言っています。これが起きている間は、私は選択したり編集したりすることができません。私はこれを実行したが、Q3は「はい」と答えたが、それが原因かどうかはわからない。 – Eva

+0

申し訳ありませんが、誤って 'Worksheet_Change()'の代わりに 'Worksheet_SelectionChange'を入力しました。そして '。ロー'を逃した。編集されたコードを参照してください。私に知らせてください – user3598756

+0

心配しないで、私は何か間違っていたものではないことを確認したかったのです。私は変更を追加したが、それでも1つの行が隠れているだけで、手動でマクロを実行する必要があります。私がコードを変更したときにこれがなぜ変化しないのでしょうか? – Eva

1

まず、コード全体でEnd Ifステートメントをいくつか見落としています。私はあなたの質問を編集して、どこにあるのかを示すのに役立ちます。LoopsIfステートメント。

Ifステートメントに関しては、セルの内部ではなく、セルの色を確認する必要があります。これは、構文で行われます

Cells(x, y).Interior.Color = RGB(r, g, b) 

はこれを試してみてください:

Sub HideRows() 
BeginRow = 1 
EndRow = 1000 
ChkCol = 1 
ChkCommCol = 17 

Application.ScreenUpdating = False 'Speeds up subroutine 
Application.Calculation = xlCalculationManual 

If Cells(3, ChkCommCol).Value = "Yes" Then 'This line checks that `Q3` is "Yes" 
    For RowCnt = BeginRow To EndRow 'This line loops through the rows and hides the weekends 
     If Cells(RowCnt, ChkCol).Interior.Color = RGB(253, 233, 217) Then 
      Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
     End If 
    Next RowCnt 
Else 
    Rows.EntireRow.Hidden = False 'This line unhides all rows in the activesheet if `Q3` isn't "Yes" 
End If 

Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

End Sub 
+0

このアドバイスをいただきありがとうございます、私は間違いなく私の行を適切にインデントされた状態に保つために努力します。私はコードを実行し、残念ながら、何も起こらなかった。私はオンラインで見つけたものからトップ部分(初心者、エンドローなど)を使用しましたが、それが私がしたいことのための適切な表記法なのかどうかわかりません。コードにバグはありません。Excelシートでは何も変わりません。 – Eva

+0

さて、もう一度やり直してみると、実際に 'Yes/No'をチェックしているセルは実際に' BeginRow'から 'EndRow'にインクリメントされています。とにかく私たちはちょっと切ることができると確信しているので、コードを編集します。 – Jordan

+0

'Q3'が'いいえ 'ならば、週末をすべて表示しますか? – Jordan

関連する問題