本ページには広告が含まれています。

ExcelマクロVBA RangeとCells(初心者向け11)

Excel マクロ VBA RangeとCells(初心者向け11)

よろしくお願いしますm(_ _)m

今回は勉強するのはどんな内容ですか?

くるみこ
くるみこ

はい。今回はセルの操作に関することを勉強しましょう!
RangeとCellsについて、しっかり覚えましょう。それではよろしくお願いします(^^)

前回のおさらいはこちらの記事です(^^)/ 下のカードをクリックすれば開きます

くるみこ
くるみこ

前回記事でわかったこと
・変数の使い方の基本がわかりました
・変数の種類や適用範囲について理解出来ました
・変数名の付け方の制限と命名規則を知ることが出来ました

【この記事でわかること】
RangeとCellsの使い方がわかるようになります
・Rangeオブジェクトの使い方がわかります

スポンサーリンク

RangeプロパティとCellsプロパティ

セルはRangeオブジェクトで表されます。Rangeオブジェクトは、次の2つのプロパティで特定します

・Rangeプロパティ
・Cellsプロパティ

Cellsオブジェクトというのはありません。Cellsプロパティは、シートの全セル範囲のRangeオブジェクトです。行列の位置を指定することで単一セル指定になります

行列の位置を指定しない場合「Cells→全セル範囲指定」 これは覚えておきましょう

セルまたはセル範囲を参照する

セルまたはセル範囲を参照する方法について「Rangeプロパティ」「Cellsプロパティ」を比較してみましょう(ここでは行と列の指定方法は省略しています)

A1形式の参照
Rangeプロパティ
指定セル(範囲)R1C1参照形式
Cellsプロパティ
Range(“A1”)セル A1Cells(1,1)
Range(“B1”)セル B1Cells(1,2)
Range(“C2”)セル C2Cells(2,3)
Range(“A1:B5”)セル A1 から B5 までRange(Cells(1,1),Cells(5,2))

Rangeプロパティの場合はA1形式で表示します。セルB1を「Range(“B1”)」とアドレスを指定します
Cellsプロパティの場合は「Cells(1,2)」のように行番号と列番号を指定します。指定する順序は「Cells(行番号,列番号)」です

・範囲で指定する場合(4行目)はA1形式の場合は「Range(“A1:B5”)」です
Cellsプロパティで範囲を指定する場合は、「Range(Cells(1,1),Cells(5,2))」のようにアドレスの部分だけCellsで指定します

セルに入力してみましょう

前に「マクロの記録」で自動記録したものを使っていきます

「マクロの記録」のA1形式をCellsに書き換えると

・右側が「マクロの記録」のいらない部分を編集したA1形式のコードです
左側がCellsを使ってA1形式から書き換えた見本です
・「①Rangeオブジェクトを使った方法」「②Loop処理を使った方法」と「③変数を使った方法」の3種類を使っています

'Cellsを使って編集したコード
Sub Macro1_改2()
'⓵Rngeオブジェクトを使った方法
    Dim rn As Range
    Set rn = Range("A1:E1")
    rn(1) = "ID"
    rn(2) = "名称"
    rn(3) = "DATE"
    rn(4) = "項目1"
    rn(5) = "項目2"
    
'⓶変数を使ってLoop処理する方法
    Dim i As Long
    For i = 2 To 11
        Cells(i, 1) = i - 1
    Next i
    
'⓷行指定に変数を使った方法
    i = 2 '変数を初期化します
    Cells(i + 1, 2) = "aaa"
    Cells(i + 1, 2) = "bbb"
    Cells(i + 1, 2) = "abc"
    Cells(i + 1, 2) = "aab"
    Cells(i + 1, 2) = "cfd"
    Cells(i + 1, 2) = "sxb"
    Cells(i + 1, 2) = "cba"
    Cells(i + 1, 2) = "frb"
    Cells(i + 1, 2) = "eec"
    Cells(i + 1, 2) = "aad"
    
End Sub

'いらない部分を編集したコード
Sub Macro1_改()
    Range("A1") = "ID"   'セルに入力
    Range("B1") = "名称" 'セル漢字入力
    Range("C1") = "DATE"
    Range("D1") = "項目1"
    Range("E1") = "項目2"
    Range("A2") = "1"
    Range("A3") = "2"
    Range("A4") = "3"
    Range("A5") = "4"
    Range("A6") = "5"
    Range("A7") = "6"
    Range("A8") = "7"
    Range("A9") = "8"
    Range("A10") = "9"
    Range("A11") = "10"
    Range("B2") = "aaa"
    Range("B3") = "bbb"
    Range("B4") = "abc"
    Range("B5") = "aab"
    Range("B6") = "cfd"
    Range("B7") = "sxb"
    Range("B8") = "cba"
    Range("B9") = "frb"
    Range("B10") = "eec"
    Range("B11") = "aad"
    
