機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【Excel-VBA#3】VBAでの基本的なコードの書き方Part1

VBAでの基本的なコードの書き方

 

1. はじめに

第1回としてVBAの始め方を、第2回としてマクロを紹介しました。

www.stjun.com

www.stjun.com

今回はいよいよVBAでのコードの書き方を紹介します。他のプログラミング言語を知っている人にとっては当たり前の内容ですが、他の言語と微妙に書き方が違うと思いますので忘れた時などに参考にしてください。

 

2. コードの書き方

まずその前にVBAのエディタを表示します。

「開発」タブの「Visual Basic」をクリックします。

f:id:stjun:20201019003130p:plain

そして「挿入」から「標準モジュール」をクリックすると「Module1」が現れます。今回はここにコードを記載します。

またコードを実行する際は、緑色の右向き矢印をクリックしてください。

f:id:stjun:20201019003428p:plain

 

2.1 文頭と文末:Sub~End、Public・Private

コードを書くときは必ず頭にはsubを、文末にEnd subを記載します。

Subの横のfirstは私が決めた名前です。名前からプログラム内容が推測しやすい名前が良いです。カッコの中は引数などを指定することができます。

Sub first()
~コードの中身~ End Sub

また Subは正確にはPublic Subの省略です。Public sub以外にPraivate subがあります。

Public subとPraivate subの違いは、

Public sub:どのモジュールからも呼び出せる

Private sub:記載されたモジュール内でしか使えない

になります。標準モジュールに記載する場合は基本Publicで記載すると思って問題ありません。フォームなどに直接プログラムを記載する場合はPrivateで書く場合もありますが、Publicで書いても問題はありません。

 

2.2 変数の定義:Dim

変数はDimを使って以下のように定義します。

Dim (任意の英数字) As (変数の型)

変数の型について代表的なものは以下になります。

Boolearn:TrueかFalseか

Integer:-32768~32768の整数値

Long:-2147483648~2147483647の整数値

Double:小数点を含む数値

String:文字列

Variant:何でも(特にリストで使う場合が多い)

例えば繰り返し計算用の変数はintegerを使うことが多く、数値計算ではDoubleを使ったり、ユーザーが入力した文字列を取得した場合はStringを使ったりします。

また以下のように連続して変数を定義することも可能です。

Dim A As Integer, B as String, C as Long

 

2.3 繰り返し:for文

for文は繰り返し処理で使用します。

for文の書き方は以下です。

For (変数) = (始まりの数字) To (終わりの数字)

~処理内容~ Next

それでは簡単な使い方の紹介として、B列の1行目から10行目に1~10の数を順番に代入してみたいと思います。

Public Sub first()
    Dim i As Integer '変数iを整数型として定義
    For i = 1 To 10    'iの値を1~10まで変化させる,最初は1から
        Cells(i, 2) = i   'Cells(行=i,列=B列)=iの値を代入
    Next                   'iの値を更新(最初は1なので次は2)
End Sub

f:id:stjun:20201024230116p:plain

ちなみに、以下のように入れ子構造で使うことも可能です。

For i = 〇 To □
For j = △ To ♢
~処理内容~
Next Next

 入れ子構造の例として、A1~I9の列に九九の計算結果を表示したいと思います。

Public Sub first()
    Dim i As Integer
    Dim j As Integer
    
    For i = 1 To 9
        For j = 1 To 9
        Cells(j, i) = i * j
        Next
    Next    
End Sub

上記を実行すると以下のように九九の計算結果が表示されます。

入れ子構造は非常に使える技なのでぜひ活用してください。

f:id:stjun:20201024230818p:plain

 

2.3 分岐:if文

If文は処理の分岐に使われます。

書き方は以下です。

If (条件A) then
~条件Aを満たしたときの処理~

ElseIf (条件B) then
~条件Aを満たさず、かつ条件Bを満たしたときの処理~

Else
~条件AもBも満たさないときの処理~
End if

 処理は上から順に行われることに注意してください。

具体例として2.2 for文の紹介で書いた九九の計算コードにif文を追加してみましょう。今回、3で割れる時は文字を赤色に、5で割れるときは文字を青色にしてみます。

Public Sub first()
    Dim i As Integer
    Dim j As Integer
    
    For i = 1 To 9
        For j = 1 To 9
        Cells(j, i) = i * j
        If Cells(j, i) Mod 3 = 0 Then
            Cells(j, i).Font.ColorIndex = 3
        ElseIf Cells(j, i) Mod 5 = 0 Then
            Cells(j, i).Font.ColorIndex = 5
        End If
        Next
    Next
    
End Sub

実行結果は以下です。

f:id:stjun:20201024232001p:plain

3で割れる数は赤に、5で割れる数は青になっていますね。ただし注意してください。15は3でも5でも割れる数ですが赤色になっています。これは「3で割れる場合は赤色にする」という条件をfor文の一番上に書いているからです。予期しない動作をする時、for文の条件の書き方・順番が悪影響を及ぼしていることがあるのでご注意ください。

 

2.4 While 文

while文はある条件を満たすあいだは何度でも処理を繰り返します。

「条件を満たすあいだ」であり「条件を満たすまで」ではないので注意してください、条件を満たしたら終了します。

書き方は以下になります。

Do While (条件式)
~処理内容~
(大抵は変数をカウントアップする処理を入れる) Loop

条件式を満たさない限り永遠と処理を繰り返すので注意してください。その場合はEscキーを押すと解除されます。

具体的な例として、2の1乗、2の2乗、...と2の階乗を計算していき100万を超えたら処理をストップさせるコードを書いてみます。

Public Sub first()
    Dim i As Integer
    Dim Ans As Long
    i = 1
    Ans = 0
    Do While Ans < 1000000
        Ans = 2 ^ i
        Cells(i, 2) = Ans
        i = i + 1
    Loop

 実行するとB列に上から順に2の1乗、2乗、3乗...と値が代入されていきます。2の20乗で100万を超えるためコードが終了します。

f:id:stjun:20201024234032p:plain

f:id:stjun:20201024234753p:plain

 

2.5 Until 文

until文はある条件を満たすまで何度でも処理を繰り返します。つまりWhile文と逆です。数値計算で残差を判定する時などに使うこともあります。

Do Until (条件式)
~処理内容~
(大抵は変数をカウントアップする処理を入れる) Loop

 2.4のWhile文と同じように、2の階乗を計算して100万を超えたら処理を止めるコードは以下になります。

Public Sub first()
    Dim i As Integer
    Dim Ans As Long
    i = 1
    Ans = 0
    Do Until Ans > 1000000
        Ans = 2 ^ i
        Cells(i, 2) = Ans
        i = i + 1
    Loop

 WhileがUntilに、条件式が<から>に変わっただけです。結果は同じなので省略します。

 

3. おすすめ書籍

このシリーズはプログラミング初心者にも非常に分かりやすくてお勧めです。

私はプログラミングを初めて勉強する際、3番目の本を大学時代に買ってすごく助かりました。今でも手元に置いてるくらいです。 

 

4. 最後に

次回もVBAの基本的なコードの書き方を紹介します。