VBプログラミングの基礎【現役エンジニアがわかりやすく解説】

PROGRAM

VBプログラミングの基礎を知りたい方に。

この記事を読まれている方は、

  • VBのプログラミングがどんなものか知りたい
  • VB言語の簡単な書き方が知りたい
  • VBが使われる場面を知りたい

おそらくこのように考えている方が多いと思います。

この記事を書いている私は、
プログラミング未経験から転職を果たした現役のWeb系エンジニアです。
エンジニア歴は3年ですが、本業とは別にフリーランスの副業で月10万円ほど、多いときで20万円ほどの収入があります。

この記事では、現役のエンジニアが、VBプログラミングの基礎を解説しています。

プログラミング言語のVBの特徴

プログラミング言語のVBの特徴

VBはプログラミング言語のひとつで、Visual Basicの略です。
VBは静的型付けのコンパイル言語で、オブジェクト指向型の特徴を持つ言語です。
※ここで言うVBはVB.NETのことだと思って下さい。

静的型付けの言語とは、簡単に言うと、データを文字列型や数値型、論理型などに分ける必要がある言語のことです。

コンパイル言語とは、プログラムの実行前に、開発者の方でコンパイラーを使って構文チェックなどをしたうえで中間言語に変換しないと動作しない言語のことです。

一方、コンパイル言語と対をなすスクリプト言語とは、プログラム実行前にコンパイルをする必要のない言語のことで、書いた後はすぐにプログラムを実行することができる言語のことです。

一般に、コンパイル言語は、処理速度がスクリプト言語に比べて速くなります。速度が求められる処理では、コンパイル言語が使用されることが多いです。

オブジェクト指向型言語とは、オブジェクトという概念を持つ言語のことで、簡単に言うと、データ構造として、配列や構造体に加えて、オブジェクト(クラス)があるということです。
オブジェクトのおかげで、ソースコードのメンテナンスがしやすかったり、機能の流用ができます。

VBは、静的型付けのコンパイル言語のため、きちんと型定義を行う開発をしたいという場合にオススメの言語です。
また、VBを使う最大のメリットとしては、後ろ盾にMicrosoftがいるということです。そのため、Windows向けに最適な開発が行える点、使いやすい統合開発環境(IDE)であるVisual Studioが使える点が明らかに他の言語よりも優れています。

ただ、実際には、プロのエンジニアの間ではVBよりもC#の方を好んで使うケースが多くなっています。
そのため、ネットに出回るサンプルコード数もVBよりC#の方が多くなっています。

さらに、VBがC#に劣っている点はそれだけにとどまらず、Xamarinを使ったスマホアプリ向けの開発言語にVBがなかったり、多くの言語の祖であるC言語とは別の進化を遂げた言語であるため、C言語の語感では対応できない点などがデメリットとして挙げられます。

C#はWindows系アプリとスマホアプリ、Web系の開発ができますが、VBはWindows系アプリが中心でWeb系も開発は可能ですが、C#が採用されるケースの方が多く、比較的マイナーとなっているのが現状です。(Web系は通常C言語系の言語が採用されるケースが多いというのも要因の一つとしてあります。)

VBの用途

VBの用途

VBは主にWindows系アプリの開発で使われます。