End Sub

①最初のRangeオブジェクトを使った方法は、セル範囲をオブジェクトにしてデータを入力しています。Rangeオブジェクトは1~範囲分の配列ですので、その番号を指定して入力します

②次の例では、変数「i」を宣言しています。For i = 2 To 11 ~ Next のループ処理を使って、A2からA11にデータを入力しています。「行番号」=「i」と入力するのは1~10までの連続したデータなので「行番号i-1」で入力しています

③最後は、先ほど使った変数「i」を「i = 2」と初期化して行番号の指定に利用しています。「i + 1」とすることで1行ずらしています。入力データは規則性が無いのでここではそのままとしています

RangeとCellsの使い分けについて

結論から言うと、変数を使う場合はCells、使わない場合はRangeということです

変数を使わない場合にCellsを使うことは問題ありません。しかし、次の事例のようなRangeに変数を使う書き方はおすすめしません

Range(“A” & i)   

動作しないことはありません。この事例では「i」が変数です。(行の数字の部分を変数にしています)ループ処理でセルにデータを連続入力する場合、行数に変数を使う場合はまだよいでしょう。しかし、列数に変数を使う場合は数字をアルファベットに変換しなければ使えません
Cellsであれば「行」「列」のどちらでも対応が可能です

もう一度言います、
変数を使う場合はCells
変数を使わないセル指定に使う場合はRange
という使い分けを覚えておいてください(^^)/

セルの範囲指定に変数を使う場合

セルの範囲指定に変数を使う場合には、RangeとCellsを組み合わせて使います

(例)Range(Cells(1,1),Cells(i,j))  = A1~変数指定の範囲

これもしっかり覚えておきましょう

セル範囲に同じデータを入力する場合

・A1~C3セル(9つのセル)のすべてに”VBA”と入れる場合
 A1形式 : Range(“A1:C3″).Value=”VBA”
 Cells形式: Range(Cells(1,1),Cells(3,3)).Value=”VBA”

RangeとCellsは奥が深い

・「Range」「Cells」共にセルに対して何らかの操作をする場合に使用します

・どちらも多くのプロパティやメソッドが用意されています
プロパティやメソッドを調べる方法で覚えておいて欲しいのは「マクロの記録」を使う方法です。実際に調べたいセル操作を「マクロの記録」で自動記録させれば良いのです。記録されたマクロから必要な記述を探し出してコピペして使ったり。その記述を改めてHELPやWebで調べてみるのも良いでしょう
・こんな感じでもっと「マクロの記録」を有効活用しましょう

まとめ(おわりに)

くるみこ
くるみこ

今回はここまでで終了です!
RangeとCellsの使い分けは理解できましたか?

はい! 変数を使う場合はCellsを使うでした!
でも、Rangeオブジェクトなどの部分はまだまだよくわかっていないと思います(^^ゞ

くるみこ
くるみこ

いつも言いますが、最初から完璧に全部わかることは100%無いと思ってください。継続してやっていくうちに、自然と身についていくから心配しなくて大丈夫ですよ(^^)
では、まだまだ続きがあるのでご期待くださいね(^^)/

まとめと感想など

・RangeプロパティとCellsプロパティについて理解できました
・セルまたはセル範囲を参照・入力する方法がわかりました
・RangeとCellsの使い分けは、変数を使う場合はCellsを使います
・セル範囲指定の場合、RangeとCellsを組み合わせて使います

マクロ(VBA)を実行する際は必ずバックアップを取ってから行ってください
・マクロ(VBA)は実行後にファイルを保存すると元に戻すことはできません!
・実行後にファイルを保存せず終了すれば、実行前に戻すことができます!

★★★ ランキング参加中! クリックしてね(^^)/ ★★★

今後の記事について

今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
当面は「初心者向けマクロ」の記事を継続して書いていきます

【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう現在検討中です
・その他雑記的に「小ネタなどいろいろ」・・・・・
・今後の記事にご期待ください(^^)/

スポンサーリンク
スポンサーリンク

過去記事のサンプルファイルをダウンロードできます

今回の記事のサンプルはありません!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください