文系のIT勉強メモ

勉強中のメモと、インフラの覚書き

VBA フィルタかけてるシートに対してClearContents

フィルタのかかった表があるシートで、手動でA1の左上をクリック=全選択してdeleteボタン押すと、今表示されてる領域だけが消えます。フィルタが外れて、隠れていたデータが出てくる。そこでさらに全選択してdeleteでようやく全て消すことができます。

これが、VBAでも同じことが起きました。フィルタかかったシートに対してClearContentsしても、2回実行せねば消えることがありません。

回避策としては、フィルタを解除してからClearContentsする必要があります。

またそのとき、chatGPTが教えてくれた

On Error Resume Next

On Error GoTo 0

これを外すことができなかったので、ポイントとしてメモしておきます。

外してたらエラーになったのはたぶん、フィルタかかってないときにこれが発動されるとエラーになってしまうんだと思う

サンプルコード

Sub ClearFilteredData()
    On Error Resume Next
    ActiveSheet.ShowAllData ' フィルタを解除
    On Error GoTo 0
    
    ' シートの全ての値をクリア
    ActiveSheet.UsedRange.ClearContents
End Sub

エラーが発生してもプログラム停止しない

    On Error Resume Next
    ' エラーが発生する可能性のあるコード
    ' ...

    On Error GoTo 0
    ' 通常のエラーハンドリングに戻す

    ' エラーが発生しても通常通りメッセージが表示され、プログラムが停止する
    ' ...