Visual Basic 初級講座
VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

 

Visual Basic 中学校 > 初級講座 >

第4回 変数と型

今回は「電卓」を作ります。電卓といってもWindowsに付属しているようなちゃんとしたものではありませんが、電卓つくりを通してVBにおける変数の取り扱いが理解いただけることと思います。

この回の要約

・変数を使うと、一時的に値を保存しておこうことができる。

・変数を使うには Dim などを使って宣言する。

例) Dim MyValue As String

・変数には変数の表す値に応じて「数値型」や「文字列型」などの種類がある。

 

 

1.練習

 

まずは練習して腕だめしをしましょう。TextBox(テキストボックス)に 4×9 の答えを表示させるプログラムを作ります。

新規プロジェクトを作成してフォームにTextBox(テキストボックス)とButton(ボタン)を配置してください。

TextBoxButtonのアイコンがわからない人は下の画像1を参考にしてください。

■画像1:ツールボックスの一部

そしたらButtonをダブルクリックします。この時点でClickイベントのコードが次のよう に自動的に生成されます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub

■コード1:自動生成されるコード

もちろんこれより上にはさらにごちゃごちゃといろいろ生成されていますがそちらは今回は一切いじらないでください。

さて、これにTextBoxに 4×9 を表示させるコードを書くと次のようになります。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    TextBox1.Text = 4 * 9

End Sub

■コード2:4×9を表示する

実行してButtonをクリックすると確かにTextBoxに 36 と表示されるのが確認できるでしょう。

ここでのポイントは2つです。

1.TextBoxに表示される文字は Textプロパティ(テキスト)で設定できる。

2.VBでは掛け算の記号は × ではなく * である。

どちらも一度知ってしまえば「そうかそうか」という具合に2度目以降は特に悩むこともないでしょう(忘れることはあるかもしれませんが)。

 

2.四則演算

 

では、いよいよ +−×÷ の四則演算が計算できるようにします。

次の表の様に7つのコントロールをフォームにはりつけてください。

名前 種類 Textプロパティ 用途
txtValue1 TextBox (空白) 1つ目の数値を入力する
txtValue2 TextBox (空白) 2つ目の数値を入力する
lblAnswer Label (空白) 答えを表示する
btnPlus Button 足し算を行う
btnMinus Button 引き算を行う
btnMulti Button × 掛け算を行う
btnDiv Button ÷ 割り算を行う

■表1:電卓プログラムで使うコントロールの設定

貼り付ける位置は皆さんのセンスにおまかせします。前回までの知識を生かして色をつけたりして楽しんでもかまいません。

 

■プログラム1:私はこんな感じに貼り付けました。

さて、まずは足し算を装備しましょう。btnPlusをダブルクリックして次のように記述してください。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.Click

    Dim X As Decimal
    Dim
Y As Decimal                               

    X = txtValue1.Text
    Y = txtValue2.Text                               

    lblAnswer.Text = X + Y                          

End Sub

■コード3

少し解説が必要でしょう。2行目、3行目が今回のテーマである「変数」の宣言です。 この部分が今回のメインテーマの1つです。この部分以外のコードは直感的に何が書いてあるか分かると思います。

この例では変数Xと変数Yが登場していますが、 6行目で X + Y という計算をするために使っています。この6行目は変数を使わないで次のように書くこともできます。

lblAnswer.Text = txtValue1.Text + txtValue2.Text

 今回は変数を解説するのであえてコード3のように書きました。変数のメリットはなんといっても値をとっておけることです。txtValue1.Textはテキストボックスに入力されている内容が変われば変わってしまいますが、変数の値は自分でセットしない限り変わることはありません。

変数に値をセットするには4行目、5行目のように記号 = を使います。また変数に値をセットすることを代入(だいにゅう)といいます。以降この講座でも代入という言葉を使うので注意してください。

変数は使用する前にDim (ディム)などで宣言する必要があります。繰り返しになりますがそれが2行目と3行目の部分です。この宣言はコンピュータに変数の準備をさせるために行います。また後々わかってくることですが人間のプログラムミスを防ぐ重要な役割もあります。

「使う前に宣言する必要がある」というのは人間の感覚からはしっくり来ないかもしれませんが最初は深く追求しないようにしましょう。使ってるうちになれてきます。

Dim X, Dim Yに続く As Decimal (アズ デシマル)の部分は 変数Xと変数Yが整数または小数であることを表しています。整数だけですむ場合は As Integer (アズ インテジャー)としておけばいいのですが、小数の計算もしたいので今回は As Decimalとしました。 As Decimalにしておけば 整数と小数と両方がOKなのです。

だったら数字は全部Decimalで宣言すれば便利なようにも思えますがそうはいかないのです。というのもDecimalで宣言された変数の計算はIntegerで宣言された変数の計算よりも遅く、メモリも使います。

なお、Decimalのことを日本語で「十進型(じゅっしんがた)」といいます。

このIntegerとかDecimalとかを(かた)といいます。今回の もうひとつのテーマはこの「型」です。型は今説明したように「小数」だとか「整数」だとかを表現するものです。この他の型の種類についてはすぐ後で説明します。

