【VBA Cells】セルの範囲を指定する方法・応用例を解説

  • 2024.12.27
       
【VBA Cells】セルの範囲を指定する方法・応用例を解説

Excelシートで作業をする場合、セルをクリックすればそのまま選択が可能ですが、VBAで同じことをするにはどうすればいいのか分からない!という方もいるのではないでしょうか。
そこで今回は、セルを選択する方法の1つであるCellsについて、詳しく解説していきたいと思います!

Cellsとは?

Cellsとは、セルの指定に使用するプロパティです。行数と列数をそれぞれ指定し、互いの数値が交差する位置にあるセルを選択することができます。

似たような働きをするものにRangeプロパティが存在しますが、この2つは以下のポイントを基準に使い分けることができます。

Cellsプロパティ

  • 単一のセルを選択する場合
  • シート全体を指定する場合
  • 条件により選択するセルが変わる(変数を使用して指定する)場合

Rangeプロパティ

  • 固定位置のセルを選択する場合
  • セルを複数選択する場合
  • 名前を定義したセルを選択する場合

Cellsプロパティは、シート全体を指定する場合を除き、主に単一セルの選択に使用するものです。

また、ループ処理のカウンター数に応じて選択するセルを変えるなど、変数を使って位置を指定する場合の使用に適しています。

Cellsを使うべきかRangeを使うべきか迷った場合は、選択するセルの数と変数の有無で使い分けると良いでしょう。

Rangeプロパティについてはこちらの記事にて詳しく解説しています。

Cellsの使い方は?

続いて、Cellsプロパティの具体的な使い方について見ていきましょう。
Cellsを使用する際は、以下のように記述します。

【基本構文】

Cells(行数, 列数)

例えば、A5セルをCellsで指定する場合は次のようになります。

Cells(5, 1)

また、列の指定にはアルファベットを使用することもできます。

Cells(5, "A")

Selectメソッドで指定したセルを選択する

指定したセルを選択状態にするには、Selectメソッドを使用します。

【サンプルコード】

Sub sampleSelect()

    Cells(3, 2).Select

End Sub

【実行結果】

行が3行目、列が2列目を指定しているので、B3セルが選択されています。

先ほど解説したように、列を直接B列と指定しても同様の結果になります。

Cellsでシート全体を指定する

行と列を指定せずにCellsを使用すると、シート全体を選択することができます。

【サンプルコード】

Sub sampleSelectAll()

  Cells.Select

End Sub

【実行結果】

相対参照でセルを指定する

特定のセルを基準とし、そこから上下または左右へいくつ進むかで位置を指定することを相対参照と言います。

相対参照で位置を指定する場合は、Offsetプロパティを使用します。

【基本構文】

Cells(行数, 列数).Offset(行数, 列数)

Offsetプロパティでは、引数に負の値を指定することもできます。通常は右か下方向へと順に進むのに対し、負の値では左か上方向へと戻る形になります。

【サンプルコード】

Sub sampleOffset()

    Cells(5, 5).Offset(-2, -3).Select

End Sub

【実行結果】

先ほどと同じようにB3セルが選択されていますが、このサンプルコードではE5セルを基準とし、そこからOffsetプロパティを使って相対参照することで選択しています。

指定の値がどちらも負の数となっているので、進行方向は左上へと戻る形で移動しています。

変数を利用してセルを指定する

Cellsは基本的に数値で位置を指定するため、ループ文などの値が変動する処理と組み合わせて使用するのに向いています。

以下のサンプルコードで、実際の様子を見てみましょう。

【サンプルコード】

Sub sampleRoop()

    Dim rows As Integer '行
    Dim columns As Integer '列
    
    For columns = 1 To 5
        For rows = 1 To 5
            Cells(rows, columns).Interior.ColorIndex = columns * 10
        Next rows
    Next columns

End Sub

【実行結果】

このサンプルコードでは、ループ文のカウンター変数を使用してセルの位置を指定し、背景色を塗り替えています。

今回はA1セルからE5セルまで(行と列をそれぞれ5つ分)塗り潰すために、どちらのループ文も開始数値を1に、終了数値を5に指定しています。処理したい範囲に応じて、それぞれの数値を置き換えてください。

CellsをRangeの引数に使用する

