Sub TEST1()
'「3行目」が非表示かを判定
If Rows(3).Hidden Then Debug.Print "非表示"
End Sub
3行目が非表示のシートを用意します。
実行してみます。
結果は、非表示となって、可視セルの判定ができました。
列の可視セル判定
3列目が、可視セル化を判定するVBAコードです。
Sub TEST2()
'「3列目」が非表示かを判定
If Columns(3).Hidden Then Debug.Print "非表示"
End Sub
3列目が非表示のシートを用意します。
実行してみます。
結果は、非表示となって、可視セルの判定ができました。
すべての行と列の可視セルの判定
すべての行と列の可視セルの判定してみます。
すべての行や列をループして、可視セルを判定します。
すべての行で、可視セルの判定
すべての行で、可視セルを判定するVBAコードです。
Sub TEST3()
'すべての行で非表示を探す
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
If Rows(i).Hidden Then Debug.Print i & " 行目が非表示です"
Next
End Sub
3、4行目を非表示にしたシートを用意します。
実行してみます。
結果は、3、4行目が非表示となって、可視セルの判定ができました。
すべての列で、可視セルの判定
すべての列で、可視セルの判定をするVBAコードです。
Sub TEST4()
'すべての列で非表示を探す
For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
If Columns(i).Hidden Then Debug.Print i & " 列目が非表示です"
Next
End Sub
2、3列目を非表示にしたシートを用意します。
実行してみます。
結果は、2、3列目が非表示となって、可視セルの判定ができました。
フィルタした行も可視セルの判定ができる
オートフィルタで、「.Hidden」を使えば、フィルタした行も可視セルの判定ができます。
Sub TEST5()
'「3行目」が非表示かを判定
If Rows(3).Hidden Then Debug.Print "非表示"
End Sub
オートフィルタで3行目をフィルタしておきます。
フィルタする
実行すると、フィルタしたシートでも、可視セルの判定ができます。
フィルタ行の可視セルを判定できた
フィルタしたシートでも、可視セルの判定ができました。
データの有無を可視セルで判定
データの有無を可視セルで判定したい場合は、「.SpecialCells」を使います。
Sub TEST6()
'データの有無を可視セルを使って判定
If Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
Debug.Print "データがあります"
Else
Debug.Print "データがありません"
End If
End Sub
データ有無の判定を、データ無しの表で実行してみます。
データ無しの判定
見出しを除く、すべてのデータを非表示にした表を用意します。
実行してみます。
結果は、「データはありません」となって、データの有無を判定できました。
データ有りの判定
次は、データがある場合で、実行してみます。
実行してみます。
結果は、「データがありました」となって、データの有無を判定できました。
可視セルのみを削除する
「SpecialCells」を使って、可視セルのみを削除してみます。
可視セルのみを削除する
やりたい内容は、可視セルを削除する方法で、「A」の値のみを削除したい、ということになります。
「A」の値を削除したい
可視セルを削除する方法で、「A」の値のみを削除するVBAコードです。
Sub TEST7()
'「A」以外を非表示にする
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, 1) <> "A" Then
Rows(i).Hidden = True
End If
Next
'データ範囲内の、可視セルのみ削除する
With Range("A1").CurrentRegion
.Rows("2:" & .Rows.Count).SpecialCells(xlCellTypeVisible).Delete
End With
'すべての行を表示する
Rows("1:100").Hidden = False
End Sub
流れは、
「A」以外を非表示
可視セルを削除する
すべての行を表示
という感じです。
では、実行してみます。
実行の手順
「A」以外を非表示にします。
可視セルを削除します。
すべての行を表示します。
これで、可視セルを削除する方法で、「A」のデータを削除できます。
「A」のデータを削除できた
可視セルを削除する方法で、「A」のデータを削除できました。
データがない場合はエラーになっちゃう
ただ、問題があって、データがない場合はエラーになっちゃう、ということです。
削除する「A」のデータがない場合で、実行してみます。
削除する「A」のデータが無い場合
では、実行してみます。
エラーになっちゃう
実行すると、すべてのデータが非表示になります。
データを削除するタイミングで、エラーとなってしまいます。
削除するデータがないので、エラーとなってしまいました。
データ有無を可視セルで判定して削除
データを削除したい場合は、データ有無を「可視セルで判定」して削除するといいです。
データ有無を可視セルで判定して、削除してみます。
データ有無を判定して削除したい
VBAコードは、こんな感じになります。
Sub TEST8()
'「A」以外を非表示にする
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, 1) <> "A" Then
Rows(i).Hidden = True
End If
Next
With Range("A1").CurrentRegion
'データがある場合
If .SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
'データ範囲内の、可視セルのみを削除する
.Rows("2:" & .Rows.Count).SpecialCells(xlCellTypeVisible).Delete
End If
End With
'すべての行を表示
Rows("1:100").Hidden = False
End Sub
流れは、
「A」以外を非表示
データ有無を可視セルで判定
可視セルを削除する
すべての行を表示
という感じです。
では、実行してみます。
実行の手順
実行すると、「A」のデータがないので、すべて非表示となります。
データがないので、そのままとなります。
すべての行を表示します。
こんな感じで、データはそのままで、エラーを回避できます。
エラーを回避できた
データはそのままで、エラーを回避できました。
フィルタしたデータを削除する
次は、フィルタしたデータを削除するというのをやってみます。
フィルタしたデータを削除
やりたい内容は、オートフィルタを使って、「A」のデータを削除したい、ということになります。
オートフィルタを使って「A」を削除したい
VBAコードは、こんな感じになります。
Sub TEST9()
'「1行目」を「A」でフィルタ
Range("A1").AutoFilter 1, "A"
'フィルタ結果を削除する
With Range("A1").CurrentRegion
.Rows("2:" & .Rows.Count).EntireRow.Delete
End With
'フィルタを解除
Range("A1").AutoFilter
End Sub
実行の手順は、
1列目を「A」でフィルタ
フィルタ結果を削除
フィルタを解除
という流れです。
では、実行してみます。
実行の手順
1列目を「A」でフィルタします。
フィルタ結果を、削除します。
オートフィルタを解除します。
これで、「A」のデータを削除できます。
「A」のデータを削除できた
「A」のデータを削除できました。
データがない場合はすべて消えちゃう
やっぱり、問題は、データがない場合です。
オートフィルタの場合は、データがすべて消えちゃいます。
削除する「A」のデータがない場合で、実行してみます。
削除する「A」のデータが無い場合
では、実行してみます。
すべてのデータが削除されちゃう
「A」のデータがないので、フィルタ結果は、なしです。
フィルタ結果を削除すると、すべてのデータが削除されちゃいます。
フィルタを解除します。
削除するデータがない場合は、すべてのデータが削除されちゃいます。
こんな感じで、フィルタ結果がない場合は、すべてのデータが消えちゃいます。
データ有無を可視セルで判定して削除
オートフィルタを使う場合も、データ有無を「可視セルで判定」して削除するといいです。
データ有無を可視セルで判定して、データを削除してみます。
データ有無を判定して削除したい
VBAコードは、こんな感じになります。
Sub TEST10()
'「1行目」を「A」でフィルタ
Range("A1").AutoFilter 1, "A"
With Range("A1").CurrentRegion
'データがある場合
If .SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
'フィルタ結果を削除
.Rows("2:" & .Rows.Count).EntireRow.Delete
End If
End With
'フィルタを解除
Range("A1").AutoFilter
End Sub
実行の手順は、
1列目を「A」でフィルタ
データ有無を可視セルで判定
フィルタ結果を削除
フィルタを解除
という流れです。
では、実行してみます。
実行の手順
「A」のデータはないので、フィルタ結果はなしです。
データがないので、そのままとなります。
フィルタを解除します。
これで、データがない場合は、データをそのままにすることができます。
データが無い場合はそのままにできた
データがない場合は、データをそのままにすることができました。
可視セルをコピーして貼り付け
次は、可視セルをコピーして貼り付けをしてみます。
可視セルのみをコピーして貼り付け
やりたい内容は、可視セルをコピーする方法で、「A」のデータをコピーしたい、ということになります。
「A」のデータをコピーしたい
VBAコードは、こんな感じになります。
Sub TEST11()
'「A」以外を非表示にする
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
If Cells(i, 1) <> "A" Then
Rows(i).Hidden = True
End If
Next
'可視セルのみをコピーする
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Range("E1")
'すべての行を表示
Rows("1:100").Hidden = False
End Sub
実行する手順は、
「A」以外を非表示
可視セルをコピー
すべての行を表示
という流れです。
では、実行してみます。
実行の手順
「A」以外を非表示にします。
可視セルをコピーします。
すべての行を表示します。
これで、可視セルをコピーする方法で、「A」のデータをコピーできます。
「A」のデータをコピーできた
可視セルをコピーする方法で、「A」のデータをコピーできました。
オートフィルタを使うと便利
可視セルをコピーしたい場合は、オートフィルタを使うとかなり便利になります。
「.SpecialCells」を使わなくてもできます。
オートフィルタを使って、「A」のデータをコピーしてみます。
オートフィルタを使って「A」のデータをコピーしたい
VBAコードは、こんな感じになります。
Sub TEST12()
'「1行目」を「A」でフィルタ
Range("A1").AutoFilter 1, "A"
'フィルタ結果をコピーする
Range("A1").CurrentRegion.Copy Range("E1")
'フィルタを解除
Range("A1").AutoFilter
End Sub