4行目、5行目はtxtValue1txtValue2から数値を取得するためのものです。 もし、txtValue1txtValue2に数値じゃないもの(たとえば ABC)を入力した場合はここでエラーが発生してプログラムが止まってしまいます。

最後のlblAnswer.Text = X + Y はもうお分かりでしょう。日本語に訳すと「X+Y を計算して lblAnswerに表示しろ」というような意味になります。 直訳すると次のようになります。「lblAnswerの表示文字列 に X+Y を文字列型に変換したもの を代入せよ。」

結構説明が長くなりましたがこの部分の説明が今回のメインですからよく消化してください。

それでは、足し算を参考に「引き算」と「掛け算」と「割り算」を自分でプログラムしてみてください!ここまできたらもう簡単ですよね。後の方に全コードを掲載しているのでできたら照らし合わせてみてください。

ちなみにVBでは割り算の記号は / です。くれぐれも X ÷ Y などとプログラムしないように気をつけてください。

書き忘れましたが、大きすぎる値や文字列などを入力して足し算などを実行するとエラーになります。これはプログラムが悪いのではありません。これらの回避方法は後ほど説明します。

 

3.型

 

ここでいったん電卓からはなれて「」についてもう少し詳しく説明します。

すでにでてきたように変数は使う前にDimなどを使って宣言しなければなりません。さらに宣言するときには同時に As で数字だとか文字列だとかいう「型」も指定しなければなりません。

たとえば、数値型の変数Xの宣言は次のようになります。

Dim X As Integer

Integerは数値を表す型(正確に言うと「データ型」)です。この他に既に小数までも表現できるDecimalが登場していますね。他にどんな型があるのでしょうか。表にまとめて見ました。

読み方 日本語名 説明
Boolean ブール 論理型 True, False
Byte バイト バイト型 0 〜 255
Char キャラ 文字型 0 〜 65535
Date デイト 日付型 1年1月1日〜9999年12月31日
Decimal デシマル 十進型(固定小数点型) ±79,228,162,514,264,337,593,543,950,335
同じ桁数内で小数点使用可能。分解能0.0000000000000000000000000001
Double ダブル 倍精度浮動小数点型 Long程度の桁数の小数
Integer インテジャー 整数型 -2,147,483,648 〜 2,147,483,647
Long ロング 長整数型 -9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807
Object オブジェクト オブジェクト型  
Short ショート 整数型 -32,768 〜 32,767
Single シングル 単精度浮動小数点型 Integer程度の桁数の小数
String ストリング 文字列型 文字列

■表2:変数の型

まとめてみると書くべきことがたくさんあってはじめてみる人にはわかりにくい表になってしまいました。ここは「初級編」ですから、この表の内容の全てを理解する必要はありません。

ざっと見ていただくとわかるのですが、同じ「整数型」でもいくつかあることに気が付くでしょう。整数型の違いは表現できる範囲です。たとえば As Byteで宣言した変数に 256 以上の数値を代入することはできません。また、As Byte, As Charで宣言した変数にはマイナスの数値は代入できません。

小数を使うにはAs DecimalAs Double, As Singleで変数を宣言する必要があります。このうち、DoubleSingleは浮動小数点型を呼ばれ計算に誤差が発生します。この「誤差」についてはそのうち解説します。誤差が発生して困る場合はDecimalを使うとよいでしょう。

他に重要なのは文字列型のStringです。文字列を変数に代入したいときにはほとんどの場合このStringを使います。

「変数」という名前から数字ばかりを想像してしまいそうですが、このように文字列をも変数に格納することができるのです。

さらに進んで、Object型には数字、文字はもちろん他のあらゆるものを代入することができます。他の型とはだいぶ違って特殊なものです。

 

4.エラーを回避する

 

電卓に話を戻します。

大きすぎる値を入力したり、文字列を入力したり、何も入力していないのに計算を実行するとエラーになりますね。確認してみましたか?

実はこのエラーはたったの一行で防げます。On Error Resume Nextです。この1行の意味は「もしこれ以降にエラーが発生しても無視して続行しなさい」です。

もちろん、場合によっては無視し続行してはいけないような状況も考えられますが、今回の電卓のような単純なプログラムの場合は問題ありません。このOn Error Resume Nextを追加した足し算のコードは次のようになります。

VB.NET2002対応 VB.NET2003対応 VB2005対応 

Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.Click

    On Error Resume Next

    Dim X As Decimal
    Dim Y As Decimal

    X = txtValue1.Text
    Y = txtValue2.Text

    lblAnswer.Text = X + Y

End Sub

■コード4:エラーを無視する

 

5.クラスとDimの関係

 

以上では基本的なDimの使い方を説明しましたが、Dimでは上で紹介した型以外にもさまざまなクラスのインスタンスや構造体を宣言することができます。

というより、本来Dimはクラスのインスタンスや構造体を宣言するものであって、「変数を宣言する」という表現の方が実は特殊なのです。

今回出てきたDecimalをはじめ、表で紹介したIntegerStringはすべて クラスや構造体の一種です。

