初心者のためのExcel エクセルマクロVBA入門-実践基礎:セルを操作する-その3範囲指定
考えてみればエクセルなんだからセルの操作なんて基本っちゃ基本ですね。だからこそとっても大事ということですね。今日はセルの範囲の指定方法などを主にやりたいと思います。
例えば、セルA1~E10くらいまでデータ入っていて、それを全部消したいなら、
Sub test() Sheet1.Range("A1:E10").ClearContents End Sub
ですね。ClearContentsメソッドを使うとできます。さて、ではA1はいいですが、最後が何行かわからない場合ってどうします?
色々とやり方はあります。
Endプロパティを使ってみる。
Endプロパティを使うと簡単にセルに入っている最後の場所へ飛べますよね。それを利用します。どうやるか?
Sub test() Dim endRow As Long Dim endCol As Long endRow = Sheet1.Range("A1").End(xlDown).Row endCol = Sheet1.Range("A1").End(xlToRight).Column Sheet1.Range(Cells(1, 1), Cells(endRow, endCol)).ClearContents End Sub
という方法です。ポイントはEndプロパティでA1から、下と右へ移動してセルの最終行と列を取得しているところと、Rangeオブジェクトでの指定方法です。ちょっとだけ省略しましたが、実際はSheetオブジェクトから書いた方が間違いがないと思います。
これは、エクセルでCtrl+上下キーを使ったやり方です。ですがエクセルで実際にこのような感じで消す時に、Ctrlだけ使ったりしますか?実はしないです。
エクセルのショートカット使おうよ。。
エクセルを知っている人ならわかりますが、CtrlとShiftキーも一緒に使っています。つまり・・・
Ctrl+Shift+Endキーを押す。
です!これを使えば一発で、A1~(最後にデータが入ってるセル)まで一気に選択できちゃいます。
これをVBAで書くと・・・
Sub test() Sheet1.Range(Selection, Sheet1.SpecialCells(xlLastCell)).ClearContents End Sub
こうです。通常プログラム的に考えれば、実現方法って無数にあるのですが皆さんはエクセルマクロを学んでいます。エクセルマクロが簡単なのは、動作をそのまま命令1つで行えることが多い。つまりエクセルの機能は大抵命令として存在しているということなのです。ですから、このように一発でスマートに書けます。
いいですか?まずはエクセルを知りましょう。だってエクセルマクロなんですから。
とても大切なことです。エクセル自体の基礎はとても大切なのです。ピボットテーブル使えない人が、マクロでピボットテーブル使えるわけがないでしょう?使えばスゲー楽にできるはずなのに・・・です。一生懸命プログラムで実現しようとする。
それはそれで間違いではないと思いますが、パフォーマンスが落ちるだけなんです。
すごく簡単でもシートを非表示で保護できるというのを知っているだけで、マクロのサブワークシートとして使う発想もあります。
しかしそれを知らなければ、なければ一生懸命変数に入れて考えます。
エクセルマクロが便利というのはこういう所なんです。エクセル丸ごと使ってあげましょう。
まだある。ショートカット。
実はもう1つあります。さっきはCtrl+Shift+Endキーでしたが、Ctrl+Shift+*キーでも同じようなことができます。こちらは、今選択されているセルを含めて利用されているセルの範囲を一発で選択します。
Sub test() Sheet1.Range("A1").CurrentRegion.ClearContents End Sub
こうです。今度はRangeオブジェクトのCurrentRegionプロパティを利用しています。それぞれ、SpecialCellsやCurrentRegionと使っているものは違いますが、結果は一緒です。
Endプロパティは結構よく使いますし、他のプロパティも意外と使うので、合わせて利用してみましょう。
今日はここまで!
かしこ