【VBA】制御構文の書き方

VBA

VBAの制御構文について

VBAを書く上で制御構文の理解は必須になってきます。本記事では、VBAで使用する制御構文について説明していきたいと思います。

制御構文の種類

VBAで使用する制御構文っていくつあるの??

・代表的な制御構文

制御構文処理
If~Then~Else条件分岐処理
Select~Case条件分岐処理
For~Next繰り返し処理
For Each~Next繰り返し処理
Do~Loop繰り返し処理
Goto実行遷移処理

それぞれの処理について、使用方法を以下で説明していきます。

If文(If~Then~Else)

If文は大抵の言語にある条件分岐の制御構文になります。例えば、ゲームのHPで残りHP10以下の場合は「赤色」を表示、HP10より多く50以下の場合は「黄色」を表示、その他は「青色」で表示としたい場合、If文で以下のように書くことができます。

'変数
Dim hp As Integer

'①残りHP10以下の場合
If hp <= 10 Then
    MsgBox "赤色を表示"
'②残りHP50以下の場合
ElseIf hp > 10 And hp <= 50
    MsgBox "黄色を表示"
'③その他
Else
    MsgBox "青色を表示"
End If

If文で条件式を書く場合は、「①のIf」の箇所は必須で、「②のElseIf」や「③のElse」は、なくても大丈夫です。VBAのIf文は少し特殊で、If文の終わりに「End If」が必要になります。また、ElseIfは条件がある限り何個でも記載ができます。ただ、何個でも記載するのはあまりいい書き方とは言えません。ElseIfを複数回使用するのであれば、次に説明するSelect文を使用するほうがいいでしょう。どちらで記載しても処理は変わらないのでただソースコードの可読性の問題だけになります。

Select文(Select~Case)

Select文はIf文と同様の条件分岐の制御構文になります。余談になりますが、他の言語だとよく「Switch文」として使用されております。例えば、「リンゴが好きな人」と「バナナが好きな人」、「ももが好きな人」、「ぶどうが好きな人」、「みかんが好きな人」、「他の果物が好きな人」で分ける場合、以下のようなソースコードを記載します。

'好きな果物
Dim 
fruits As String

Select Case fruits
    ' 変数fruitsが「リンゴ」の場合
    Case リンゴ
        MsgBox "リンゴが好きな人"
    ' 変数fruitsが「バナナ」の場合
    Case バナナ
        MsgBox "バナナが好きな人"
    ' 変数fruitsが「もも」の場合
    Case もも
        MsgBox "ももが好きな人"
    ' 変数fruitsが「ぶどう」の場合
    Case ぶどう
        MsgBox "ぶどうが好きな人"
    ' 変数fruitsが「みかん」の場合
    Case みかん
        MsgBox "みかんが好きな人"
    ' 変数fruitsが「その他」の場合
    Case Else
        MsgBox "その他の果物が好きな人"
End Select

Select文は条件分岐が複数ある場合に用いるパターンが多いです。もちろん条件分岐が一つしかない場合でも使用できますが、少ない場合は「If文」を使用する方が可読性が高いです。Select文のCaseは何個でも記載できるので、分岐の数が多い場合はCaseを使用しましょう。

For文(For~Next)

For文はIf文と同様に大抵の言語にある繰り返し処理の制御構文になります。文字通り同じ処理を複数回実施する時に使う構文となります。以下に10回数字をカウントする処理を記載します。

'カウント用変数
Dim cnt As Integer

For cnt = 1 To 10
    MsgBox cnt & "回目のループです。"
Next cnt

「cnt = 1 To 10」と記載することで、10回「MsgBox cnt & “回目のループです。”」の処理を実施することになります。「Next cnt」は、1回処理が終わるごとにcnt変数を1から2、2から3とインクリメントしていきます。

For Each文(For Each~Next)

For Each文はコレクションの各要素を繰り返す処理になります。と言っても初学者の方は何を言ってるんだ?となると思います。今回はこんな使い方ができるというのをよく使う二つを例に説明します。

まずはExcelのシート数文繰り返す処理になります。
シートの名称をExcelのシートの左から順に表示します。

'worksheet格納変数
Dim wSheet As Worksheet

For Each wSheet In Worksheets
    MsgBox wSheet.Name
Next wSheet