そこで、前回までにでてきたようにPenクラスやBrushクラス等のインスタンスもDimで宣言するわけです。以前説明したPenクラスのインスタンスの宣言の中に次のようなものがあったことを思い出してください。

VB.NET2002対応 VB.NET2003対応 VB2005対応 


Dim
p As Pen
 

まさしく、今回の変数の宣言と同じです。そこで、この場合「変数pはPen型である」のような表現をする場合もあります。

このようにしてクラスのインスタンスを宣言していく方法はこれからもどんどんでてきます。

 

6.その他

 

これで今回の解説はほとんど終わりです。最後に解説できなかった2つの項目を説明します。

まず、変数は宣言と同時に値を代入(セット)することもできます。今回の電卓の例では次のようにして変数Xの宣言と変数XへのtxtValue1.Textの代入(セット)を一行で書くことができます。

Dim X As Decimal = txtValue1.Text

別に難しいことありませんね。

次に変数の名前ですが今回は電卓という数学っぽいテーマだったこともあり X と Y という名前にしましたがこの名前は他と重複しないならば自由につけることができます。ですからできるだけわかりやすい名前をつけるべきです。

わかりやすい名前をつける」ということはとても大切です。これによって後になってプログラムを見直したときにそのプログラムがどういうプログラムであったか理解しやすくなります。また他人にプログラムを見せるときにもそのプログラムを理解してもらいやすくなります。

たとえば、身体検査のプログラムを作るとしたら身長をあらわす変数にはXやYではなくTallHeightなどと名づけるべきです。このときSinchouなどとローマ字にしてももちろんかまいませんがローマ字は書き方にゆれがあるのでお勧めできません。例をあげると身長と読めるローマ字はSinchouの他にShinchou, Sintyou, Shintyou, Sincho, Shincho, Sintyo, Shintyo, Sincyo, Shincyo, Sincyou, Shincyouなどがあります。これでは書く人によって混乱してしまいますね。

とはいっても私は別に変数には英語の名前をつけろといっているのではありません。たとえば桁数を表す変数はKetaでいいと思います。英語でFigureと書いたところで何人の人が理解できるでしょうか?(私も今辞書で調べました…。)あくまでも「わかりやすく」というのが私のいいたいことです。

 

7.全コード

 

完成版の全コードを示します。参考のために、引き算やかけ算のコードはたし算とは少し変えてあります。引き算のコードは変数を宣言と同時に代入しています。かけ算のコードは変数を使わないで計算しています。

VB2005とVB.NET2002, VB.NET2003はInheritsおよび「Windowsフォームデザイナで生成されたコード」があるかないかだけです。

VB.NET2002対応 VB.NET2003対応  

Public Class Form1
    Inherits
System.Windows.Forms.Form
 
 Windows フォーム デザイナで生成されたコード

    Private Sub btnDiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDiv.Click

        On Error Resume Next

        Dim X As Decimal
        Dim
Y As
Decimal

        X = txtValue1.Text
        Y = txtValue2.Text

        lblAnswer.Text = X / Y

    End Sub

    Private Sub btnMulti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMulti.Click

        On Error Resume Next

        lblAnswer.Text = txtValue1.Text * txtValue2.Text

    End Sub

    Private Sub btnMinus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMinus.Click

        On Error Resume Next

        Dim X As Decimal = txtValue1.Text
        Dim Y As Decimal = txtValue2.Text

        lblAnswer.Text = X - Y

    End Sub

    Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.Click

        On Error Resume Next

        Dim X As Decimal
   
    Dim Y As Decimal

        X = txtValue1.Text
        Y = txtValue2.Text

        lblAnswer.Text = X + Y

    End Sub

End Class

■コード5:電卓プログラムの全コード(VB.NET 2002, VB.NET 2003)

 

  VB2005対応 

Public Class Form1


    Private
Sub btnDiv_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDiv.Click

        On Error Resume Next

        Dim X As Decimal
        Dim
Y As
Decimal

        X = txtValue1.Text
        Y = txtValue2.Text

        lblAnswer.Text = X / Y

    End Sub

    Private Sub btnMulti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMulti.Click

        On Error Resume Next

        lblAnswer.Text = txtValue1.Text * txtValue2.Text

    End Sub

    Private Sub btnMinus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMinus.Click

        On Error Resume Next

        Dim X As Decimal = txtValue1.Text
        Dim Y As Decimal = txtValue2.Text

        lblAnswer.Text = X - Y

    End Sub

    Private Sub btnPlus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlus.Click

        On Error Resume Next

        Dim X As Decimal
   
    Dim Y As Decimal

        X = txtValue1.Text
        Y = txtValue2.Text

        lblAnswer.Text = X + Y

    End Sub

End Class

■コード6:電卓プログラムの全コード(VB2005)

 

7.最後に

 

いかがでしたでしょうか。この変数と「型」の部分はプログラミング入門者にはいつも壁になるところです。というのは人間はコンピュータのような区別をしないからです。

この初級講座ではだんだんと高度な説明に移っていく予定ですので1回1回を大切に消化してください。

それでは失礼します。