この記事を読むのに必要な時間は約 6 分です。

 

Excelのセルを扱うCellsプロパティに、変数を組み合わせるやり方です。

 

単純に、引数に変数を入れれば使えちゃうんですが、注意点があります。
変数によってはエラーになることも・・・。

 

今回は、ループしてCellsでセルを指定するやり方、どんな時にエラーになるのかなど、注意点もお伝えします。

Cellsの使い方

セルを指定するには、Cells(行数, 列数) と書きます。
この場合は暗黙的に、アクティブシート上のセルになります。

 

他のシートにあるセルを参照したいこともありますよね。
そんな時は、次のようにCellsの左側にシートを書きます。

Cellsの引数に変数を使う

整数型の変数i、jを使って、Cells(i , j)に値を入れたいと思います。

 

もともと文字列の「Cells(」のようなところはダブルクォーテーション「””」で囲み、変数と&で繋ぎます。

 

iやjは整数型の変数で、文字列のStringではないんですが、自動でStringに変換されるという話はまたの機会に。

 

これを実行すると・・・

VBA_Cells_変数と組み合わせしてセルの値を操作

 

C2セルに値が入りました。

VBA_Cells_変数と組み合わせしてセルの値を操作

For文でループしてCellsでセルを指定する

変数i、jをFor文でループさせて、各セルに「Cells(i, j)」を入れてみます。

 

縦方向と横方向、どちらにもループさせるので、For文の中にFor文を入れて二重ループにします。

 

A1セルから10×10の範囲に値が入りました。

VBA_Cells_変数と組み合わせしてセルの値を操作

変数がエラーになるのはどんな時?

整数型の変数iをCellsでセルに入れても、勝手に文字列型に変換してくれますし、VBAはある程度上手く処理してくれます。

 

でもさすがに万能ではなくて、エラーになってしまうことも。

Integerの変数でやってみる

10万行目に値を入れてみたいと思います。

 

直接Cells(100000, 1)と書いたら良さそうですが、何かの処理で、Cells(i, 1)のiが100,000になったと思ってください。

 

実行すると、当然ながらエラーになります。

 

エラーの種類はオーバーフロー。

VBA_Cells_変数と組み合わせしてセルの値を操作

 

デバッグで見てみると、

でオーバーフローしているようです。

VBA_Cells_変数と組み合わせしてセルの値を操作

ワザとエラーにするために、整数型のiに100000なんて数値を入れようとしました。

 

VBAの場合、整数型Integerは、最小値:-32,768、最大値:32,767。

 

もっと大きな値も入る言語もあるんですが、VBAのIntegerはこれだけってことです。

 

Excelの行数は、.xlsのものなら65,536行目まで、xlsxなら1,048,576行目まで存在します。

 

なので、大きな行数を扱う可能性があれば、大きな数を扱える変数を使わないといけません。

長整数型であるLongの変数なら桁あふれしない

長整数型のLong、どれだけの数を扱えるんでしょうか。

 

もちろん値は整数で、
最小値:-2,147,483,648
最大値:2,147,483,647

 

これを超える金額などを扱うなら、また別の型の変数にすべきですが、通常はLongなら十分です。

 

先ほどIntegerで定義したところをLongの変数に変えただけです。

 

これを実行してみると・・・
オーバーフローせず、10万行目に値が入りました。

VBA_Cells_変数と組み合わせしてセルの値を操作

まとめ:Cellsプロパティと変数を組み合わせてセルを指定する方法

Cellsの引数に変数を使い、セルを指定するやり方と注意点を紹介しました。

 

まとめると、

  • 使い方は、Cells(行数, 列数)
  • 列方向も整数型の変数で指定出来て、Rangeより使いやすい
  • 整数型のIntegerは最小値:-32,768、最大値:32,767、オーバーフローするかも
  • 長整数型のLongを使えば大丈夫

 

Rangeなら、列をA、B、C・・・と表現するので、数値で表現するとき面倒です。

 

Cellsならそんな悩みはありません。
便利なプロパティなので、ぜひ慣れていってもらえればと思います。

 

最後までお読みいただき、ありがとうございました。