エクセルVBAでオブジェクトの操作を実施する(For文の使い方)

2025/09/06

VBA プログラミング

 前回の記事ではエクセルVBAを使ってHello Worldを記述しました。今回の記事ではもう少し実用的なオブジェクト(セルやシートなどの操作の対象)の操作について勉強します。

↓前回の記事

まずはVBAに必要な概念を理解する

まず初めにセルに値を入れてみたいと思います。セルに値を入れる前に何個かVBAで使う概念を紹介していきます。

オブジェクト

まず初めにVBAにはオブジェクトという概念があります。オブジェクトは一言でいうと操作したい対象のことです。

例えばエクセルにはブック、シート、セルなどのオブジェクトがあります。
今回はセルを操作したいため、オブジェクトとしてはセルを選択します。

プロパティ

続いてプロパティです。プロパティは一言でいうとオブジェクトの持つ情報(属性)のことを言います。オブジェクトの持つプロパティを知りたい場合は下記のように記述します。

オブジェクト.プロパティ

例えばですが、車をVBAが持つオブジェクトだとすると、車体の色を知りたい場合は

車.色 

という表記をします。もし、車の車体の色を赤色にしたい場合は

車.色  = "赤"

という記述をします。

実際にセルに値を入れてみる

ここまででVBAに必要な用語を勉強しました。ここからは実際にセルに値を入れてみたいと思います。前回も勉強しましたが、エクセルの場合はSubの後にプロージャー名を記述した後に処理内容を記述します。

例としてB2セルにHello Worldを入力するサンプルプログラムを作成します。

Sub HelloWorld()
    Range("B2").Value = "Hello World!"
End Sub

ここでRangeが先ほど紹介したオブジェクトでB2セルという意味を持ちます。また.の次に記載されているValueはRangeオブジェクトが持つプロパティで値を意味します。

これを実行すると下記のようにB2セルにHello World!という文字が入ります。


繰り返し値を入れてみる

先ほどの例は1つのセルに値を入れるパターンでしたが、番号を振る場合など複数行に入力したい場合があると思います。ここではNo.1~No.10をB1セルからB10セルに入れてみます。

まずは変数の宣言

最初に変数の宣言をします。変数は下記のように宣言をします。
Dim 変数名 As データ型

DimはDimensionの略で、これから変数を宣言することを意味します。Dimの後に変数名を記載します。変数名はなんでもいいのですが、VBAではハンガリアン記法を推奨されているみたいです。一言でいうと型を名前の先頭につけて型を区別しやすくするための記法です。(システムハンガリアンというみたいですが)

詳細の説明はWikipediaを参照お願いします。

ハンガリアン記法

Asの次はデータ型を記載しますが、こちらの記載をしなくても問題ございません。型を記載しない場合はVariant型になり、代入された情報に応じて型が変更されるようになります。

最初のうちはValiant型でもいいと思いますが、大規模な開発とかになると不要に領域を確保してしまうため、メモリの消費が多くなってしまうなどのデメリットもあります。

型の一覧について整理したので、下記を参照お願いします。

データ型 格納できるデータ メモリサイズ 補足
Boolean 真偽値 (True または False) 2バイト 条件式の結果などを格納します。
Byte 0から255までの整数 1バイト 非常に小さい整数を扱う際に使われます。
Integer -32,768から32,767までの整数 2バイト 比較的よく使われる整数型です。
Long -2,147,483,648から2,147,483,647までの整数 4バイト Integerより大きな整数を扱う際に使われます。
Single 単精度浮動小数点数 4バイト 小数点を含む数値で、7桁程度の精度です。
Double 倍精度浮動小数点数 8バイト 小数点を含む数値で、約15桁の精度を持ちます。通常、小数はこちらが推奨されます。
Currency 固定小数点数 8バイト 通貨計算に適しており、小数点以下4桁の精度を持ちます。
String 文字列 1バイト/文字 テキストデータを格納します。可変長と固定長があります。
Date 日付と時刻 8バイト 日付や時刻を格納します。
Object オブジェクトへの参照 4バイト Excelのワークシートやブックなど、特定のオブジェクトを指す際に使われます。
Variant 任意のデータ型 16バイト以上 すべての種類のデータを格納できますが、速度やメモリ効率の面で推奨されません。

前置きが大分長くなりましたが、今回は1~10までの番号を振っていくため、制御変数のiをint型で宣言します。(制御変数は特にハンガリアン記法はしない場合が多そうです)

Dim i As Integer

For文の記載

今回は繰り返し入力を行うため、For文を使って記述します。VBAの場合のFor文の書き方は下記のとおりです。

For 制御変数 = 開始値 To 終了値 [Step 増分]
    ' 実行したい処理
Next [制御変数]
※[]で記載したものは省略可能です。
今回は実行したい処理はセルの番号を指定して値を入れていくのですが、前回使ったRangeではなく、Cellsを使ってセルの範囲を指定します。
※Rangeを使ってもできますが、少しテクニカルな記載をしなくてはいけないため、今回のように位置を変更する場合はCellsを使うのが一般的みたいです。Cellsは下記のように記載します。
Cells(行番号, 列番号)
今回はA1セルからA10セルにNo1からNo10を振りたいと思います。先ほどのFor文と組み合わせると下記のようになります
    For i = 1 To 10 Step 1
        Cells(i, 10).Value = "No. " & i
    Next i

A1からA10にNo.1から10を記載する

ここまでで必要な要素を解説しました。ここでは実際にA1からA10セルに1から10のNoを振るコードを記載します。
今回作成したコードは下記の通りです。
Sub test()
    Dim i As Integer
    For i = 1 To 10 Step 1
        Cells(i, 1).Value = "No. " & i
    Next i
End Sub

これを実行すると下記のようにA1からA10列に番号が振ることができました。

まとめ

今回はVBAでオブジェクトの操作の勉強、変数の宣言とFor文の使い方を勉強しました。次回はIF文での条件分岐を勉強しようと思います。

自己紹介

はじめまして 社会人になってからバイクやプログラミングなどを始めました。 プログラミングや整備の記事を書いていますが、独学なので間違った情報が多いかもしれません。 間違っている情報や改善点がありましたらコメントしていただけると幸いです。

X(旧Twitter)

フォローお願いします!

ラベル

QooQ