『Excel VBA 表計算とプログラミング学習サイト』では、アフィリエイトプログラムを利用して商品を紹介しています。

【VBA】RangeプロパティでRangeオブジェクトを参照します

【VBA】Rangeオブジェクト

VBAではワークシートのセルをRangeオブジェクトで操作します。これは単体セルであっても、複数セル、あるいはセル範囲であっても、とにかくセルと名のつくものはみんな Rangeオブジェクトなのです。
 
VBA Rangeオブジェクトでセル範囲を選択
 
だから

Rangeオブジェクト.メソッド

とか

Rangeオブジェクト.プロパティ

みたいに書けば、セルに色を塗ったり、枠線つけたり、色々なことができます。とりあえず今回はセルを選択するという一番基本的な操作を覚えましょう。これだけでも覚えることがたくさんあります。
 
まずは基本中の基本。セル A1 を選択してみましょう。Rangeプロパティで得た Rangeオブジェクトに対して Selectメソッドを使います。

'[VBA] 単体セルを選択
Sub Select_Range_A1()
  Range("A1").Select
End Sub

Select_Range_A1() を実行するとセル A1 が選択されます。
 
A1セルを選択
 
次はセル範囲を選択してみましょう。

'[VBA] セル範囲を選択
Sub Select_Range_B2C4()
  Range("B2:C4").Select
End Sub

Select_Range_B2C4() を実行すると、B2 から C4 のセル範囲が選択されます。
 
VBA B2C4セル範囲選択
 
次はとびとびセルを選択してみましょう。

'[VBA] とびとびセルを選択
Sub Select_Range_B2D4()
  Range("B2, D4").Select
End Sub

Select_Range_B2D4() を実行するとセル B2 とセル D4 が選択されます。
 
VBA とびとびセルを選択
 
他にも色々な選択方法があるので、まとめて並べておきましょう。

Range("A1","C3").Select A1~C3 範囲を選択
Range("B2:C3,D7:E8").Select B2~C3 範囲とD7~E8 範囲を選択
Range("B:B").Select B 列を選択
Range("B:E").Select B 列から E列までを選択
Range(Columns(3), Columns(5)).Select C 列から E 列までを選択
Range("A:A,C:C").Select A 列と C 列を選択
Range("5:5").Select 5 行を選択
Range("3:6").Select 3 行から 7 行を選択
Range(Rows(2), Rows(5)).Select 2 行から 5 行を選択
Range("5:5,8:8").Select 5 行と 8 行を選択
Range("1:3,5:5").Select 1~3 行と5 行を選択
Range("KOBATO").Select KOBATO という名前のセルを選択

Rangeオブジェクトを得るプロパティには、Rangeプロパティの他に Cellsプロパティというものがあって、これは単体セルのみ参照することができるのです。参照方法は

Cells(行,列)

です。たとえばセルC4 を参照したいときは

Cells(4, 3)

というように引数を指定します。慣れないうちは引数の順番が混乱してしまいがちだけど、

Cells(y,x)

というように覚えるのがおすすめですよ。y は縦方向、x は横方向というイメージが描きやすいでしょ? 実際 Cells の引数を変数として記述するときにも、この書き方をしてもいいのです。たとえば、セル C4 を選択するマクロは次のようになります。

'[VBA] セルC4 を選択
Sub Select_Range_C4()
  Cells(4, 3).Select
End Sub

Cellsプロパティを用いると、ワークシートの全てのセルを選択することもできます。

'[VBA] 全てのセルを選択
Sub Select_Range_All()
  Cells.Select
End Sub

Rangeプロパティと Cellsプロパティを組合わせてセル範囲を選択する方法もあります。

'[VBA] A1~C3範囲を選択
Sub Select_Range_A1C3()
  Range(Cells(1, 1), Cells(3, 3)).Select
End Sub

これは Cellsプロパティの引数を変数にしたいときなんかに、けっこう使える記述なのです。たとえば …

'[VBA] 位置を指定して範囲を選択
Sub Select_Range()
  Dim y as Integer
  y = InputBox("行番号を入れてね")
  Range(Cells(y, 1), Cells(y + 2, 3)).Select
End Sub

Select_Range() を実行すると「行番号を入れてね」てメッセージが現れるから、たとえば「3」を入れると、セル A3 からセル C5 までの範囲が選択されます。
 
VBA 入力した番号によって選択位置変更
 
というわけで、今日はそろそろこのへんで。皆さんも、RangeプロパティとCellsプロパティを自在に使いこなして、すぺしゃるなプロシージャを書いてくださいな。また次回お会いしましょう。

 

コメント

  1. あとりえこばと より:

    【AI連載小説】生田目次郎のエクセル奮闘記(10)
    「次郎がVBAに挑戦します!」
     
    ある日、次郎はエクセルの作業において、手動で繰り返し行う処理を自動化したいと考えました。そこで、初めてVBA(Visual Basic for Applications)に挑戦することを決意しました。彼は同僚の京子に相談しました。
    「京子さん、ちょっとVBAっていうのを学びたいと思っていて。手動でやっている作業を自動化したいんです」
    「それは素晴らしい決断ですね。VBAを使えば、エクセルの機能をより効果的に活用できますよ」
    「でも、全くの初心者で何から始めたらいいか分からないんです」
    「まずは基本的なところから始めましょう。VBAではRangeプロパティを使ってセルの範囲を指定したり操作したりします」

    京子はエクセルを開いて、VBAエディタを起動しました。
    「これがVBAエディタです。まずは新しいモジュールを作成しましょう」
    「新しいモジュールって、何をするんですか?」
    「モジュールはVBAのコードを保存する場所です。ここに自分で作成したプログラムを書いていきます」
     
    次郎はモジュールを新しく作成し、京子の指示に従って以下のコードを入力しました。

    Sub 範囲操作のテスト()
        ' A1からB5までのセルを選択する例
        Range("A1:B5").Select
        
        ' 選択した範囲の値をメッセージボックスに表示する例
        MsgBox Selection.Value
    End Sub

    「これで、A1からB5までのセルを選択し、その値をメッセージボックスに表示するプログラムができました」
    「なるほど、これがVBAなんですね」
    「はい、基本的な構文やコマンドを覚えつつ、徐々に応用していくと良いですよ」
     
    次郎は初めてのVBAコードを書いてみて、少しずつ理解が進んでいくことを実感しました。彼はこれからの学びの道のりに期待を抱きながら、VBAの世界へ一歩踏み出しました。