【VBA入門】Cellsでセルを指定(変数などRangeとの使い分けも解説)

こんにちは! 侍エンジニア ライターの本多です。

例えば、こんな指示を受けたとイメージしてください。「開始セルから終了セルの中で、特定の条件を満たすセルを色付けせよ!」

営業マンの売上表にて、目標未達のセルを色付けするといったケースです。こんなときに活躍するがVBAの「Cells」なのです。

ある範囲内においてセルを順番に選択する、これがCellsの大きな特徴です。その他Cellsにはさまざまな特徴があります。この記事では、「Cells」と「Cellsの使い方」といった基本的な内容から、

  • 変数でセルを指定する方法
  • Rangeを使ってセルを指定する方法
  • Rangeの引数にCellsを使う方法
  • 戻り値のRangeオブジェクトを使う方法


という応用的な内容まで解説します。

Cellsとは

Cellsとは、セルを個別に選択していくプロパティです。具体的には数値で行方向に何セル、縦方向に何セルという指定をします。似たような働きをするRangeもあります。

Cellsは範囲を指定するというより、どちらかというと単独のセルをピックアップして操作する、といったイメージです。それだけでなく、シート全体や行全体、列全体といった指定も可能です。

Rangeとの使い分け

Cellsには以下の特徴があります。

  • 変数で位置を指定できる。
  • シート全体を指定できる。


一方、Rangeには以下の特徴があります。

  • 範囲につけた「名前」で呼び出せる。
  • 複数の範囲が指定できる。
  • 開始セルと終了セルを指定できる。


範囲が変動の場合は、Cellsが適しています。逆に範囲が固定の場合は、Rangeが適しています。

シート全部、または行・列をまるごと選択する場合はCellsでしかできません。一方、複数の範囲を選択するのはRangeにしかできません。

Rangeの使い方については、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】Rangeでセルの範囲指定(Cellsとの使い分けも解説)
更新日 : 2019年5月27日

Cellsの使い方

ここでは、Cellsの使い方を具体的に見ていきましょう。

Selectでセルを指定する方法

Cellsは、行と列をインデックスで指定します。

[書式]

C2を選択してみましょう。

[使用例]

[実行結果]

Cells01

一番左上のセルを始点として、下へ2つ、右へ3つ進むという指示がCells(2, 3)と考えるとわかりやすいでしょう。C2という指定をしたいのにCells(2, 3)というのは分かりづらいですよね。もちろん「そのまま」指定することも可能です。

Cells(2,”C”).Selectとすることもできます。C2なのに(2,”C”)と、指定する順番が逆になるので注意してくださいね。

シート全体を指定する方法

Cellsで行や列を指定しなければ、全セルを指定することになります。

[実行結果]

Cells02

選択だけでは面白くないので、これを応用して全セルのフォントをMS Pゴシックに設定してみましょう。

まずはMS Pゴシック以外のフォントで文字を表示させました。

Cells03

そして次のコードを実行します。

[実行結果]

Cells04

全てのセルがMS Pゴシックに変わったのが分かります。

Offsetで特定のセルから相対指定でセルを指定する方法

あるセルを基準として、そこから行方向へや列方向へいくつという指定もできます。

[書式]

[使い方]

[実行結果]

Cells05

B2から下へ1セル、右へ2セル進んだ結果、D3へ進みました。

では上や左へ進めるにはどうすればよいでしょうか?実はOffsetは負の値を指定することも可能です。行方向は正の値で右、負の値で左に進みます。列方向は正の値で下、負の値で上に進みます。

変数でセルを指定する方法

冒頭で述べたとおり、Cellsの大きな特徴は変数でセルを指定できることです。列インデックスと行インデックスで位置を指定、と聞いて鋭い方は気づかれたかもしれませんね。

Cellsのかっこの中に、そのまま変数を入れることができるのです!

行カウンタをi、列カウンタをjとしてループ文を組んでみましょう。セルの中に(行カウンタ, 列カウンタ)という文字列を仕込んでみます。

文字を入れるには、「Cells(行, 列).Value = 文字列」と記述します。

[実行結果]

Cells06

iとjは普通の変数(VBA以外の言語における変数と変わらないという意味で)としてプログラミングすることができます。iとjの両方とも1から5と固定しましたが、これらを算出するコードを作りそこから取得するといったことも可能です。

RangeとCellsを使ってセルを指定する方法

RangeとCellsの合わせ技でセルを指定してみましょう。Cellsは一番左上のセルを始点として行列を指定します。ですが、毎回そうではなく「フォームの決まった帳票の明細部分のみ範囲指定して処理をしたい」ということもあるでしょう。

そんな場合、一番左上から数えて何行何列で・・・・とやってしまうと、かなり大変です。決まった範囲を決めてしまい、そこからCellsにてセルを指定することも可能です。

[実行結果]

Cells07

分かりやすくするために、rngで定義した範囲を赤にしています。どこが選択されたのか注目してください。

本来ならCells(2, 2)によりB2のはずですが、C3が選択されています。B2からD6が範囲なので、B2を始点として行列ともに2ずつ動いてC3が選択されたというわけです。このように、Rangeとの合わせ技でCellsもさらに拡張できます。

Rangeは以下の記事が参考になりますので、あわせて学習してみてください。

【VBA入門】Rangeでセルの範囲指定(Cellsとの使い分けも解説)
更新日 : 2019年5月27日

Rangeの引数にCellsを使う方法

Rangeプロパティの引数にCellsプロパティを指定することで、セルの範囲を指定することが可能です。

[書式] Cells1からCells2の範囲を指定します。

[使用例] [実行結果]

Cells08

戻り値のRangeオブジェクトを使う方法

CellsプロパティはRangeオブジェクトを返します。返されたRangeオブジェクトを使ってValueCopyClearなどのプロパティやメソッドを使うことができます。

Valueで値を取得、変更する方法

RangeオブジェクトからValueプロパティを呼び出すことで、セルの値を取得もしくは変更することができます。

サンプルコードで確認しましょう。

[実行結果]

range09

Copyでセルをコピーする方法

RangeオブジェクトからCopyメソッドを呼び出すことで、セルをコピーすることができます。

サンプルコードで確認しましょう。

[実行結果]

Copy02

セルのコピーについては、こちらのサイトで詳しく解説していますので、ぜひ参考にしてください。

VBAでセル・シート・ファイルをコピー(値、書式のみも解説)
更新日 : 2019年4月21日

Clearでセルをクリアする方法

Clearメソッドで指定した範囲をクリアすることができます。以下のような状態をクリアします。

range10

[実行結果]

range11

RangeオブジェクトのClearメソッドの使い方については、こちらのサイトで詳しく解説しています。ぜひ参考にしてください。

【VBA入門】Rangeでセルの範囲指定(Cellsとの使い分けも解説)
更新日 : 2019年5月27日

まとめ

本記事ではCellsについて解説しました。Cellsはセルを選択するときに変数を利用できます。さらにRangeと合わせて使うともっと拡張できることがお分かりいただけたでしょうか。

ご自身で勉強を深めるとともに、Rangeの参考記事と合わせていろいろ試してみてくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

本多 農

本多 農

関西在住のITエンジニアです。普通の会社に勤務しながら、侍エンジニアのインストラクター、ライターとして活動しています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説