例えば、スーパーのレジや銀行のATM、街の電光掲示板などは.NET Frameworkを活用したものが多いです。(C#かVBのどちらが採用されているかまではわかりません。)

しかし、VBは徐々に衰退をしていっており、2000年代にMicrosoftが開発したC#に置き換わられています。実際にやれることもC#の方が多くなっており、今後十数年でほぼC#に取って代わられる可能性もあります。

ただ、VBはExcelVBAなどの延長線上で学習できるため、かなり学習しやすい言語ではあります。しかし、使える人の数も多く、単価が安いのが現状です。また、サンプルコードもC#に比べると少ないので、プログラミングに慣れる第一歩としてはオススメですが、「この言語で稼いでいこう」とかは考えない方が良いと思います。

VBの書き方

VBの書き方

ここでは簡単に書き方を少しだけ紹介します。実際に始める気になったら、ぜひ参考書などの教材を参考にして、試してみて下さい。

Hello World!を画面に出力する

まずはお決まりのHello World!という文字列を画面に出力する方法から。

Public Class YourClass
  Shared Function Main As integer
    Console.WriteLine ("Hello World!")
    return 0
  End Function
End Class

これで出力することができます。
C#やJavaなどと同じように、main関数なるものを書かなければ動きません。クラスも実装しないといけないので、オブジェクト指向が強制されています。

コンパイル言語のため、プログラム実行前には必ずコンパイラーを使って中間言語に変換する必要があります。

変数宣言と分岐処理

次は少し踏み込んで、変数宣言と分岐処理をしてみます。

Public Class YourClass
  Shared Function Main As integer
    Dim age As Integer = 19
    If age < 20 Then
        Console.WriteLine ("未成年")
    Else
        Console.WriteLine ("成人")
    End If
    return 0
  End Function
End Class

上記の例では、まずageという数値型の変数を作り、その中に19という数値を入れています。
次にageが20未満であれば”未成年”という文字列を、それ以外であれば”成人”という文字列を出力するような分岐処理をしています。

配列と繰返処理

続いて、配列の使い方と繰返処理について、解説します。

ここでは配列を作って、以下のようにデータを出力することにしましょう。

佐藤,田中,小林

これを出力するコードは以下です。

Public Class YourClass
  Shared Function Main As integer
    Dim students As String() = new String(){"佐藤","田中","小林"}
    Dim i As Integer
    For i = 0 To students.Length-1
        Console.Write(students(i))
        If i < students.Length-1 Then Console.Write(",")
    Next i
    return 0
  End Function
End Class

上記の例では、まず文字列型の配列studentsに「佐藤」「田中」「小林」の3つの文字列を格納しています。
その後、数値型のカウンタ変数iを0に初期セットし、配列studentsの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、Console.Write関数を使い、配列studentsのi番目の要素の値を出力し、最後の要素以外、その後に「,(カンマ)」を出力しています。

構造体の取り扱い

最後に構造体の取り扱い方法について解説します。

ここではエクセルのようなデータを作って、以下のようにデータを出力することにしましょう。

名前:佐藤,性別:男性
名前:田中,性別:女性
名前:小林,性別:女性

これを出力するコードは以下です。

Imports System.Collections.Generic

Public Class YourClass
  Shared Function Main As integer
    Dim first_row As New Dictionary(Of String, String)
    first_row.Add("A", "佐藤")
    first_row.Add("B", "男性")
    Dim second_row As New Dictionary(Of String, String)
    second_row.Add("A", "田中")
    second_row.Add("B", "女性")
    Dim third_row As New Dictionary(Of String, String)
    third_row.Add("A", "小林")
    third_row.Add("B", "女性")
    Dim excel_data As Dictionary(Of String, String)() = New Dictionary(Of String, String)(){first_row, second_row, third_row}
    
    Dim i As Integer
    For i = 0 To excel_data.Length-1
        Console.Write("名前:" & excel_data(i)("A"))
        Console.Write(",")
        Console.WriteLine("性別:" & excel_data(i)("B"))
    Next i
    return 0
  End Function
End Class

上記の例では、まずfirst_row, second_row, third_rowという、キー・値がともに文字列型の連想配列を3つ作り、Aというキー(列)に名前を、Bのキーに性別の値を入れていきます。
そして、それら全てをexcel_dataという連想配列型の配列に入れます。
その後、数値型のカウンタ変数iを0に初期セットし、配列excel_dataの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、Console.Write関数を使い、配列excel_dataのi番目の要素の中のA列とB列の値を出力しています。

補足ですが、Dictionaryという連想配列型を使うために、プログラムの先頭でSystem.Collections.Genericクラスをインポートしています。

まとめ:VBは強力な後ろ盾がいるが先行き不透明

まとめ:VBは強力な後ろ盾がいるが先行き不透明

VBの良さを簡単にまとめると、以下のとおりです。

  • コードが書きやすい ← フレキシブルな型付け
  • VBAの知識が活かせる ← VBAの延長線上で学習ができる
  • 強力な後ろ盾とIDE ← Microsoft製でVisual Studioが使える

つまりVBは、Microsoftという強力な後ろ盾がいて、Visual Studioという使いやすいIDEにも恵まれ、かつVBAの延長線上にある言語のため、学習もしやすい言語ということになります。

しかし、VBAに似ていることからハードルも低く、アマチュアが多く参戦していることなどから、単価が安いです。

また、他のほとんどの言語がC言語系統の言語にもかかわらず、VBだけは別物で、余計な学習コストがかかるということも大きなデメリットの一つとなっています。

VBはVBAの延長線上として学べるため、独学は十分可能な言語だと思いますが、ExcelVBA出の人はオブジェクト指向の概念の理解で躓く可能性があります。もし独学でできなさそうな方は、プログラミングスクールも手段の一つに入れると良いと思います。