Visual Basicとは
Visual Basicは、英語に近いキーワードと.NETの豊富な機能を使えるプログラミング言語です。業務用デスクトップアプリ、既存システムの保守、処理の自動化などで利用されています。この講座で扱うのは、ExcelのVBAではなく.NET上で動くVisual Basicです。
- Visual Basic .NET:.NET SDKでアプリを作る言語
- VBA:主にOffice製品のマクロを書く言語
実行してみよう
.NET SDKをインストールし、ターミナルで作業用フォルダーを作ります。-lang VBを付けるとVisual Basicのプロジェクトが作成されます。
mkdir HelloVisualBasic
cd HelloVisualBasic
dotnet new console -lang VB
dotnet runProgram.vbを次の内容にして、もう一度dotnet runを実行します。
Module Program
Sub Main(args As String())
Console.WriteLine("こんにちは、Visual Basic!")
End Sub
End Moduleこんにちは、Visual Basic!dotnet --versionでSDKを確認します。ファイルだけでなく、プロジェクトファイル(.vbproj)があるフォルダーで実行してください。基本の書き方
通常は上から順に実行され、文末のセミコロンは不要です。'から行末まではコメントです。大文字と小文字は区別されませんが、エディターが整える表記に揃えると読みやすくなります。
' 画面へ3行表示する
Console.WriteLine("1番目")
Console.WriteLine(10 + 20)
Console.WriteLine("3番目")1番目
30
3番目この先の短い例は、Mainの中へ貼り付けて実行します。
変数とデータ型
Dim 変数名 As 型 = 値で変数を宣言します。変数の型を明記すると、誤った値の代入を早く発見できます。
Dim name As String = "Mity"
Dim age As Integer = 20
Dim height As Double = 170.5
Dim isStudent As Boolean = True
Dim price As Decimal = 198.5D
Console.WriteLine($"{name}さんは{age}歳です")
Console.WriteLine($"身長: {height:F1}cm / 学生: {isStudent}")
Console.WriteLine($"価格: {price:F2}円")Mityさんは20歳です
身長: 170.5cm / 学生: True
価格: 198.50円$"..."は文字列補間です。波かっこの中に変数や式を書けます。金額には10進小数を扱うDecimalが向き、数値の末尾のDはDecimal型を表します。
.vbprojのPropertyGroupへ<OptionStrict>On</OptionStrict>を追加しましょう。この講座ではOnを前提とし、型変換を明記します。入力と型変換
Console.ReadLine()は文字列を返します。数値へ変換できるかをInteger.TryParseで確かめると、不正な入力でもプログラムが突然終了しません。
Console.Write("年齢を入力してください: ")
Dim input As String = Console.ReadLine()
Dim age As Integer
If Integer.TryParse(input, age) Then
Console.WriteLine($"来年は{age + 1}歳です")
Else
Console.WriteLine("整数で入力してください")
End If年齢を入力してください: 20
来年は21歳です演算子
| 種類 | 演算子 | 例 |
|---|---|---|
| 計算 | + - * / \ Mod ^ | 7 \ 2は3 |
| 比較 | = <> > < >= <= | score >= 80 |
| 論理 | AndAlso OrElse Not | age >= 18 AndAlso hasTicket |
| 文字列連結 | & | "姓" & "名" |
Dim price As Integer = 500
Dim count As Integer = 3
Dim subtotal As Integer = price * count
Dim tax As Integer = subtotal * 10 \ 100
Console.WriteLine($"小計: {subtotal}円")
Console.WriteLine($"税込: {subtotal + tax}円")小計: 1500円
税込: 1650円/は通常の割り算、\は整数除算、Modは余りです。実際の金額計算では業務で定められた端数処理に従います。
条件分岐
If、ElseIf、Elseで処理を切り替え、End Ifで閉じます。上から判定し、最初に真になった処理だけを実行します。
Dim score As Integer = 82
Dim result As String
If score >= 80 Then
result = "合格(よくできました)"
ElseIf score >= 60 Then
result = "合格"
Else
result = "再挑戦"
End If
Console.WriteLine(result)合格(よくできました)繰り返し
回数や範囲が決まる処理にはFor、条件が真の間続ける処理にはWhileを使います。
For number As Integer = 1 To 3
Console.WriteLine($"{number}回目")
Next1回目
2回目
3回目Dim count As Integer = 3
While count > 0
Console.WriteLine(count)
count -= 1
End While
Console.WriteLine("スタート")count -= 1のような更新を忘れると終了しません。Exit ForやExit Whileで途中終了できます。配列とList
配列は要素数が固定、List(Of T)は後から追加・削除できます。どちらも位置は0から数えます。
Dim colors() As String = {"赤", "青", "緑"}
Dim fruits As New List(Of String) From {"りんご", "みかん"}
fruits.Add("ぶどう")
Console.WriteLine(colors(0))
For Each fruit As String In fruits
Console.WriteLine(fruit)
Next赤
りんご
みかん
ぶどうキーと値を扱うときはDictionary(Of String, Integer)を使います。存在しないキーはTryGetValueで確認すると安全です。
colors(3)はIndexOutOfRangeExceptionになります。SubとFunction
Subは値を返さない処理、Functionは計算結果などを返す処理です。次の関数はMainと同じModuleの中、Mainの外へ書きます。
Function CalculateTotal(price As Integer, count As Integer) As Integer
Return price * count
End Function
' Mainの中から呼び出す
Dim total As Integer = CalculateTotal(500, 3)
Console.WriteLine($"合計: {total}円")合計: 1500円- 名前から役割が分かる
- 一つの処理に一つの役割を持たせる
- 表示と計算を分ける
- 入力と戻り値の型を明記する
例外処理
想定できる失敗はTryとCatchで処理します。ただし、変換には可能ならTryParseのような例外を使わない方法を選びます。
Try
Dim answer As Integer = 10 \ 0
Console.WriteLine(answer)
Catch ex As DivideByZeroException
Console.WriteLine("0では割れません")
Finally
Console.WriteLine("計算を終了します")
End Try0では割れません
計算を終了します詳しくは例外処理とテストで学びます。
ファイルの読み書き
File.WriteAllTextとFile.ReadAllTextで小さなテキストを保存できます。
Dim path As String = "memo.txt"
File.WriteAllText(path, "Visual Basicを学習中")
Dim text As String = File.ReadAllText(path)
Console.WriteLine(text)Visual Basicを学習中詳しくはファイルとJSONで、パスやCSVも含めて学びます。
クラスとオブジェクト
クラスは関係するデータと処理をまとめた独自の型です。次のProductはProgramとは別のProduct.vbへ書けます。
Public Class Product
Public Property Name As String
Public Property Price As Integer
Public Sub New(name As String, price As Integer)
Me.Name = name
Me.Price = price
End Sub
Public Function Total(count As Integer) As Integer
Return Price * count
End Function
End ClassDim book As New Product("VB入門", 2000)
Console.WriteLine(book.Name)
Console.WriteLine(book.Total(2))VB入門
4000詳しくはクラスとオブジェクトで、プロパティや継承、インターフェースを学びます。
練習問題:買い物の合計
商品名、単価、個数を入力し、合計を表示するプログラムを作ってください。単価と個数はInteger.TryParseで確認し、単価は0以上、個数は1以上だけを受け付けます。
解答例コードを見る
Console.Write("商品名: ")
Dim name As String = Console.ReadLine()
Console.Write("単価: ")
Dim priceText As String = Console.ReadLine()
Console.Write("個数: ")
Dim countText As String = Console.ReadLine()
Dim price As Integer
Dim count As Integer
If Integer.TryParse(priceText, price) AndAlso
Integer.TryParse(countText, count) AndAlso
price >= 0 AndAlso count >= 1 Then
Console.WriteLine($"{name}: {price * count}円")
Else
Console.WriteLine("単価は0以上、個数は1以上の整数で入力してください")
End If入力例が「ノート」「180」「3」なら、実行結果はノート: 540円です。
次に学ぶこと
本編を動かせたら、次のページで小さなプログラムを保守しやすくする知識を身につけましょう。