VBAのCellsで範囲指定する方法

VBAのCellsで範囲指定する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

ExcelのVBAでセルを操作する場面では、単一セルの指定だけではなく、複数のセルをまとめた範囲を効率的に処理したい場面が数多くあります。処理対象のセルが実行時の条件によって変わる場合、固定のセル番地を直接書き込む方法では対応できず、行・列を数値で管理できるCellsプロパティが有効です。

特にCellsプロパティを用いた範囲指定は、数値によって、場所を特定できるため、状況に応じて対象を変える動的な処理に適しています。本記事では、Rangeプロパティとの組み合わせやResizeプロパティ、変数を使った動的な範囲指定まで、Cellsでセル範囲を自在に定義する具体的な手法を解説します。


VBAのCellsで範囲指定をする方法

VBAのCellsで範囲指定をする方法

Cellsによる範囲指定の代表的な方法は、Rangeプロパティとの組み合わせと、Resizeプロパティによる拡張の2つです。

Rangeプロパティと組み合わせて指定する

ExcelのVBAで特定の範囲を定義する際、Rangeプロパティの中に2つのCellsプロパティを記述する手法が広く用いられます。この構成により、開始セルと終了セルを座標のように指定して、その間にある全セルをひとまとめに扱う制御を実現する仕組みです。

項目 内容
指定の基本形 Range(Cells(開始行, 開始列), Cells(終了行, 終了列)) という構成です
主なメリット 行や列を変数で管理できるため、ループ処理と組み合わせて範囲を動かせる点です
活用のコツ シート名を明示して、操作対象のシートを確定させることが推奨されます

この記述方法は、固定のセル番地ではなく実行時の状況に合わせて対象範囲を変更したい場合に重宝します。セルの位置を数値で直接指定できるため、複雑な計算結果に基づいた範囲選択も容易です。

ここでは、Withステートメントでシート名を指定し、Cellsの引数に開始・終了位置を渡す具体的なコード例を示します。

Sub SetRangeByCells()
    With Worksheets("Sheet1")
        .Range(.Cells(2, 1), .Cells(5, 3)).Value = 100
    End With
End Sub

このコードは、2行1列目から5行3列目までの範囲へ一括で値を代入する例です。値や書式をまとめて書き換える処理では、Withで指定したシート名と行・列の範囲が意図した対象と一致しているかを事前に確認してから実行します。

なお、Rangeプロパティは連続した1つの範囲だけではなく、複数の範囲をまとめて参照する用途にも対応しています。Microsoft公式のリファレンスにおける説明は、次の通りです。

Range プロパティを使用して複数の範囲を参照するには、次の例に示すように、各範囲をコンマで区切ります。

出典:Microsoft Learn

つまり、Rangeプロパティは単一の連続範囲だけではなく、コンマ区切りで複数範囲を同時に指定する用途にも活用できます。

Resizeプロパティで指定範囲を拡張する

起点となる1つのセルから、特定の行数や列数分だけ範囲を広げたい場合にはResizeプロパティが有効です。Cellsで指定したセルを基準点として、そこから縦横にサイズを再定義する動作を行います。

具体的な指定方法は、次の通りです。

  • 基準セルをCells(行, 列)で指定し、その直後にResizeを繋げる形です
  • 第1引数に行の数、第2引数に列の数を指定して範囲の大きさを決定します
  • 起点となるセル自体も範囲の1セル目として数えるのがルールです

例えば1行3列の範囲を取得したい場合、基準セルに対してResize(1, 3)と指定することで目的のエリアを特定できます。あらかじめ範囲の大きさが決まっているデータを扱う際に、直感的な指定を可能にする仕組みです。

Resizeを使った具体的なコードは、以下の通りです。

Sub ExpandRangeByResize()
    With Worksheets("Sheet1")
        .Cells(2, 1).Resize(1, 3).Value = 10
    End With
End Sub

基準セル(2行1列目)を含めて横3列分、つまりA2:C2の範囲へ同じ値を設定しています。同一シート内で操作することをWithで明示しているため、意図しないシートを書き換える心配もありません。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

