初心者のためのExcel エクセルマクロVBA入門:値を消去する(ClearContents・Delete)
値を消したいのか?セルを消したいのか?
今回はまたエクセルマクロVBAの基礎のお話です。色々順不同でごめんなさい。最初から知りたい人は最初から当ブログを読んでいただけると嬉しいです。
そんなわけで今日はセルの削除のお話。
エクセルでは削除には2通りあります。
- セルごと削除する
- セルの中の値を消す
それぞれ、違いますよね。最初の方は、削除した後セルを右や左や上や下へシフトして、セルを「詰める」ように消します。セルの中を消す場合は別にセルの値が消えるだけでセルを詰める動作はありません。したがってセルの書式設定などはそのまま残ります。
それぞれ、DeleteメソッドとClearContentsメソッドを使います。どちらもRangeオブジェクトのメソッドです。
Deleteメソッド
'Sheet1のセルB1~D8を削除(上方向にシフト) Sub sample() Sheet1.Range("B1:D8").Delete Shift := xlShiftUp End Sub
わかりますでしょうか?ShiftというのがDeleteメソッドの引数です。この「:=」という書き方を覚えてください。検索をするFindメソッドでもやりましたが、「:=」は引数を指定する記号です。Findなどは引数がとても多く指定できるので、順不同でも引数が指定できるようにこの「:=」を使います。
引数Shiftは要するに「どっちに詰めるの?」を指定します。上に詰めるならxlShiftUpですし、左に詰めるならxlShiftToLeftと指定します。xlShiftUpもxlShiftToLeftも「定数」と呼ばれるものでVBAがあらかじめ用意してくれているものです。
これで、セルを削除することができるわけです。ちなみに、列を削除したいなら
Sheet1.Range("B:B").Delete
とすればいいし、行を削除したいなら
Sheet1.Range("2:2").Delete
でオーケーです。
ClearContentsメソッド
'Sheet1のセルB1~D8の値をクリアする Sub sample() Sheet1.Range("B1:D8").ClearContents End Sub
ClearContentsは簡単です。引数は特にありません。これで値を削除してくれます。値のみですので書式などはそのままになります。
上手に使分けること
おそらくほとんどですが、ClearContentsメソッドで行けると思いますが、意外とDeleteもしっかり使います。例えば、常に2行目を更新したい。って言う時どうします?
ここでも何度でも言っておきますが、絶対にメソッド単体で使わないこと。
Delete
とかやっても全然意味が分からないコードになりますので。そもそも、削除しろ!って命令しても・・・
( ゚д゚)ナニを?
ってエクセルがなるだけです。当然、
Range("2:2").Delete
とだけ書いても・・・
( ゚д゚)今選択してるシートから削除するよ?
となって、本来の動きと違うことになります。ちゃんと、どのエクセルのどのシートのどのセルなのか?をきちんと指定してあげましょう。これが、エクセルマクロが使えるようになる本当のコツです。
次回は挿入のお話です。
今日はここまで!
かしこ