2017-12-20 9 views
-1

私はシフトレポートの終わりを送信するために使用する出欠追跡機能を持っています。現在、私のクラス全体の出席が示されています。私は行を隠して0時間を逃したマクロを作りたいと思います。Excelで行を自動的に非表示にする方法

ブランクトラッカー2.0は、ブック パルステンプレートの名前は私が Fのマクロを必要とするワークシートの名前です(別のシートから引き出さ)私は記録時間が見逃している列 18から46であるです隠されているか隠されている必要がある行。

F18が0の場合、私はそれを隠す必要があります。 F18> 0の場合、私はそれを見る必要があります。

私はこれはかなり単純なマクロだと思っていますが、基本的にはマクロに関する経験はありません。

+4

?あなたは、そのフィルタを適用しながらマクロを記録することができます、そして、それはそこにあなたのほとんどを得るでしょう。 –

+1

スタックオーバーフローは、コーディングソリューションの検索に役立ちます。回答を得るには、あなたがした試行を投稿してください。あなたは自分自身を重くする必要があります。 – JJFord3

答えて

0

これをactiveXボタンイベントに設定します。 F18〜F46が0の場合は、非表示の場合は非表示になります。

Sub button_click() 
    Dim i as integer 
    For i = 18 to 46 
     If Activesheet.Range("F" & i) = 0 Then 
      Activesheet.Range("F" & i).entireRow.Hidden = True 
     else 
      Activesheet.Range("F" & i).entireRow.Hidden = False 
     End If 
    Next i 
End Sub 
+0

QHarrとpokemon_Manありがとう!本当にコーディングに感謝!ボタンなしのマクロを期待していましたが、これはうまくいくでしょう:-) –

+0

あなたの質問が解決したら、この回答を選択してください。ありがとうございました。 –

1

効率的な方法は、非表示にした後、一度にすべてを非表示にするすべての行を収集するためにUnionを使用することです。また、このコードは、値がセル内で実際に数値であることを確認します。

これは、以前の回答で述べたようにformコントロールまたはActiveXボタンに結び付けることができます。フィルタを使用しないのはなぜ

Sub hideRows() 


Dim wb As Workbook 
Dim wsSource As Worksheet 

Set wb = ThisWorkbook 
Set wsSource = wb.Worksheets("Sheet7") 

Dim loopRange As Range 
Dim currRow As Range 
Dim hideRange As Range 

Set loopRange = wsSource.Range("F18:F46") 
loopRange.EntireRow.Hidden = False 

For Each currRow In loopRange.Rows 

    If IsNumeric(currRow.Value2) And currRow.Value2 = 0 Then 

     If Not hideRange Is Nothing Then 
      Set hideRange = Union(currRow, hideRange) 
     Else 
      Set hideRange = currRow 
     End If 

    End If 

Next currRow 

If Not hideRange Is Nothing Then hideRange.EntireRow.Hidden = True 


End Sub 
1

これはどう...

Sub HideRowsLoop() 
    For Each cell In Worksheets("Pulse Template").Range("C18:C46") 
     If cell.Value = "0" Then 
      cell.EntireRow.Hidden = True 
     End If 
    Next cell 
End Sub 
関連する問題