VBAのCellsとRangeの違い

VBAのCellsとRangeの違い

VBAでセルを操作する際、CellsプロパティとRangeプロパティを使い分ける必要があります。 それぞれの特徴を把握すると、効率的なプログラムの作成に役立ちます。

CellsプロパティとRangeプロパティの主な違いは、指定方法や適した場面も含めて、以下の表の通りです。

項目 Cellsプロパティ Rangeプロパティ
指定方法 行番号と列番号(数値) セル番地("A1"など)
適した場面 ループ処理での連続操作 特定の固定セルや範囲の操作
可読性 数値のため直感的ではない 番地表記のため理解しやすい

ただし、これらは典型的な使い分けの傾向であり、固定の役割分担ではありません。Rangeの引数へCellsを渡せば変数を使った動的な範囲指定もでき、逆にCellsだけで固定位置のセルを直接指定することも可能です。

単一セルを指定する際の使い分け

特定の1マスを指定する場合、対象が固定か変動するかに応じて、RangeとCellsの2つのプロパティを使い分けます。

固定された特定の場所を指し示す際は、Rangeプロパティの利用が適しています。A1やB2といったExcelの番地をそのまま記述するため、コードの読みやすさが向上する仕組みです。

Rangeを使うかCellsを使うかの判断基準は、セルの位置が固定されているか計算によって、変わるかという点にあり、具体的には以下の通りです。

  • 固定位置のセル操作にはRangeを使用
  • 変数を用いた動的な指定にはCellsを活用
  • 行番号や列番号を計算で求める場合はCellsが最適

ただし、Rangeの引数にCellsを渡せば固定位置と変数を組み合わせた動的な指定も行えるため、使い分けは状況に応じて柔軟に選択します。

セル範囲を一括で処理する際のメリット

複数のセルをまとめて操作する場面では、Rangeオブジェクトへ範囲として値や書式を一括で代入・取得できる点が大きな利点です。

広い範囲に対して書式設定や値の代入を行う場合、Rangeオブジェクトへ範囲を渡せば1行の記述で完結します。Cellsは範囲の端点を数値で動的に作る指定方法で、Range(.Cells(開始行, 開始列), .Cells(終了行, 終了列))のようにRangeへ渡せば同じく一括処理が可能です。

処理の対象が視覚的に分かりやすくなるうえ、範囲全体を一度にまとめて管理できるため、保守性の高いコードという点も見逃せないポイントです。

範囲の値をまとめて取得・設定してワークシートとのやり取りの回数を減らせる場合には、処理速度の向上も期待できます。ただし、速度はRangeやCellsという記法そのものではなく、一括で読み書きする範囲の大きさとセルへのアクセス回数に依存します。

次の表は、セル範囲を効率的に扱うメリットを整理したものです。

メリット 内容の説明
記述の簡潔化 広い範囲を一つの塊として指定可能
メンテナンス性 対象範囲の変更が番地修正のみで完了
処理の高速化 ワークシートとのやり取りの回数を減らせる場合に実行時間を短縮

これらの利点を踏まえると、単一セルの操作にはRange、まとまった範囲の一括処理にはRangeとCellsの組み合わせが適しています。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

VBAのCellsで変数を使って範囲指定する

VBAのCellsで変数を使って範囲指定する

Cellsの引数に数値を直接入力する代わりに変数を渡すと、行番号や列番号を後から書き換えるだけで対象範囲を動的に変更できます。代表的な方法は、次の2つです。

行番号や列番号を変数に置き換える

セルを指定する際に、数値を直接入力する代わりに、変数を利用する方法を解説します。開始行・開始列・終了行・終了列をそれぞれ変数に格納してCellsの引数へ渡す構成にすると、対象範囲を動的に変更できます。

変数を使ってCellsの引数を組み立てる際の基本的な手順は、以下の通りです。

  • 開始位置と終了位置をそれぞれ変数へ格納する
  • 変数をCells(行, 列)の引数に渡してRangeと組み合わせる
  • 変数の値を変更するだけで対象範囲全体が動く

