この記事を読むのに必要な時間は約 6 分です。
Excelのセルを扱うCellsプロパティに、変数を組み合わせるやり方です。
単純に、引数に変数を入れれば使えちゃうんですが、注意点があります。
変数によってはエラーになることも・・・。
今回は、ループしてCellsでセルを指定するやり方、どんな時にエラーになるのかなど、注意点もお伝えします。
目次(リンク)
Cellsの使い方
セルを指定するには、Cells(行数, 列数) と書きます。
この場合は暗黙的に、アクティブシート上のセルになります。
他のシートにあるセルを参照したいこともありますよね。
そんな時は、次のようにCellsの左側にシートを書きます。
1 2 3 4 5 6 7 8 |
'セルを指定 Cells(行数, 列数) 'シートとセルを指定 Sheets("Sheet1").Cells(行数, 列数) 'シートとセルを指定2 Sheets(1).Cells(行数, 列数) |
Cellsの引数に変数を使う
整数型の変数i、jを使って、Cells(i , j)に値を入れたいと思います。
もともと文字列の「Cells(」のようなところはダブルクォーテーション「””」で囲み、変数と&で繋ぎます。
iやjは整数型の変数で、文字列のStringではないんですが、自動でStringに変換されるという話はまたの機会に。
1 2 3 4 5 6 |
Dim i, j As Integer i = 2 j = 3 Cells(i, j) = "Cells(" & i & " , " & j & " )" |
これを実行すると・・・
C2セルに値が入りました。
For文でループしてCellsでセルを指定する
変数i、jをFor文でループさせて、各セルに「Cells(i, j)」を入れてみます。
縦方向と横方向、どちらにもループさせるので、For文の中にFor文を入れて二重ループにします。
1 2 3 4 5 6 7 |
Dim i, j As Integer For j = 1 To 10 For i = 1 To 10 Cells(i, j) = "Cells(" & i & " , " & j & " )" Next i Next j |
A1セルから10×10の範囲に値が入りました。
変数がエラーになるのはどんな時?
整数型の変数iをCellsでセルに入れても、勝手に文字列型に変換してくれますし、VBAはある程度上手く処理してくれます。
でもさすがに万能ではなくて、エラーになってしまうことも。
Integerの変数でやってみる
10万行目に値を入れてみたいと思います。
直接Cells(100000, 1)と書いたら良さそうですが、何かの処理で、Cells(i, 1)のiが100,000になったと思ってください。
1 2 3 4 5 |
Dim i As Integer i = 100000 Cells(i, 1) = "100,000行" |
実行すると、当然ながらエラーになります。
エラーの種類はオーバーフロー。
デバッグで見てみると、
1 |
i = 100000 |
でオーバーフローしているようです。
ワザとエラーにするために、整数型の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の変数に変えただけです。
1 2 3 4 5 |
Dim lRow As Long lRow = 100000 Cells(lRow, 1) = "100,000行" |
これを実行してみると・・・
オーバーフローせず、10万行目に値が入りました。
まとめ:Cellsプロパティと変数を組み合わせてセルを指定する方法
Cellsの引数に変数を使い、セルを指定するやり方と注意点を紹介しました。
まとめると、
- 使い方は、Cells(行数, 列数)
- 列方向も整数型の変数で指定出来て、Rangeより使いやすい
- 整数型のIntegerは最小値:-32,768、最大値:32,767、オーバーフローするかも
- 長整数型のLongを使えば大丈夫
Rangeなら、列をA、B、C・・・と表現するので、数値で表現するとき面倒です。
Cellsならそんな悩みはありません。
便利なプロパティなので、ぜひ慣れていってもらえればと思います。
最後までお読みいただき、ありがとうございました。