次に配列の要素分繰り返す処理になります。配列の値を順に表示する処理になります。

'配列を用意
arr = Array(1,2,3,4,5)

'配列の要素格納変数

Dim itm As Variant
For Each itm In arr()
 MsgBox itm
Next

Do Loop文(Do~Loop)

Do Loop文も繰り返し処理時に使用する制御構文になります。For文を使用できるようになればこちらはそこまで使用頻度の高い制御構文ではないと思います。

Do Loop文を使用する場合、「Do While~Loop」「Do Until~Loop」を使用することになります。それぞれの例を以下に記載致します。

Do While~Loop

Do While Loopは、変数が5以下の場合は処理を実施するなど、制御できます。

'カウント変数
Dim cnt As Integer

cnt = 1
Do While cnt < 5
 
    MsgBox cnt & "回目のループです。"
    cnt = cnt + 1
        
Loop

Do Until~Loop

Do Until~Loopは、変数が5までの場合は処理を実施するなど、制御できます。

'カウント変数
Dim cnt As Integer
    
cnt = 1

Do Until cnt = 5
    MsgBox cnt & "回目のループです。"
    
    cnt = cnt + 1
Loop

Goto文(Goto)

Goto文は、同じ関数内で処理を飛ばすことができる処理になります。処理を飛ばしたい箇所にラベルを作成して、Gotoの後にラベル名を指定することで処理遷移することができます。以下に例を記載致します。

'カウント用変数
Dim cnt As Integer

'Labelに遷移
GoTo Label

For cnt = 1 To 10
    MsgBox cnt & "回目のループです。"
Next cnt

Label:
   Debug.Print("Label")

上記の「Goto Label」を実施することで、最終行の「Debug.Print(“Label”)」まで処理をスキップします。真ん中のFor文の箇所の処理は実施しません。

最後に

エンジニアとして細かくても技術力を上げていけば、個人でも会社でもお金を稼げるようになっていきます。私から3点お金を稼ぐための方法をおススメします。

副業サイトでお金を稼ぐ

一番最初が副業サイトでお金を稼ぐです!
私は、副業サイトのココナラで月にVBAを作成し月に2~3万円ほど稼いでいます。VBAを作成している人の提案を購入したり、自身でVBAを作成し販売することもできます。
プログラミング関連だけでなく、私のProfileのアイコンもココナラで頼んで1000円で作成してもらいました!登録は無料なので、是非登録してみてください。

キャリアアップのための転職をする

転職というと、そりゃ給料上がるだろ!って思う方が多いと思いますが、エンジニアは転職してなんぼの職種です。就職難の昨今でもエンジニアは現場に人が足りていません。そのため、ある程度のお金を払っても入社してくれる方を探している企業が多いのが現状です。
また、会社にもよりますが、多くの会社は入社してから数年間は雀の涙程度の給料しかあがっていきません。ただ、転職することで、100万円単位で年収が上がっていくこともざらにあります。
エンジニアは転職してキャリアアップしていく職種と言えます。

私も使用していましたが、やはり転職サイトは大手がいいでしょう!大手の方が、企業との付き合いも多く給与面も福利厚生面も手厚いところを紹介してくれます。

フリーランスエンジニアになる

最後はハードルが高そうに見えるフリーランスエンジニアになります。副業と転職に比べると確かにハードルは高いですが、皆さんが思っているような、何でもできるエンジニアの方はあまりいません。フリーランスエンジニアの方に話を聞くとやっぱり給与面でフリーランスになる方が多いです。

例えば、大手のSierで働いてたとすると、1カ月大体一人当たり200万円、顧客からお金をもらって働きます。大手の子会社となると、200万円から半分の100万円程度で雇われるのが一般的です。
ここから3割程度は個人の給与として支払われ、残りの7割は企業の取り分となります。企業に雇われているので仕方ないですねw

ただ、フリーランスエンジニアは、大手の用にはいかないですが、子会社と同じぐらいの100万円程度で雇ってもらい。そこから企業の取り分がないため、全額自分に入ってきます。福利厚生等はありませんが、金額だけ聞くと驚愕ですねw最近はフリーランスの人が入る団体等もあり、フリーランスの方が活躍できる環境が整ってきています。

フリーランスの方専用のスクール等もあるので、相談してみるのもいいと思います。

コメント

タイトルとURLをコピーしました