あらかじめ定義した変数に値を代入しておくことで、後続の処理を一括で変更する構成も容易です。特定の条件に応じて対象範囲を切り替える運用に適しています。

変数を使った範囲指定の具体的なコードは、以下の通りです。

Sub SetRangeByVariable()
    Dim startRow As Long, startCol As Long
    Dim endRow As Long, endCol As Long
    startRow = 2
    startCol = 1
    endRow = 5
    endCol = 3
    With Worksheets("Sheet1")
        .Range(.Cells(startRow, startCol), .Cells(endRow, endCol)).Value = "変数指定"
    End With
End Sub

開始行・開始列・終了行・終了列をそれぞれ変数に代入し、Range(Cells(...), Cells(...))の引数に渡しています。変数の値を変えるだけで、コードの構造を変更せずに対象範囲全体を切り替えられます。

単一セルだけを対象にしたい場合は、行番号と列番号の変数をCellsへ直接渡す指定方法も可能です。Cellsは行・列番号を変数へ直接渡しやすいという利点があり、Rangeと組み合わせれば変数を使った動的な範囲指定も行えます。

Sub SetCellByVariable()
    Dim r As Long, c As Long
    r = 3
    c = 2
    Worksheets("Sheet1").Cells(r, c).Value = "変数指定"
End Sub

変数rとcにそれぞれ行番号と列番号を代入し、Cellsの引数へ渡す形です。単一セルだけを切り替えたい処理では、このシンプルな指定が役立ちます。

ループ処理の中で範囲を動的に動かす

繰り返し処理の中で変数を用いると、大量のセルを順番に処理する動作を自動化できます。ループのたびに変数の数値が加算される仕組みを利用して、1行ずつ下のセルへ移動するプログラムを構築する流れです。

手作業でのコピーや転記作業を排除できるため、ミスを減らす効果も期待でき、効率的なデータ処理に欠かせない手法だといえます。

具体的な手順は、以下の通りです。

  1. For文などのループ構造を用意する
  2. カウンタ変数をCellsの引数に設定する
  3. ループごとに変数を変化させる

データの件数に合わせて処理範囲を自動で調整することもできます。実務における定型業務の削減に大きく寄与します。

ループ処理を使った具体的なコードは、以下の通りです。

Sub SetRangeByLoop()
    Dim i As Long
    With Worksheets("Sheet1")
        For i = 2 To 10
            .Cells(i, 1).Value = i
        Next i
    End With
End Sub

変数iを2から10まで1ずつ増やしながら、Cellsの行番号に渡しています。ループ処理のたびに対象セルが1行ずつ下へ移動し、複数行へまとめて値を設定できます。

活用項目 内容とメリット
行の変数化 縦方向の移動を制御し、リスト処理を容易にする
列の変数化 横方向の移動を制御し、項目ごとの入力を自動化する
ループ処理の併用 連続したセル範囲を高速かつ正確に操作する

行・列それぞれの変数化とループ処理を組み合わせることで、大量のセルを対象とした処理を短いコードで実現できる点が特徴です。

VBAのCellsによる範囲指定に関するよくある質問

Cellsで列をアルファベットで指定できますか?

Cellsプロパティは行番号と列番号を数値で指定する仕組みのため、「"A"」や「"B"」といった列記号を直接渡すことはできません。列記号のまま指定したい場合はRangeプロパティでRange("A1")のように記述するか、列記号を数値に変換してからCellsへ渡します。

用途に応じてCellsとRangeを使い分けることで、列指定の誤りによる実行時エラーを避けるうえで有効です。

別のワークシートの範囲をCellsで指定する方法は?

アクティブではないシートの複数セルを操作する場合は、対象のシートを明示したうえでRangeとCellsを組み合わせます。Worksheets("Sheet2").Range(.Cells(2, 1), .Cells(5, 3))のようにドットでつなげて記述し、操作対象を確定させます。

このルールを守ることで、意図しないシートへの誤った書き込みを防ぎ、複数シートを扱う処理でも安全な運用が可能です。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する