複数「列」を非表示
うさこちゃん
サンプルは2パターンあります。
データが少ない場合は1つ目のサンプルで十分ですが、データが大量にあると、処理が遅くなる場合があります。
その場合は、サンプル2の「Range」に非表示データを貯めておき、一括して非表示にして高速化する方法がいいと思います。
①元データ
うさこちゃん
合計行(12行目)に0のデータがある列を非表示する。
②処理後データ
うさこちゃん
合計行(12行目)の0のデータを非表示した結果。
サンプル①
Dim ObjThisSh As Object
Dim LngColMax As Long
Dim LngHidden As Long
Set ObjThisSh = ThisWorkbook.Sheets("Sheet1")
LngHidden = 12 '合計行
With ObjThisSh
LngColMax = .Cells(LngHidden, .Columns.Count).End(xlToLeft).Column
For LngIndex = 2 To LngColMax
If .Cells(LngHidden, LngIndex).Value = 0 Then
'列を非表示にする
.Columns(LngIndex).EntireColumn.Hidden = True
End If
Next LngIndex
End With
サンプル② 高速化バージョン
Dim ObjThisSh As Object
Dim LngColMax As Long
Dim LngIndex As Long
Dim RngHidden As Range
Dim LngHidden As Long
Set ObjThisSh = ThisWorkbook.Sheets("Sheet1")
LngHidden = 12 '合計行
With ObjThisSh
LngColMax = .Cells(LngHidden, .Columns.Count).End(xlToLeft).Column
For LngIndex = 2 To LngColMax
If .Cells(LngHidden, LngIndex).Value = 0 Then
If RngHidden Is Nothing Then
Set RngHidden = .Cells(2, LngIndex)
Else
Set RngHidden = Union(RngHidden, .Cells(2, LngIndex))
End If
End If
Next LngIndex
If Not RngHidden Is Nothing Then
'列を一括非表示
RngHidden.EntireColumn.Hidden = True
End If
End With