Rangeプロパティの引数には、Cellsを指定することもできます。

Rangeは基本的に固定範囲を指定するのに向いているプロパティですが、Cellsと組み合わせることで範囲を自由に変動させることもできるようになります。

Cellsを使用して指定する場合の基本構文は、次の通りです。

【基本構文】

Range(Cells1, Cells2)

例えば、A1セルからE5セルまでを選択したい時は、以下のように記述します。

【サンプルコード】

Sub sampleRangeWithCells()

    Range(Cells(1, 1), Cells(5, 5)).Select

End Sub

【実行結果】

ただし、次のようにCellsを1つだけ引数に渡そうとするとエラーが発生するので、注意が必要です。

Range(Cells(1, 1)).Select

戻り値のRangeオブジェクトを利用する

Cellsは、戻り値にRangeオブジェクトを返します。そのため、Cellsで指定したセルに対して、Rangeオブジェクトに内包されるその他のプロパティやメソッドを使用することができます。

いくつかの代表的なプロパティやメソッドの使い方について、詳しく見ていきましょう。

Valueプロパティで値を取得、変更する

指定したセルの値を取得したり、別の値に変更したい場合には、Valueプロパティを使用します。

サンプルコードで実際の動きを確認してみましょう。

【サンプルコード】

Sub sampleValue()

    ' セルの値を取得する場合
    MsgBox Cells(1, 1).Value

    ' セルの値を変更する場合
    Cells(2, 1).Value = "Value2"

End Sub

【実行結果】

Valueプロパティを使用して、値の取得と変更を行うことができました。
このサンプルコードではセルに文字列を代入していますが、同様のプロパティを使って数式を入れることもできます。

ただし、値の取得に関しては数式でなく計算結果が返されてしまうため、数式そのものを取得したい場合にはFormulaプロパティを使用しましょう。

Valueと同じように、数式の代入もこのプロパティを使って行うことができます。

Valueプロパティの使い方については、こちらで詳しく解説しています。

Copyメソッドでセルをコピーする

セルのコピーを行いたい場合は、RangeオブジェクトのCopyメソッドを使用しましょう。
基本構文は以下の通りです。

【基本構文】

Cells("コピー元のセル").Copy Destination:=Cells("コピー先のセル")

「Destination:=」の記述は省略可能です。その場合は、Copyの後にセル範囲のみ記述します。
サンプルコードで実際の動きを見てみましょう。

【サンプルコード】

Sub sampleCopy()

    Cells(1, 1).Copy Cells(3, 3)

End Sub

【実行結果】

Copyメソッドでセルをコピーした場合、書式や数式なども全て同じになります。
もし、値のみをコピーするなどの細かい条件を付けたい場合は、以下のようにPasteSpecialメソッドと組み合わせて使用をします。

【サンプルコード】

Sub sampleCopy2()

 Cells(1, 1).Copy
 Cells(3, 3).PasteSpecial Paste:=xlPasteValues

End Sub

【実行結果】

Copyメソッドは、コピー先のセルを指定せずに使用すると、一旦クリップボードに内容がコピーされます。その内容を、PasteSpecialメソッドを使用してセルに貼り付けています。

今回はオプションで、セルの値のみをコピーするよう指定しました。他にも、様々な条件を指定することができます。

Clearメソッドでセルの内容をクリアする

Clearメソッドを使用して、指定したセルの内容をクリアすることができます。

以下のサンプルコードで確認してみましょう。

【削除前の状態】

【サンプルコード】

Sub sampleClear()

  Cells(2, 2).Clear

End Sub

【削除後の結果】

Clearメソッドは、値や数式だけでなく書式も全てクリアされるので、入力データのみ削除したい場合にはClearContentsを使用しましょう。

【サンプルコード】

Sub sampleClear()

  Cells(2, 2).ClearContents

End Sub

【実行結果】

まとめ

今回は、Cellsの使い方について解説をしました。

Excelで必須となるセル操作をVBAで自由自在にこなせるようになれば、作業効率は大幅に上がります。

ぜひ、この記事を参考にしながら、実践でも活用してみてくださいね!

関連記事

VBAの勉強方法は?

書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。

ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。

プログラミングスクールならテックマニアがおすすめ!

ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。

<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~

このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。

     

Otherカテゴリの最新記事