第5章 パソコン上での vb - 技術の社会還元を目指...

67
新欲張り電子工作(第5章) 5-1 第5章 パソコン上での VB プログラミング パソコン上で動作するプログラムの作成を、インタプリタ言語である VB6(VisualBasic6)を使い、 PIC 間の通信処理等を行うプログラム作成が簡単にできるようになります。 5.1 VB6(ビジュアルベーシック)の概要 ビジュアルベーシック言語とは、開発環境として提供されている様々なユーザーインターフェース部 品や各種処理用部品を、あたかもグラフィックツールを扱うような感覚で選択し、オリジナルなプログ ラムを作り上げることができる言語です。また、ソフトウェア開発経験や知識を必要とする、プログラ ムのモジュール化や詳細設定を行わなくとも、必然的にモジュール化された最適なプログラムが構築で きてしまう、極めて便利な開発言語でもあります。この言語は、基本的にはインタプリター言語の範疇 であり、テキスト形式で作成されたプログラムを、実行時に逐次機械語に変換して実行します。 ビジュアルベーシックの主な特長は以下の通りです。 ユーザーインターフェース用や各種処理用部品が標準で用意されています。 フォームと言われるボードのような部品に、各種のボタンやテキスト、及び画像などの部品を 配置することによりユーザーインターフェースが実現されます。 プログラムは、ボード上に配置された各々の部品に対して行います。 部品に対する制御は、プロパティという属性を切り替えることで行います。 各種アプリケーションソフトとの連携機能が充実しています。( マクロなど) 各種のデータベースに対する連携機能が充実しています。(SQL など) プログラムデバックが極めて容易です。 フォーム プロジェクト エクスプローラ プロパティ ウインド フォームレイアウト ウインド ツールボックス メニューバー ツールバー

Upload: lydat

Post on 10-Mar-2019

222 views

Category:

Documents


0 download

TRANSCRIPT

新欲張り電子工作(第5章)

5-1

第5章 パソコン上での VB プログラミング

パソコン上で動作するプログラムの作成を、インタプリタ言語である VB6(VisualBasic6)を使い、

PIC 間の通信処理等を行うプログラム作成が簡単にできるようになります。

5.1 VB6(ビジュアルベーシック)の概要

ビジュアルベーシック言語とは、開発環境として提供されている様々なユーザーインターフェース部

品や各種処理用部品を、あたかもグラフィックツールを扱うような感覚で選択し、オリジナルなプログ

ラムを作り上げることができる言語です。また、ソフトウェア開発経験や知識を必要とする、プログラ

ムのモジュール化や詳細設定を行わなくとも、必然的にモジュール化された最適なプログラムが構築で

きてしまう、極めて便利な開発言語でもあります。この言語は、基本的にはインタプリター言語の範疇

であり、テキスト形式で作成されたプログラムを、実行時に逐次機械語に変換して実行します。

ビジュアルベーシックの主な特長は以下の通りです。

ユーザーインターフェース用や各種処理用部品が標準で用意されています。

フォームと言われるボードのような部品に、各種のボタンやテキスト、及び画像などの部品を

配置することによりユーザーインターフェースが実現されます。

プログラムは、ボード上に配置された各々の部品に対して行います。

部品に対する制御は、プロパティという属性を切り替えることで行います。

各種アプリケーションソフトとの連携機能が充実しています。(マクロなど)

各種のデータベースに対する連携機能が充実しています。(SQL など)

プログラムデバックが極めて容易です。

フォーム

プロジェクト

エクスプローラ

プロパティ

ウインド フォームレイアウト

ウインド

ツールボックス

メニューバー

ツールバー

新欲張り電子工作(第5章)

5-2

メニューバー :各種の処理がプルダウンメニューとして提供されています。

ツールバー :各種のコマンドアイコンが張り付いているバーです。

ツールボックス :標準的な部品(コントロール)ボックスであり、この中から選択し

て画面や処理を構築します。

フォーム :この画面に各種の処理ボタンなどを貼り付けて画面を構築します。

プロジェクトエクスプローラ

:画面とソースプログラムの切り替えやフォルダーの切り替えなどを

行います。

プロパティウインド

:現在選択されているオブジェクトに設定されている属性(フォント

の色など)を表示します。

フォームレイアウトウインド

:ビジュアルベーシックで作成される画面が実行時にどの場所に表示

されるかを指定するウインドです。

新欲張り電子工作(第5章)

5-3

5.2 とにかく VB6でプログラムを作ってみましょう

ビジュアルベーシックソフトウェアを使用してソフトウェアを作成する場合、一般的には、以下の手

順に従い作成します。

① VB6 ソフトウェアの起動

② フォームに対する、表題の設定(Caption により設定)

③ 最適コントロールの選択と配置

④ コントロールに対するプロシージャの作成

⑤ プログラムの実行

⑥ プログラムの保存と VB の終了

以下のようなユーザインターフェース画面を作成し、最初と2番目の入力ボックスに数値が入力され、

実行ボタンがクリックされた時に、3番目のボックスに、その計算結果が表示されるようなプログラム

を作成してみましょう。

5.2.1 VB6 ソフトウェアの起動

Word や Excel と同様に、「スタート」ボタン⇒「ずべてのプログラム」⇒「MicrosoftVisualBasic6.0」

⇒「MicrosoftVisualBasic6.0」の順にマウス操作をします。この操作により以下の画面が表示されます

ので、「標準.exe」アイコンをクリックします。

新欲張り電子工作(第5章)

5-4

5.2.2 フォームに対する、表題の設定

「標準.exe」アイコンをクリックすると以下のような画面が表示されますので、Form の「Caption」を

選択し、その「Caption」の右側にある入力部分にカーソルを移動し(クリックが必要です)、ユーザー

インターフェース画面のタイトルバーに表示する表題を設定します。

ここでは、「練習プログラム」と入力してください。

5.2.3 最適コントロールの選択と配置

ツールボックスに表示されている各種のアイコンからユーザインターフェースとして使用したい部品

を選択して、フォーム上に表示します。フォームに表示させる場合は、使用したい部品をクリックし、

その後でカーソルをフォーム上の任意の場所に移動し、四角の図形を描くような要領でドラッグ操作を

行います。この操作で部品がフォーム上に表示されたら、ドラッグ操作により、その部品を最適な場所

に移動します。実際の操作を以下の手順で行ってください。

「Caption」を選択し、タ

イトルバーに表示したい

内容を入力します。

① 部品の貼り付け

② 個々のプロパティ

の設定

③ 実行時の表示位置

の調整

新欲張り電子工作(第5章)

5-5

① 「Label」アイコン(「A」)アイコンをクリックし、フォーム上でのドラッグ操作により貼り付

けます。

② プロパティの「Caption」項目の入力部分の先頭をダブルクリックし、「初めての VB プログラ

ム」と入力します。

③ プロパティ設定画面の「Font」部分をクリックし、その右側に表示されるメニュー(…)部分

をクリックします。この操作により表示されるフォント指定画面で、文字の大きさや形状を設

定します。このでは、「MS P ゴシック」「太字」「16」を設定してください。

④ 「TextBox」アイコン(ab|)をクリックし、フォーム上でのドラッグ操作により貼り付けます。

⑤ プロパティの「Text」項目の入力部分の先頭をダブルクリックし、設定されている文字を消し

ます。

⑥ 上記操作を 2 回繰り返し、合計3ケのテキストボックスを作成し、所定の位置に順番に配置し

ます。

⑦ 「CommandButton」アイコンをクリックし、フォーム上でのドラッグ操作により貼り付けま

す。

⑧ プロパティの「Caption」項目の入力部分の先頭をダブルクリックし、「実行」という文字列に

変更します。

⑨ 「フォームレイアウト」ウインド上に表示されている画面をドラッグ操作することにより、こ

のプログラムを実行した時に表示するユーザインターフェース画面の場所を調整します。

補足:

ツールボックスのアイコン上にカーソルを置くと、そのアイコンの名前が表示されまます。

5.2.4 コントロールに対するプロシージャの作成

VB はイベント型プログラムといい、フォーム上に貼り付けられた部品して何らかの操作(クリックな

ど)を行った場合に、その操作に対して設定されているプログラムが実行されます。この練習プログラ

ムでは、実行ボタンがクリックされた時に、所定の計算を行うものですので、実行ボタンがクリックさ

れた場合に実行するプログラムを以下の要領で登録します。

新欲張り電子工作(第5章)

5-6

① フォーム画面上の「実行」ボタンをダブルクリックします。この操作により、このボタンがク

リックされた場合に実行するプログラムを登録する画面が表示されます。

② 「Private Sub Command1_Click()」と「End Sub」は自動的にコーディングされていますので、

その中身のプログラムを以下のように作成します。

Text3.Text = Val(Text1.Text) + Val(Text2.Text)

補足1:

フォーム上の部品をクリックすると、その部品の名前はプロパティ設定画面上に表示されま

す。その部品に対する処理を行う場合は、この名前を指定します。例えば、Text1 の内容を使用

するのであれば、「Text1.xxxx」と指定します。(xxxx は、プロパティ設定画面に表示されてい

る各項目の変更したい名前を指定します。

補足2:

「TextBox」を使用した場合、入力された文字列の保存プロパティは「Text」ですので、

「Text1.Text」のような設定となります。また、入力された文字列を数値として扱い、計算を行

いたい場合は、文字列を数値に変換する「Val」関数を使用します。この結果、「Val(Text1.Text)」

のような指定方法となります。

新欲張り電子工作(第5章)

5-7

5.2.5 プログラムの実行とプログラムの終了

作成されたプログラムの実行方法には何通りかありますが、基本的には、メニューバー上の「実行」

メニューをクリック(ツールバー上の実行ボタンでも実行できます)することにより表示されるメニュ

ーから、「開始」をクリックします。この操作により、プログラムが開始されます。終了は、同様の操作

で「開始」の代わりに「終了」をクリックします。

開始メニューです

実行された画面です 終了メニューです

新欲張り電子工作(第5章)

5-8

5.2.6 プログラムの保存と VB の終了

プログラム作成が完了したら、そのプログラムを保存します。この方法は、ワードなどのような一般

的なソフトウェアと同じです。但し、VB6で保存する場合は、一回の保存時に、複数のファイルが保存

されますので、注意が必要です。

① メニューバーの「ファイル」メニューをクリックする事により表示されるメニューから、「名前

を付けてプロジェクトの保存」をクリックします。

② このプログラムを登録したいフォルダを選択します。フォルダを作成していない場合は、登録

画面上での右ボタン操作により、フォルダを新規に作成し、そのフォルダを選択します。

③ ファイル名を設定し、「保存」ボタンをクリックします。

④ 最初の操作では、上記操作後に再度、保存用画面が表示されますが、その画面上では、そのま

ま「保存」ボタンをクリックします。(2種類のファイルが保存されます)

⑤ メニューバーの「ファイル」メニューをクリックする事により表示されるメニューから、「終了」

をクリックします。

補足:

既存のファイルを更新する場合は、「プロジェクトの上書き保存」をクリックします。

新欲張り電子工作(第5章)

5-9

5.3 VB6 の基本的な仕様

5.3.1 VB で作成されるプロジェクトの構成

VB で作成されたソフトウェアは以下から構成されます。

プロジェクトファイル(.vbp)

フォームモジュール(.frm)

フォーム 配置(含サイズ)

プロパティ 設定

イベントプロシージャ 記述

コントロール 配置

プロパティ 設定

イベントプロシージャ 記述

補足:コントロールは複数個作られます。

標準モジュール(.bas)

ジェネラルプロシージャ 記述

フォームモジュールに含まれないコード 記述

標準コントロール

リソースファイル(.res) 必要時

OLE カスタムコントロール(.ocx) 必要時

VBX カスタムコントロール(.vbx) 必要時

5.3.2 ビジュアルベーシックの操作において使用される基本的な用語

ビジュアルベーシックソフトウェアを使って独自のプログラムを作成する場合に最低限必要となる用

語は以下の通りです。

① オブジェクト

プログラムとそれに関連する各種データを組み合わせた単位であり、オブジェクトそのもの

で一つの処理を実現できます。このオブジェクトは、極めて小さな単位から、いくつもの小さ

なオブジェクトの集合体としての、巨大なオブジェクトもあります。このオブジェクトは、プ

ロパティとメソッドとイベントプロシージャから構成されます。

② プロパティ

新欲張り電子工作(第5章)

5-10

個々のオブジェクト毎に設定される属性であり、その属性を変えることにより、そのオブジ

ェクトを目的に沿った状態(色や文字の大きさなど)に切り替えることができます。つまり、

オブジェクトの性質を決めるものです。

③ メソッド

メソードとは、対応するオブジェクトを操作する行為を言います。例えば、対応するオブジ

ェクトを移動する行為などを指します。

④ イベントプロシージャ

ビジュアルベーシックソフトウェアで作成されるプログラムは、何らかのイベント(マウス

のクリックやタイマー割り込みなど)時に実行されるように作成されます。このオブジェクト

毎に作成されるプログラムをイベントプロシージャと呼びます。(起動時に実行されるプロシー

ジャは、“Form_Load”と呼ばれるプログラムです)

これらを総称して、単にプロシージャと言います。

⑤ フォーム

ビジュアルベーシックでプログラムを作成する場合、ビジュアルベーシックソフトウェア操

作画面上に各種のボタンを配置する為の画面が表示されます。この画面のことをフレームと呼

びます。

⑥ コントロール

ビジュアルベーシックで作成されたプログラムが、ユーザとの対話を行うためにフォーム上

に設置される部品であり、標準で提供されるものです。この部品には、コマンドボックス、テ

キストボックス、リストボックスなどがあり、プログラム作成者はこの部品を選択してフォー

ム上に貼り付けることになります。

⑦ 変数

プログラム実行中に、データを一時的に格納するために使用される領域のことで、プログラ

ム作成時に任意の名前を付けて定義します。(変数は、Dim といわれる命令で確保します)

5.3.3 変数の定義

ビジュアルベーシックソフトウェアを使ってプログラムを作成する場合、データ格納用領域として変

数と言われる領域を確保します。この変数は、どのようなデータを格納するかにより定義方法を変える

必要があります。 ビジュアルベーシックでは、以下の表に示すような種類を提供しています。

型 表記 バイト数 型宣言 有効範囲

整数 Integer 2 %

(A%)

-32,768~32,767

長整数 Long 4 &

(A&)

-2,147,483,648~2,147,483,647

文字列 String 宣言分 $

(A$)

0~2GB(32 ビットシステム)

0~65400(16ビットシステム)

新欲張り電子工作(第5章)

5-11

バイト Byte 1 0~255

ブール Boolean 2 真(True)

偽(False)

単精度浮

動小数点

Single 4 !

(A!)

負値:-3.402823E38~-1.401298E-45

正値:1.401298E45~3.402823E38

倍精度浮

動小数点

Double 8 #

(A#)

負値:

-1.79769313486232E308~-4.94065645841247E-324

正値:

4.9406564584124E-324~1.79769313486232E308

通貨型 Currency 8 @

(A@)

-922,337,203,685,477.5808~

922,337,203,685,477.5807

日付型 Date 8 西暦100年 1 月 1 日~

西暦9999年12月31日

時刻は、0:00:00~23:59:59

バリアン

Variant 決まって

いない

代入されるデータにより変化しますので、特に

規定はありません。

オブジェ

クト

Object 4 任意のオブジェクトへの参照

注意:型宣言の( )の中は、変数 A に対して型宣言をしたい場合の指定形式を表しています。

補足:

変数は以下の形式で宣言します。

Dim 変数名 As 型表記 ⇒ 例:Dim Goukei As Integer

一つの Dim で複数の変数を宣言した場合、最初以外の変数はバリアント型になります。

5.3.4 演算子の定義

ビジュアルベーシックにてプログラムを作成する場合の演算子には、算術演算子、比較演算子、論理

演算子、及び文字列連結演算子があります。プログラムは、これらの演算子を組み合わせて作られます。

① 算術演算子

演算種 演算子 例題 例題の結果

加算 + A=20+10 30

減算 ― A=20-10 10

乗算 * A=20*10 200

除算 / A=20/10 2

べき乗 ^ A=5^2 25

新欲張り電子工作(第5章)

5-12

整数除算 ¥ A=11¥2 5

余り Mod A=11 Mod 2 1

② 比較演算子

演算種 演算子 例題

等しい = If A=B Then………Else………End If

等しくない <> If A<>B Then ……Else……….End If

未満 < If A<B Then ……. Else ………End If

以下 <= If A<=B Then ……. Else ………End If

より大きい > If A>B Then ……. Else ………End If

以上 >= If A>=B Then ……. Else ………End If

文字列パターン比較 Like If A Like “*.dat" Then ... Else …End If

? :任意の1文字(例:abc->a?c)

* :任意の複数文字(例:abbbbc->a*a)

# :任意の数字1文字(例:a2c->a#c)

オブジェクト変数比較 Is If obj1 Is obj2 Then …. Else …End If

注意:

例題の….部分には、実際の実行文を挿入します。

③ 論理演算子

演算種 演算子 例題

論理積(かつ) And If A>B And C>D Then ….Else … End If

論理和(または) Or If A>B Or C>D Then ….Else … End If

否定 Not If Not C Then ….Else … End If

排他的論理和 Xor IF A>B Xor C>D Then … Else … End If

論理等価 Eqv IF A>B Eqv C>D Then … Else … End If

A>B と C>D の比較結果が同じ時に真となります。

論理包含 Imp IF A>B Imp C>D Then …. Else ….End If

注意:

例題の….部分には、実際の実行文を挿入します。

④ 文字列連結演算子

演算種 演算子 例題 結果

文字列連結 & A=”ABC"&"DEF A=”ABCDEF”

新欲張り電子工作(第5章)

5-13

文字列連結 + A=”ABC”+”DEF” A="ABCDEF”

補足:

演算子には以下のような優先順位があります。

演算子種別の優先度

算術演算子>比較演算子>論理演算子

算術演算子内での優先度

“^”>“*”又は”/“>”¥“>”Mod“>”+“又は”-“>”&“

注意:同等の優先度を持つものは、先に記述されたものが優先となります。

比較演算子内での優先度

先に記述されたものが優先となります。

論理演算子内での優先度

Not>And>Or>Xor>Eqv>Imp

5.3.5 基本的なプログラム定義、及び制御命令構文

ビジュアルベーシックでプログラムを作成する場合に使用される、基本的な構文及び制御命令は以下

の通りで巣。

構文 意味と使用方法 適用例

Sub プロシージャ名()

・・・・

End Sub

VB では基本的にはコントロール

毎にプロシージャ(プログラム)

を作成します。このプロシージャ

を定義する場合に、この“Sub~

End Sub”を使用します。

実行結果は返却できません

Sub Test()

[処理]

End Sub

Function 関 数 名 (X As

Integer, Y As Integer) As

Integer

・・・・・・・

End Function

任意の関数を定義する構文です。

この関数に対し、複数の引数を設

定することができます。また、実

行結果を変数として返却できま

す。

Function 構文の最後に設定する

属性(As Integer)は、返却値

を返す時のデータの型となりま

す。

Sub Test()

Ret=Func1(10)

End

Function Func1(A As Integer) As

Integer

Func1=A*10

End Function

<例題説明>

Func1 の実行結果として、10の10倍

の値が Ret 変数に返却されます。

If 条件1 Then 条件に応じて処理内容を変える If 変数1=1 Then

新欲張り電子工作(第5章)

5-14

[処理1]

[ElseIf 条件2 Then

[処理2]

[Else

[処理 3]]]

EndIf

場合に使用する命令です。

補足:

[ ]で囲まれた部分は省略可能で

す。また、ElseIf 条件処理部分

を繰り返すことも可能です。

変数2=100

ElseIf 変数1=2 Then

変数2=200

Else

変数2=30

EndIf

<例題説明>

変数1が1の時は変数2に100を、

2の時は200を、それ以外の時は3

00を挿入する例文です。

Select Case 変数

[Case 値:

[処理]]

[・・・・・・・・・・]

[Case Else:

[処理]]

End Select

変数の値に応じて異なる処理を

行いたい場合に使用される命令

です。If 文でも可能ですが、変

数の値に応じた処理の数が多い

場合、“Select Case”の方が分

かりやすい構文となります。

[ ]で囲まれた部分は省略可能

です。また、“Case 値”条件処

理部分を繰り返すことも可能で

す。

Select Case 変数1

Case 1:

変数2=100

Case 2:

変数2=200

Case Else:

変数3=300

End Select

select case 変数1

case is >=100:

変数 2=1;

case is >20:

変数 2=2

case else:

変数 2=3

end select

<例題説明>

変数1が1の時は変数2に100を、

2の時は200を、それ以外の時は3

00を挿入する例文です。

For 変数=初期値 To 最終値 [Step 増分]

[処理]

Next 変数

変数 2=0

For 変数1=0 To 10 Step 2

変数 2=変数2+1

新欲張り電子工作(第5章)

5-15

処理をある条件回数分繰り返

したい場合に使用される命令

です。

変数に初期値で指定された値

から、最終値で設定された値ま

で、ステップ値で指定された間

隔で変化し、その回数分[処理]

部分が実行されます。

Next 変数1

<例題内容>

変数1の内容が、”0,2,4,6,8,10”と

変化しながら変数 2 の計算処理が実行

され、変数1が10を超えた時点で

For…Next 文を終了し、次の処理へと進

みます。変数2は、この時の繰り返し

回数が保存されます。

Do Until 条件式

処理

Loop

[処理]を、ある条件の場合のみ

繰り返したい場合に使用する

命令です。

条件式に満足した場合も[処

理]は実行され、その後で Loop

の次の文に進みます。

“Until 条件式”部分は、Do

文の後ろではなく、Loop 文の後

ろでも構いません。

Do Until 変数1=100

変数 2=変数2+1

変数 1=変数 1+1

Loop

又は

Do

変数 1=変数 1+1

変数 2=変数2+1

Loop Until 変数1=100

<例題説明>

変数1が100となるまで“変数2+

1”の計算を実行します。

Do While 条件式

処理

Loop

[処理]を、ある条件の場合のみ

繰り返したい場合に使用する

命令です。

条件式に満足している間だけ

[処理]は実行され、条件が成り

立たなくなると Loop の次の文

に進みます。

“Until 条件式”部分は、Do

文の後ろではなく、Loop 文の後

ろでも構いません。

Do While 変数1<100

変数 1=変数 1+1

変数 2=変数2+1

Loop

又は

Do

変数 1=変数 1+1

変数 2=変数2+1

Loop While 変数1<100

<例題説明>

変数1が100未満の時のみ、“変数2

+1”の計算を実行します。

While 条件式

処理

Wend

[処理]を、ある条件の場合のみ

繰り返したい場合に使用する

命令です。

条件式に満足している間だけ

[処理]は実行され、条件が成り

While 変数1<100

変数 2=変数2+1

変数 1=変数 1+1

Wend

<例題説明>

新欲張り電子工作(第5章)

5-16

立たなくなると wend の次の文

に進みます。

変数1が100未満の時のみ、“変数2

+1”の計算を実行します。

Goto ラベル名 無条件に特定の番地に分岐し

たい場合に使用する命令です。

分岐先であるラベルは、“ラベ

ル:”と指定します。

Goto Label1

変数1=変数 1+1

Labell:

変数2=変数 2+1

<例題説明>

Goto 命令が実行されると、変数1の計

算は行われず、変数2の計算に進みま

す。

Stop 処理を一時中断する場合に使

用します。

VB はこの命令を検出すると処

理を一時中断(ブレークポイン

トと同じ動作)し、開始ボタン

が押されると、その次の文から

処理を続行します。

変数1=変数 1+1

変数 2=変数 2+1

Stop

変数3=変数 3+1

<例題説明>

変数2の計算を行った時点で処理を中

断し、「開始」ボタンが押されると、変

数3の計算を行います。

Exit Do

又は

Exit For

又は

Exit Sub

又は

Exit Function

又は

Exit Property

ループ文や、プロシージャ(サ

ブルーチン)から抜け出す場合

に使用します。

Do Until 変数1=100

変数 2=変数2+1

変数 1=変数 1+1

If 変数3=”End” Then

Exit Do

EndIf

Loop

<例題説明>

Do ループ中に、変数の値が“End”とな

った場合に Do ループを終了し、Loop

の次の命令を実行します。

End プログラムを終了します。 End

新欲張り電子工作(第5章)

5-17

5.3.6 プログラム作成上の主な制約

ビジュアルベーシックでプログラミングする場合の、基本的な制約は以下の通りです。

制約項目 制約内容 使用例

コメントを挿入する場合の

制約

各行の任意の場所に“‘”を記述

すると、その行のそれ以降の記

述はコメントとして扱われ、実

行時は無視されます。(プログラ

ムの注釈などに使用されます)

‘ コメントです。

変数1=1 ‘変数1は1です。

<使用例説明>

“変数1=1”以外の部分は、全てコ

メントとして扱われます。

変数名に対する制約 先頭の文字は、英文字か漢字で

なければなりません。

”_“以外の特殊文字(%や#

など)は使わないでください。

半角で255文字までです。

変数1=1

ABCD_EFG=1

<例題説明>

上記は正しく認識されますが、

“1ABC”は変数として許されません。

データの宣言に関する制約 データの型により指定する方法

が異なります。

数字:直接記述します。

文字:“で囲んで記述します。

変数:そのまま記述します。

関数:そのまま記述します。

変数1=999

変数1=“ABCD”

変数1=”漢字“

変数1=Date

<例題説明>

変数1には右辺で指定された内容が入

ります。

配列宣言における制約 配列を宣言する場合は、“Dim

変数(n) As …”で指定しま

す。

2次元配列は、上記の変数定義

部分で、変数(n,m)と記述しま

す。

また、参照する場合は、変数(n)、

又は変数(n,m)という形式で参

照します。n,m は変数でも指定

できます。

Dim 変数1(10) As Integer

Dim 変数2(5,5) As Integer

変数1(5)=100

変数 2(2,2)=200

<例題説明>

変数1は、変数(1)~変数(10)の、

10ヶの領域が確保され、変数1(5)

に100が入ります。変数2は、変数

(1,1)~変数(5,5)の、25

ヶの領域が確保され、変数2(2,2)に

は200が入ります。

動的配列機能における制約 大きさが動的にしか定まらない

場合は、“ReDim 変数(n)

As …”、及び“ReDim”に対

する再設定である、” ReDim

Preserve 変数(n)“の形式で記

述します。

ReDim 変数1(10) As Integer

ReDim Preserve 変数1(20)

<例題説明>

最初の“ReDim”では、変数1の内容が

初期化されますが、2回目の“ReDim

新欲張り電子工作(第5章)

5-18

“ReDim 変数(n) As

…”を宣言した場合は、それま

で変数に設定された内容は初期

化されます。但し、“ ReDim

Preserve…

“の場合は変数の内容は保持さ

れます。

Preserve”では、変数1(1)~変数

1(10)までの内容は保持されます。

変数の有効範囲に関する制

1つのプログラムの中で共通に

変数を使う場合は、ジェネラル

プロシージャの中で変数を定義

します。

Dim 変数1 As Integer

public 変数 2 As Integer

<例題説明>

変数1、及び変数2はどのプロシージ

ャからでも参照できます。

新欲張り電子工作(第5章)

5-19

5.3.7 主な関数1

ビジュアルベーシックでは、一般的に使用される様々な処理プログラムを関数として提供しています。

ビジュアルベーシックでのプログラミングは、この関数を利用して作成すれば、極めて容易に行うこと

ができます。以下に代表的な関数を紹介します。

関数名と書式 使用例 結果

Format(A,”書式“)

Format(2003.5,”00000.00”)

Format(2003.5,”#####.##”)

Format(2003.5,”##,##0.00”)

Format(2003.5,”\\##0.00”)

Format(2003,”####年度”)

02003.50 となります。

2003.5 となります。

2,003.50 となります。

\2003.50 となります。

2003 年度となります。

Left(A,n) X=Left(A,5) 文字列変数xに、文字列変数 A の左側から5文

字分が格納されます。

Right(A,n) X=Right(A,5) 文字列変数xに、文字列変数 A の右側から5文

字分が格納されます。

Len(A) Y=Len(A) 数字型変数 Y に、文字列変数 A に保存されてい

る文字列の長さが格納されます。

Mid(A,I,n) X=Mid(A,3,5) 文字列変数 X に、文字列変数 A に保存されてい

る3文字目から5文字分の文字列が格納されま

す。

Str(n) X=Str(2003) 文字列変数 X に、文字列”2003”が格納されま

す。

Val(n) Y=Val(“2003”) 数字型変数 Y に、2003 の数値が格納されます。

Date X=Date 文字列変数 X に、今日の日付が文字列形式で格

納されます。

Time X=Time 文字列変数 X に、現在の時刻が文字列形式で格

納されます。

Timer Y=Timer 数字型変数 Y に、午前0時からの秒経過時間が

数値で格納されます。

Abs(A) Y=Abs(-10) 数字型変数 Y に、”-10”の絶対値である”

"10”が数値形式で格納されます。

Sin(A)

A はラジアン

Y=Sin(π/2) 数字型変数 Y に、Sin(π/2)の結果である1が

数値形式で格納されます。

Cos(A)

A はラジアン

Y=Cos(π/2) 数字型変数 Y に、Cos(π/2)の結果である0が

数値形式で格納されます。

Tan(A) Y=Tan(π/4) 数字型変数 Y に、Tan(π/4)の結果である 2.718

新欲張り電子工作(第5章)

5-20

A はラジアン が数値形式で格納されます。

Exp(A)

指数

Y=Exp(1) 数字型変数 Y に、exの結果である1が数値形式

で格納されます。

Fix(A)

整数化

Y=Fix(3.5) 数字型変数 Y に、3.5の小数点を除いた、3

が数値形式で格納されます。

Int(A)

最大整数化

Y=Int(3.5) 数字型変数 Y に、3.5を超えない最大の整数

3が数値形式で格納されます。

Log(A)

対数

Y=Log(10) 数字型変数 Y に、Log10 の値である 2.3026 が数

値形式で格納されます。

Sqr(A)

平方根

Y=Sqr(4) 数字型変数 Y に、4の平方根である2が数値形

式で格納されます。

注意:A は基本的には、変数名の設定か直接入力を行います。

補足:

Format 文は、設定された書式に従って数値、日付、時間、及び文字列等に変換し、表示する関数です。

この Format で設定できる書式には様々なものがあります。主な内容は以下のとおりです。

書式 内容 使用例

<数値関連の書式>

0 余った部分を0と表示します Format(x,”0000”)

# 余分な0は表示しません Format(x,”####”)

. 小数点 Format(x,”###.###”)

, 1000 単位の区切り記号 Format(x,”###,###”)

¥ 先頭に¥マークを表示します Format(x,¥¥#,###”)

―又は+又は$又は(又は)

又はブランク

そのまま表示します Format(x,”+####”)

E+又は E-,又は e+又は e- 指数表示をします。 Format(x,”#.###e+00”)

Yes/No 0以外は Yes と表示します Format(x,”Yes/No”)

True/False 0以外を True と表示します。 Format(x,”True/False”)

On/Off 0以外を On と表示します。 Format(x,”On/Off”)

General Number そのまま表示します。 Format(x,”GeneralNumber”)

Currency 通貨形式で表示します。 Format(x,”Currency”)

Fixed 整数部1桁、小数部2桁を基本と

して表示します。

Format(x,”Fixed”)

Standard 1000の桁毎に“、”と表示し、

小数点2桁まで表示します。

Format(x,”Standard”)

Percent 数値を100倍し、%記号を表示し

ます。(少数2桁)

Format(x,”Percent”)

新欲張り電子工作(第5章)

5-21

Scientific 科学表記法で表示します。 Format(x,”Scientific”)

; 数値の正負に応じてパラメータの

形式を変えて表示します。

順番は、正、0、負で、“;”が1つ

の時は、正と0が第1パラメータ

を使用します。

Format(x,”0000;####;###.#”)

<日付関連の書式>

C 日付けと時刻をそのまま表示しま

す。

Format(Now,”c”)

d 又は dd 日付を1桁又は2桁で表示しま

す。

Format(Now,”dd”)

ddd 又は aaa 又は dddd 又

は aaaa

曜日を英語(d)又は日本語(a)

で表示します。(省略、非省略)

Format(Now,”aaaa”)

ddddd 又は dddddd 年月日で表示します。(短形、長形) Format(Now,”dddddd”)

w 又は ww 曜日を数字で表示します。(週内番

号、又は年内番号)

Format(Now,”ww”)

m 又は mm 又は mmm 又

は mmmm

月を表示します。(数値表示、英語

省略、英語フルスペル表示)

Format(Now,”mmmm”)

q 年内4半期を表示します。(1~4) Format(Now,”q”)

g 又は gg 又は ggg 又は e

又は ee

年号を文字又は数字で表示しま

す。

Format(Now,”ee”)

y 何日目かを表示します。 Format(Now,”y”)

yy 又は yyyy 西暦を表示します。 Format(Now,”yyyy”)

h 又は hh 時を表示します。 Format(Now,”hh”)

n 又は nn 分を表示します。 Format(Now,”nn”)

s 又は ss 秒を表示します。 Format(Now,”ss”)

ttttt 時分秒を表示します。 Format(Now,”ttttt”)

AM/PM 又は am/pm 又は

A/P a/p 又は AMPM

時刻を12時間制で表示します。 Format(Now,”AMPM”)

補足:

以下の Format 分を検証してみましょう。

Format(Now,”yyyy/mm/dd hh:mm:ss AM/PM ggge 年 mm 月 dd 日(aaaa)“)

新欲張り電子工作(第5章)

5-22

5.3.8 主な基本関数2

ビジュアルベーシックを使って対話を伴う一般的な手続き型プログラムを作成する場合に必要となる

主な関数は以下の通りです。

① 対話処理用関数

関数名と構文 パラメータの内容

MsgBox(A[,B][,C][,D,E]) メッセージ表示画面を表示します。

A:メッセージボックスに表示する、任意の文字列を指定します。

B:表示するボタン種を指定します。(省略可)

vbOKonly : [OK]

vbOKCancel : [OK] [キャンセル]

vbYesNo : [はい] [いいえ]

等などがあります。

C:メッセージボックスに表示する、タイトルバーに表示する文字

列を指定します。(省略可)

D:ヘルプファイルの名前を設定します。(省略可)

E:ヘルプ情報の番号を指定します。(省略可)

<使用例>

Ret=MsgBox(“選択”, vbDefaultButton1+vbYesNo,”選択処理”)

変数名”Ret”に応答結果が返却されます。

InputBox(A[,B][,C][,D][,E][,F,G]) テキスト入力画面(インプットボックス)を表示します。

A:画面上に表示するメッセージを指定します。

B:入力画面のタイトルバーに表示する文字列を指定します。(省

略可)

C:インプットボックス上のテキスト入力領域に表示する文字列

を指定します。この文字列が入力のデフォルト文字列となり

ます。(省略可)

D:インプットボックス画面を表示する場合の、モニターの左端

からのX軸オフセット値を指定します。(省略可)

E:インプットボックス画面を表示する場合の、モニターの上端

からのY軸オフセット値を指定します。(省略可)

F:ヘルプファイルの名前を設定します。(省略可)

G:ヘルプ情報の番号を指定します。(省略可)

使用例:

Ret=InputBox(”入力せよ”,”入力画面”,”TEST”)

変数名“Ret”に入力文字列が返却されます。

新欲張り電子工作(第5章)

5-23

② ファイル処理用関数

関数 機能内容

Open ファイル名 For Input|OutPut|Append As #n

シーケンシャルファイルの読み書きを可能とする関数です。

ファイル名:使用するファイルの名前を指定します。

Input|OutPut|Append :ファイルのアクセス方法を指定します。

Input:入力モードでアクセスします。

OutPut:書き込みモードでアクセスします。

Append:ファイルへの追加モードでアクセスします。

#n :任意のファイル番号を指定します。

Close ファイル番号リスト

Open されているファイルをクローズします。

ファイル番号リスト:以下の指定を行います。

#n :#n のファイルをクローズします。

#n,#m,, :指定されたファイルを全てクローズします。

省略 :オープンしている全てのファイルをクローズします。

Write #n、出力リスト

出力リストで指定された内容が、カンマで区切られてファイル(ファイル番号 n)

に格納されます。また、文字列は、“で囲まれて格納されます。

例:

Write #1,“データ”、100,200

“データ”、100,200CRLF をファイルに書き込みます。

CR:キャリッジリターンコード LF:ラインフィードコード

Write #1、

空白行を書き込みます。

Print #n、出力リスト

一行分のデータをファイル(ファイル番号 n)に書き込みます。

例:以下の形式でファイルに書き込まれます。

Print #1 :空白行と改行

Print #1,変数1 :変数1の内容と改行

Print #1,“ABC” :ABC の文字列と改行

Print #1,“ABC”; :ABC の文字列のみ

Print #1,“ABC”;Tab;”DEF” :ABC と DEF をタブで区切り、最後に改行

Print #1,Tab(10);”ABC” :10 桁目から ABC と改行

Print #1,Spc(3);”ABC”; :空白3文字と ABC 文字列及び改行

Line Input #n、変数名

1 行分のデータをファイルから読み取ります。

新欲張り電子工作(第5章)

5-24

例:

Line Input #1、変数1 :変数1に 1 行分のデータがファイル

から読み込まれます。

InPut #n,変数リスト

ファイルから読み込み変数に格納します。

InPut #1、変数1,変数2、、

変数1、変数2、・・・にファイルから読み込んだ内容を格納します。

Input (n,#n)

指定された文字数を読み込み、返却します。

変数1=Input(20、#1)

ファイルから20文字を読み込み、変数1に格納します。

Open ファイル名 For Random As #n Len=変数1

ランダムアクセスでのアクセスを可能とします。(変数1は格納レコード長です。)

<使用例>

Open “C:¥myDoc¥ファイル.dat” For Random As #1

Len=200

レコード長200バイトのランダムファイル(ファイル.dat)をアクセス可能とし

ます。

Open ファイル名 For Binary As #n

バイナリーモードでファイルの読み書きを可能とする命令です。

Put #n、[バイト位置]、変数名

注:ランダムフ

ァ イ ル の 場 合

は、バイト位置

に代わりにレコ

ード番号を指定

します。

指定バイト位置(省略時は、現在の次の位置)に変数名に設定されているデータ

を書き込みます。

<使用例>

Put #1,100、変数1

変数1に格納されているデータを、ファイルの100バイト目から書き込み

ます。(バイト位置は1から指定します)

Get #1,[バイト位置]、変数名

注:ランダムフ

ァ イ ル の 場 合

は、バイト位置

に代わりにレコ

ード番号を指定

します。

指定バイト位置(省略時は、現在の位置の次から)から読み込み、変数名に格納

します。

<使用例>

Get #1,100,変数1

ファイルの100バイト目から読み込み、変数1に格納します。

Input (文字数、#n)

指定文字数分をファイルから読み込みます。

<使用例>

新欲張り電子工作(第5章)

5-25

変数1=Input(100,#n)

ファイルの100バイト目からデータを読み込み、変数1に格納します。

③ その他の関数

関数名 機能内容

EOF ファイルの終わりを調べるための関数です。

<使用例>

Do While Not EOF(1)

Line Input #1、変数1

Loop

RGB RGB カラーを宣言する関数です。

<使用例>

.ForeColor=RGB(0,0,0) :黒で設定されます。

.ForeColor=RGB(255,0,0) :赤で設定されます。

.ForeColor=RGB(0,0,255) :青で設定されます。

.ForeColor=RGB(0,255,0) :緑で設定されます。

④ 通信用関数とプロパティ

RS232C を介して通信を行う場合に使用される関数とプロパティです。ビジュアルベーシック

で通信プログラムを作成する場合は、MSComm コントロールを使用して行いますが、この

MSCommm コントロールをビジュアルベーシックで使用できるようにするためには以下の操作

を行う必要があります。

・ 「プロジェクト」プルダウンメニュー⇒「コンポーネント」操作により表示される“コン

ポーネント画面”のコントロールタブにおいて、“MicroSoft Comm Control(6.0)”をチ

ェックします。

・ 上記操作により、ビジュアルベーシックのツールボックス上に通信用アイコン(電話アイ

コン)が追加されますので、この通信用コントロールアイコンをフォーム上に貼り付けま

す。

・ プログラム上で、通信条件(通信速度やパリティーの設定など)を、この通信用コントロ

ールに対するプロパティに設定します。

プロパティ設定又は関数 機能内容

MSComm1.PortOpen=True 通信用ポートを使用可能とします。

通用は、Form_Load プロシージャにて宣言します。

MSComm1.PortOpen=False 通信用ポートを使用不可とします。

通常は、Form_Unload プロシージャにて宣言します。

InData=MSComm.Input 通信ポートから1バイトのデータを読み込み、InData

に格納します。

新欲張り電子工作(第5章)

5-26

補足1:

MSComm1_OnComm プロシージャを介して 1 バイト

毎の割り込みを使って受信する方法と、終了コードを

検出するまで MSComm_Input マクロを繰り返す方法

があります。後者の場合は、以下のようなプログラム

を作成します。

Do

DoEvent

RdData= MSComm1_Input

InData=InData&RdData

Loop Until InStr(RdData,Chr$(&HD))<>0

補足2:

DoEvent は、通信中(Do ループ)に終了等の割り込む

処理を行うために必須のコマンドです。

InStr 文は、終了コードとして“CR”が通信されること

を調べるために必要となります。

Settings プロパティ 通信の約束事を設定するために必要となるプロパティ

ーです。この設定は、通信相手と同じ設定としなけれ

ばなりません。

例:9600bps、パリティー無し、8 ビット転送、ストッ

プビットが1ビットの転送を行う場合は以下を設定し

ます。

9600,n,8,1

補足:

上記以外に、通信ポート番号を設定、DTR の使用有無

などに関する以下のプロパティの設定が必要です。

CommPort 通信ポート番号

DTREnable DTR 信号使用有無

RTSEnable DTS 信号使用有無

その他

新欲張り電子工作(第5章)

5-27

5.4 VB によるプログラム作成の流れ

本項では、VB プログラムの起動から、プログラムの作成、及び終了までを順を追って見ていきます。

5.4.1 VB プログラムの起動

ビジュアルベーシックソフトウェアの起動方法には以下のような方法があります。

1)「スタート」ボタン⇒「すべてのプログラム」⇒「ビジュアルベーシック」(Microsoft VisualBasic6.0)

の順に選択することによりビジュアルベーシックソフトウェアを起動します。

① 新規にプロジェクトを作成したい場合は、「ファイル」⇒「新しいプロジェクト」を選択しま

す。

② 既に作成されたプロジェクトを更新する場合は、「ファイル」⇒「プロジェクトを開く」を選

択し、更新したいプロジェクト名を選択します。

③ ビジュアルベーシックソフトウェア起動時に表示される“新しいプロジェクト”画面上で、

“標準.EXE”を選択します。

新欲張り電子工作(第5章)

5-28

2)ビジュアルベーシックソフトウェアで作成された文書をマウスの左ボタンでダブルクリックします。

補足:基本的には、ワードやエクセルソフトウェアと全く同じです。

5.4.2 フォームに対する、表題の設定

フォームとは、ビジュアルベーシックでプログラミングする場合の基準画面であり、この上に各種の

コントロール(ボタンや各種ボックスなど)を配置するもので、このプログラムを実行した時に、この

フォームとフォーム上に配置された各種コントロールが表示されることになります。

まずはフォームのプロパティのウインド上で、このフォーム上に表示されるプログラムの表題を以下の

手順で設定します。

1)フォームをクリックすることにより表示されるプロパティ上で“Caption”を探します。

2)“Caption”プロパティに対して、任意の表題を入力します。(初期値は、”Form1“と定義されてい

ます。

これがフォームであり、実行時のユーザー

インターフェース画面となります。

この部分を変更し

ます。

新欲張り電子工作(第5章)

5-29

5.4.3 最適コントロールの選択

ビジュアルベーシックソフトウェアにおいてソフトウェアを作成する場合、ツールボックス上の各種

コントロールをフォーム上に配置し、その各々に対しプロシージャと言われるプログラムを作成します。

このフォーム上に配置されたものが、ユーザーインターフェースとなります。

上記理由から、最適なユーザーインターフェースを実現するためには、最適なコントロールを検証し、

選択する必要があります。

1) 主なコントロール

ビジュアルベーシックソフトウェアがツールボックス上で提供する標準的なコントロールは以下の通

りです。

ポインター

ラベル

フレーム

チェックボックス

コンボボックス

水平スクロールバー

タイマー

ディレクトリリスト

ボックス

シェイプ

イメージ

OLE コンテナ

ピクチャーボックス

テキストボックス

コマンドボタン

オプションボックス

リストボックス

垂直スクロールバー

ドライブ

リストボックス

ファイル

リストボックス

ライン

データ

新欲張り電子工作(第5章)

5-30

2) コントロールの機能概要

ツールボックスに装備されている標準的なコントロールの機能、及び用途は以下の通りです。

コントロール名 用途 主なプロパティ

ポインター ポインターがフォームに貼り付けるものではなく、マ

ウス操作モード切り替え(コントロール選択状態を解

除し、再度選択可能にします)などに使用します。

なし

ラベル フォーム上に文字列を表示する目的で使用されます。 AutoSize

BorderStyle

WordWrap

フレーム フォーム上にカテゴリー毎にフレームを作り、そのフ

レームに各種のコントロールを貼り付けるなどの用途

に使用されます。

Caption

チェックボックス 項目毎にオンかオフかを設定する場合に使用します。 Caption

Value

コンボボックス 複数個の選択項目がある場合、その中から一つの項目

を選択する場合に使用します。このコンボボックスは、

ドロップダウンリストボックスとも言われます。

Style

Sorted

AddItem

Text

水平スクロールバ

ある情報範囲の中の現在の位置を水平方向で明示的に

設定する場合に使用されます。

Max

Min

SmallChange

LargeChange

Value

タイマー 規定時間が経過して時点でタイマー割り込みを発生さ

せることにより、タイマーの監視をする場合に使用さ

れます。

Interval

Enabled

ディレクトリ

リストボックス

カレントドライブのディレクトリパスを階層構造で表

示し、任意のディレクトリを選択させる場合に使用さ

れます。

シェイプ フォーム内に長方形や正方形、楕円などを描く場合に

使用されます。

Shape

FillStyle

イメージ 画像を表示する場合に使用されます。このイメージは

クリック時に割り込みを発生させるイベント機能も持

っています。

Stretch

Picture

BorderStyle

OLE コンテナ 自分で作成したビジュアルベーシックアプリケーショ

ンの中で、エクセルなどの他のアプリケーションを使

う場合に使用されます。

SaveToFile

ReadFromFile

DoVerb

新欲張り電子工作(第5章)

5-31

Close

ピクチャー

ボックス

イメージやテキストを表示するために使用されます。

基本的にはイメージと同じですが、図形描画もできる

などの機能も持っています。

Picture

BorderStyle

AutoSize

AutoRedraw

テキストボックス

テキストの入力と表示を行う場合に使用されます。 MultiLine

ScrollBars

Text

コマンドボタン

何らかの処理(開始、終了、中断など)を行う場合に

使用されます。

Cancel

Caption

Default

TabStop

オプションボック

複数の項目のなかから一つのものを選択する場合に使

用されます。

Caption

Value

リストボックス

予め用意された複数の項目リストを表示し、どれか一

つを選択する場合に使用されます。

Colums

Sorted

AddItem

RemoveItem

Clear

Text

List

垂直スクロールバ

ある情報の範囲の中で、現在の位置を示したり、設定

する場合に使用されます。

Max

Min

SmallChange

LargeChange

Value

ドライブ

リストボックス

選択可能なデバイスドライブのリストを表示し、ドラ

イブの選択を行う場合に使用します。

Drive

Path

ファイル

リストボックス

カレントディレクトリ上にあるファイル名のリストを

表示し、ユーザに任意のファイルを選択させる場合に

使用します。

Drive

Path

Filename

ライン

フォーム内に直線(水平、垂直、斜め)を描く場合に

使用されます。

BorderStyle

データ

既存のデーターベースの情報をフォーム上に表示する

場合などに使用されます。このデータでは、アクセス、

dBase、Excel、Lotus などのデータベースを扱う

ことができます。

DatabaseName

RecordSource

フォーム いろいろなコントロールを配置する土台として使用さ

れます。

BorderStyle

ControlBox

新欲張り電子工作(第5章)

5-32

Caption

MaxButton

MinButton

WindowState

Name

注意:本説明書ではデータに関しては割愛します。

3) プロパティの意味について

各種のプロパティに値を設定することで、対応するオブジェクトの設定が異なります。以下に主なプ

ロパティを設定したときのオブジェクトの切り替わりは以下の通りです。

プロパティ名 意味 設定内容

AutoSize

大きさを表示するテキストの

大きさに応じて自動調整する

か否かを指定します。

True :自動調整します。

False :自動調整は行いません。

BorderStyle

境界線やラインなどの表示ス

タイルを指定します。

0:枠なし 1:実線固定

2:可変 3:固定ダイアログ

4:固定ツールウインド 5:ツールウインド

WordWrap 単語の複数行渡りを抑制する

か否かを指定します。

True :複数行渡りを抑制します。

False :複数行渡りを抑制しません。

Caption 表示文字列を指定します。 任意の文字列を指定します。

例:Frame1.Caption=“練習”

Value チェックボックスやオプショ

ンボックスでの設定内容確認

や初期値設定に使用します。

<チェックボックスの場合>

0:チェックなし 1:チェックあり

<オプションボックスの場合>

True:選択状態 False:非選択状態

<その他>

設定されている値の取得、設定ができます。

スクロールバーの場合は、最初の摘みの位置を設定し

ます。

Style

表示スタイルを設定します。 0:ドロップダウンコンボ(デフォルト)

1:標準コンボ

2:ドロップダウンリスト(編集不可)

Sorted

表示順番を規定します。 True :リストを昇順で表示します。

False :リストを入力順に表示します。

AddItem

リストボックスに表示される

アイテム(項目)を追加設定

以下の指定で、日本、米国がリストボックス上に表示

されます。

新欲張り電子工作(第5章)

5-33

します。 List1.AddItem=”日本”

List1.AddItem=”米国”

Text 現在選択されているテキスト

を取得、又は設定します。

任意の文字列を設定します。

例:List1.Text=”練習”

Max

スクロールバーの摘みが最大

における値の設定を行いま

す。

任意の数値を設定します。

Min

スクロールバーの摘みが最小

における値の設定を行いま

す。

任意の数値を設定します。

SmallChange

スクロールバーでの、矢印ボ

タンをクリックした場合の移

動量を設定します。

任意の数値を設定します。

LargeChange

スクロールバーでの、摘みと

矢印ボタンの間をクリックし

た時の移動量を設定します。

任意の数値を設定します。

Drive

ドライブリストボックスを使

って、ドライブ名を取得する

場合に使用されます。

選択された、ドライブ名が得られます。

Path ディレクトリリストボックス

やファイルリストボックスを

使って、パスを取得する場合

に使用されます。

選択された、ディレクトリやファイルのパスが得られ

ます。

Filename ファイルリストボックスを使

って、ファイル名を取得する

場合に使用されます。

選択された、ファイル名が得られます。

DatabaseName

処理したいデーターベース名

を指定する場合に使用されま

す。

説明省略

RecordSource データーベース内のテーブル

を指定します。

説明省略

ControlBox

コントロールボックス(最小

化ボタンなど)の表示、非表

示などの設定に使用されま

す。

True :表示します。

False :非表示とします。

MaxButton

最大化ボタンの表示有無の設

定に使用されます。

True :表示します。

False :非表示とします。

MinButton 最小化ボタンの表示有無の設 True :表示します。

新欲張り電子工作(第5章)

5-34

定に使用されます。 False :非表示とします。

WindowState

このアプリケーションが起動

された場合のウインドの形状

設定に使用されます。

0 :標準(通常ウインド表示)

1 :最小化(タスクバー表示)

2 :最大化(最大画面表示)

Name フォーム識別名の設定に使用

されます。

任意の文字列を設定します。

Font 使用されるフォントの形状や

タイプの設定に使用されま

す。

以下のような設定を行います。(詳細略)

xxx.FontBold=True/False

xxx.FontItalic=True/False

xxx.FontName=フォント名

xxx.FontSize=ポイント数

その他

Color 文字列や背景などに色を設定

する場合に使用されます。

xxx.Color=RGB 値

ColorIndex 文字列や背景などに色を設定

する場合に使用されます。

xxx.ColorIndex=インデックス番号

補足:

カラーインデックス番号(1~56)のいずれかを設

定します。

新欲張り電子工作(第5章)

5-35

5.4.4 コントロール配置とプロシージャの作成

コントロール毎にプロシージャを作成しますが、このプロシージャは、そのコントロールに適合した

ものでなければなりません。以下に、各々のコントロールに対する典型的なプログラミングについて記

述します。

1) フォームコントロールに対する各種コントロールの配置

フォームコントロール画面上に各種のコントロールを貼り付ける場合は、ツールボックス上にあるコ

ントロールアイコンをドラッグ&ドロップ操作を行うことにより任意の場所に貼り付けます。

2) 各種コントロールに対する最適なプロパティの設定

フォームコントロール上に配置された、任意のコントロールアイコンをクリックすることにより表示

されるプロパティ画面上で、そのコントロールに対応する最適なプロパティを設定します。

主な設定内容に関しては、“コントロールの機能概要”を参照ください。

ツールボックス フォームコントロール

コード表示ボタン オブジェクト表示ボタン

フォームレイアウト画面

プロパティ

新欲張り電子工作(第5章)

5-36

例えば、フレームコントロールの場合は、Caption プロパティに対してフレーム名を設定することによ

り、実行時にそのフレームコントロール画面上にその名前が表示されるようにします。

プロパティの設定は、プロパティ画面上で直接入力することにより行います。

3) フォームコントロールの実行時の最適位置の設定

各種のコントロールが配置されたフォームコントロールが実行される時に、画面のどの位置に表示す

るかを、フォームレイアウト画面上で設定します。場所の設定は、モニター上に表示されているフォー

ムのアイコンをドラッグ操作することにより行います。

新欲張り電子工作(第5章)

5-37

4) 各種コントロールに対するコードの作成

コード表示ボタンをクリックするか、フレームコントロール上に配置されたコントロールアイコンを

ダブルクリックすることにより表示される、以下のようなコード編集画面上でプログラムを記述します。

各コントロールに対応するプロシージャは以下の手順にて作成します。

(1) 以下の何れかの方法で、コントロールに対応するプロシージャの選択を行います。

① フレームコントロール上に貼り付けられたコントロールをダブルクリックします。

② プロシージャ選択メニューから対応するプロシージャを選択します。

(2) 動作条件設定メニュー上で、このプロシージャを実行する条件を選択します。

例えば、以下のような選択をします。

Click :シングルクリックで実行されます。

DblClick :ダブルクリックで実行されます。

(3) 対応するプロシージャに対するコード(プログラム)を記述します。

プロシージャ選択メニュー 動作条件設定メニュー

新欲張り電子工作(第5章)

5-38

5.4.5 プログラムの実行

ビジュアルベーシックで作成されたプログラムは、ビジュアルベーシック画面上のツールバーに配置

されている「開始」ボタンにより行います。また、一時停止する場合は、「中断」ボタンをクリックし、

再開は「継続」ボタン(「開始」ボタンが切り替わります)で行います。

なお、プログラムを終了させたい場合は、「終了」ボタンを使用します。

「開始」ボタンにより実行した場合、以下のような画面となります。

開始ボタン

中断ボタン

終了ボタン

新欲張り電子工作(第5章)

5-39

5.4.6 プログラムの保存と VB の終了処理

ビジュアルベーシックで作成されるプログラムは、基本的には“フォームファイル”と“プロジェク

トファイル”の2つのプログラムファイルから構成されますので、最低限この2つのファイルは保存さ

れなければなりません。但し、“プロジェクトファイルの保存”を実行した場合は、フォームファイルの保

存を行ってくれますので、以下のいずれかの方法で保存を行います。

1)「ファイル」プルダウンメニューの「プロジェクトの上書き保存」

2)「ファイル」プルダウンメニューの「名前を付けてプロジェクトの保存」

また、ビジュアルベーシックソフトウェアを終了させる場合は、他のアプリケーション同様に、ウイン

ド右上の「閉じる」ボタンか、「ファイル」プルダウンメニューの「終了」メニューで行います。

プログラムの保存はこのメ

ニューを使って行います。

「閉じる」ボタン

プログラム終了メニュー

新欲張り電子工作(第5章)

5-40

5.5 VB で基本的なプログラムを作ってみましょう

VB の基本的な機能を使って、以下のプログラムを作ることにより、VB 操作に慣れてください。

作りかたがわからない場合は、付録を参考にしながら作ってください。

1) クリックイベントによる操作

「A」に任意文字列を入力⇒「移動(A->B)」ボタンのクリック

「A」に入力された文字列を「B」に表示します。

「B」に任意文字列を入力⇒「移動(B->A)」ボタンのクリック

「B」に入力された文字列を「A」に表示します。

2) 変化イベントによる操作

「A」に入力すると「B」にもその内容を表示します。

「B」に入力すると「A」にもその内容を表示します。

「B」に対し、“END”と入力した場合、プログラムを終了します。

3) 加算演算操作

「A」と「B」に数値を入力し、「加算実行」を行った場合、その結果を「C」に表示します。

① 「A」,「B」に文字列を入力した場合の動作を確認すること

新欲張り電子工作(第5章)

5-41

② テキスト変数に数値を代入した場合、自動的に文字列変換が行われることを確認すること

例:Text1.Text=999 と Text1.Text=”999”は同じ結果となります。

③ Str 関数を使って計算結果(数値)を文字列に変換し、テキストボックスに表示する方法も確認する

こと

例:Text3.Text=Str(Val(Text1.Text)+Val(Text2.Text))

4) チェックボタンの確認操作

以下のようなチェックボタンのチェックを行い、「確認」ボタンをクリックした場合、チェック内容に

応じて以下のような文字列を結果に表示します。

チェック1のみ :チェック1が設定されています。

チェック2のみ :チェック2が設定されています。

両方 :チェック1,2が設定されています。

5) オプションボタンの確認操作

オプションボタンのチェックを行い、「確認」ボタンをクリックした場合、チェック内容に応じて以下

のような文字列を結果に表示します。

オプション1のみ :オプション1が設定されています。

オプション2のみ :オプション2が設定されています。

6) 任意演算操作

「A」と「B」に任意の数字を入力し、コンボボックス上で演算子を設定した状態で「実行」ボタンを

クリックすることにより、その演算結果を「結果」に表示します。

新欲張り電子工作(第5章)

5-42

注意:演算子には、“+”、“-”、“*”、“/”、“MOD”、”^“、”¥“の選択ができること。

① If 文のみで実現するプログラムを作成すること

② Case 文を使ってプログラムを作成すること

③ 演算子を“/”に設定し、「B」を 0 とした場合は、「C」に“演算不能”と表示すること

7)比較演算操作

「A」と「B」に任意の文字列(数値含む)を入力した状態で「比較実行」ボタンをクリックされた場

合、「A」と「B」を比較し、比較結果が該当するチェックボックスにチェックマークを表示します。

8) 論理演算操作

「A」と「B」に任意の数字を入力し、「比較演算」ボタンをクリックした場合、その演算結果を結果

として表示します。(比較演算は、数値 999 と比較し、入力データも数値として処理すること)

指定される論理演算子により以下の演算が行い、結果を“成立”、“不成立”として表示します。

AND :A>999 であり B>999 の場合は“成立”とすること

OR :A か B の何れかが 999 を超える場合は”成立“とすること

NOT :A が 999 と等しくない場合は“成立”とすること

Xor :A が 999 か B が 999 の場合のみ”成立“とすること(注:両方共に 999 は FALSE)

Eqv :A と B を共に 999 と比較した場合、その比較結果が同じ場合のみ”成立“とすること

Imp :A が 999 より大きく、B が 999 より大きくない場合のみ”成立“とすること

新欲張り電子工作(第5章)

5-43

9) 文字列連結演算操作

「A」と「B」と「C」に任意の文字列を入力し、「実行」ボタンがクリックされた場合、「A」と「B」

と「C」に入力された文字列を一つの文字列として結果に表示します。

注意:「A」,「B」,「C「の文字列の間に“、”がセパレータとして挿入されること

10)Private 共通関数の作成と活用

以下の画面において、演算用プロシージャ(演算及び結果を表示するプロシージャ)を独立に作成し、

「実行」ボタン処理用プロシージャからの要求により実行します。

A,B,及び演算子の値は引数として演算用プロシージャに渡します。

補足:

“Private Sub”で作成し、因数は、A,B は Integer タイプ、C は string タイプで渡します。

11)Function 共通関数の作成と活用

以下の画面において、演算用プロシージャ(演算及び結果を表示するプロシージャ)を独立に作成し、

「実行」ボタン処理用プロシージャからの要求により実行します。

なお、この演算プロシージャは、以下の条件を検出した場合、エラーコードを返却します。このエラ

ーコードにより「実行」ボタン処理用プロシージャはメッセージを表示します。

A 又は B にデータがない場合 :-1を返却します。

演算子が“/”で B の値が0の場合 :-2を返却します。

新欲張り電子工作(第5章)

5-44

正常に演算ができた場合 :0を返却します。

尚、メッセージは「結果」に対し以下のように表示します。

-1 :入力不正

-2 :分母が0です

補足:“Function Sub”で作成し、因数は、A,B は Integer タイプ、C は string タイプで渡しま

す。また、返却値は Integer タイプで返します。

12)1 次元配列の活用

20個分の一元配列を宣言し、その配列に出席番号順に名前を登録します。

次に、以下の「出席番号」に数値が入力されたら、その番号に対応する名前を抽出し、「名前」に表示し

ます。

補足:配列は、“Dim xxx(20) As String”で確保し、参照は、”xxx(n)“で行います。

13)2 次元配列の活用

9x9個分の 2 次元配列を宣言し、その配列に九九計算結果を登録します。

次に、以下の「入力1」又は「入力2」に数値が入力されたら、その番号に対応する九九算結果を抽出

し、「検索結果」に表示します。

補足:配列は、“Dim xxx(9,9) As Integer”で確保し、参照は、”xxx(n,m)“で行います。

14)繰り返し操作

新欲張り電子工作(第5章)

5-45

「開始値」で指定された値から、「終了値」で指定された値までを「ステップ値」で指定された間隔で

累積加算した場合の合計を、「実行」ボタンがクリックされた時点で、「結果」に表示します。

補足:開始値を1、終了値を10、ステップ値を1とした場合の結果は55です。

15)Format 文の活用

「数値入力」に任意の数値を入力し、「Format 入力」に所定のフォーマットを入力した状態で「実行」

ボタンをクリックした場合、その結果を「結果」に表示します。

フォーマット文は以下を使用すること。

“0000.00”

“####。##”

“##、##0.00”

“¥¥##0.00”

“####年度”

その他

注意:

数値入力テキストに“999.999 を、フォーマット文入力テキストに”000.00“を入力した状態

で実行した場合の結果と、フォーマット文に“000.000”を入力した場合の結果を確認すること。

数値入力に NOW と入力し、Format 入力に以下を設定して「実行」ボタンをクリックした場合、

Format 表に記載された編集が正しく行われることを確認します。

dddd :曜日の表示

dddddd :年月日の表示

mmmm :月の表示

ggg :和暦の表示

yyyy :西暦の表示

新欲張り電子工作(第5章)

5-46

16)文字列抽出関数の活用

「文字列入力」に任意の文字列を入力し、「パラメータ1」と「パラメータ2」に任意の数値を入力した

状態で、「Left 実行」ボタンをクリックした場合、入力した文字列に対し、パラメータで指定された文の

文字列を「結果」に表示します。また、「Rigt 実行」ボタン、及び「Mid 実行」ボタンをクリックした場

合も、各々に応じた結果を「結果」に表します。

尚、パラメータ1とパラメータ2は以下の意味で、Left 関数と Right 関数の場合はパラメータ2を無視

します。

関数名(入力テキスト、パラメータ1、パラメータ2)

17)時間関連の関数の活用

「読み込み」ボタンをクリックした場合、「DATE」、「TIME」、及び「TIMER」のそれぞれに、現在の

日付、時間及び午前0時からの相対秒時間を表示します。

18)数式関数の活用

コンボリストにより数学関数を選択し、「パラメータ」に求めたい値を設定した状態で「実行」ボタン

がクリックされた場合、その結果を「結果」に表示します。使用する関数は以下の通りです。

Abs :絶対値化関数 Sin :サイン関数

Cos :コサイン関数 Tan :タンジェント関数

Exp :指数関数 Fix :整数化関数

Int :最大整数化関数 Log :対数関数

Sqr :平方根関数

新欲張り電子工作(第5章)

5-47

補足:

円の半径の長さに等しい弧に対する角度(57.2958)を1ラジアンと定義しています。

180度をπと定義し、ラジアン値は3.14159265となります。

求めたい角度をラジアンで表現する式は以下の通りとなります。

求めるラジアン値={(求める角度x3.14159265)/180}

19)入力ボックスとメッセージボックスの活用

プログラムの開始時と終了時に以下のメッセージを表示するプログラムを作成します。

開始時:

プログラムの開始時に InputBox を使って以下のような画面を表示します。

キャンセルをクリックされた場合はプログラムを終了します。

補足:Form_Load を使います。

終了時:

プログラム終了時に、開始画面で入力されたデータ(“入力しました”)を表示した以下の画面

を、MsgBox を使って表示します。

“はい”が入力されたら終了します。“いいえ”が入力されたら再び開始時の画面を表示します。

補足:Form_UnLoad を使います。

新欲張り電子工作(第5章)

5-48

4、5

補足1:

プログラム作成の参考としてください。

Dim NameTable(20) As String Private Sub Command1_Click() Check_Init If Val(Text1.Text) = Val(Text2.Text) Then Check1.Value = 1 End If If Val(Text1.Text) < Val(Text2.Text) Then Check2.Value = 1 End If If Val(Text1.Text) <= Val(Text2.Text) Then Check3.Value = 1 End If If Val(Text1.Text) > Val(Text2.Text) Then Check4.Value = 1 End If If Val(Text1.Text) >= Val(Text2.Text) Then Check5.Value = 1 End If End Sub Private Sub Check_Init() Check1.Value = 0 Check2.Value = 0 Check3.Value = 0 Check4.Value = 0 Check5.Value = 0 End Sub Private Sub Command2_Click() Text9.Text = Text6.Text & "," & Text7.Text & "," & Text8.Text End Sub

新欲張り電子工作(第5章)

5-49

Private Sub Command3_Click() Text5.Text = "不成立" Select Case Combo1.Text Case "AND": If Text3.Text > 999 And Text4.Text > 999 Then Text5.Text = "成立" End If Case "OR": If Text3.Text > 999 Or Text4.Text > 999 Then Text5.Text = "成立" End If Case "NOT": If Not Text3.Text = 999 Then Text5.Text = "成立" End If Case "Xor": If Text3.Text = 999 Xor Text4.Text = 999 Then Text5.Text = "成立" End If Case "Eqv": If Text3.Text > 999 Eqv Text4.Text > 999 Then Text5.Text = "成立" End If Case "Imp": If Text3.Text > 999 Imp Text4.Text <= 999 Then Text5.Text = "成立" End If End Select End Sub Private Sub Command4_Click() Dim A As Integer Dim B As Integer Dim C As String A = Val(Text10.Text) B = Val(Text11.Text) C = Combo2.Text Enzan A, B, C End Sub Private Sub Enzan(A As Integer, B As Integer, C As String) Select Case C Case "+": Text12.Text = A + B Case "-": Text12.Text = A - B Case "*": Text12.Text = A * B Case "/": Text12.Text = A / B End Select End Sub

新欲張り電子工作(第5章)

5-50

Private Sub Command5_Click() Dim Ret As Integer Dim A As Integer Dim B As Integer Dim C As String A = Val(Text10.Text) B = Val(Text11.Text) C = Combo2.Text Ret = Enzan2(A, B, C) If Ret = -1 Then Text12.Text = "入力不正" ElseIf Ret = -2 Then Text12.Text = "分母が0です" End If End Sub Function Enzan2(A As Integer, B As Integer, C As String) As Integer If C = "" Then Enzan2 = -1 Exit Function End If Select Case C Case "+": Text12.Text = A + B Case "-": Text12.Text = A - B Case "*": Text12.Text = A * B Case "/": If B = 0 Then Enzan2 = -2 Exit Function End If Text12.Text = A / B End Select Enzan2 = 0 End Function Private Sub Form_Load() NameTable(1) = "阿部" NameTable(2) = "井上" NameTable(3) = "上田" NameTable(4) = "江本" NameTable(5) = "加藤" NameTable(6) = "木村" End Sub Private Sub Text13_Change() If Text13.Text <> "" And Val(Text13.Text) > 0 And Val(Text13.Text) < 21 Then Text14.Text = NameTable(Val(Text13.Text)) Else Text14.Text = "" End If End Sub

新欲張り電子工作(第5章)

5-51

1 3

1 4,5,6

4,5,6

補足2:

Dim KuKuTable(9, 9) As Integer Private Sub Command1_Click() Dim AdStart As Integer Dim AdEnd As Integer Dim AdStep As Integer Dim AdTotal As Double AdTotal = 0 AdStart = Val(Text4.Text) AdEnd = Val(Text5.Text) AdStep = Val(Text6.Text) For i = AdStart To AdEnd Step AdStep AdTotal = AdTotal + i Next i Text7 = Str(AdTotal) End Sub Private Sub Command2_Click() If Text8.Text <> "Now" Then Text10 = Format(Text8.Text, Text9.Text) Else Text10 = Format(Now, Text9.Text) End If End Sub Private Sub Command3_Click() Text14.Text = Left(Text11.Text, Text12.Text) End Sub Private Sub Command4_Click() Text14.Text = Right(Text11.Text, Text12.Text) End Sub Private Sub Command5_Click() Text14.Text = Mid(Text11.Text, Text12.Text, Text13.Text) End Sub Private Sub Command6_Click() Text15.Text = Date Text16.Text = Time Text17.Text = Timer End Sub

新欲張り電子工作(第5章)

5-52

Private Sub Form_Load() For i = 1 To 9 For j = 1 To 9 KuKuTable(i, j) = i * j Next j Next i End Sub Private Sub Text1_Change() KuKuEnzan End Sub Private Sub Text2_Change() KuKuEnzan End Sub Private Sub KuKuEnzan() If Val(Text1.Text) < 10 And Val(Text2.Text) < 10 Then Text3 = KuKuTable(Val(Text1.Text), Val(Text2.Text)) Else Text3.Text = "" End If End Sub

補足3:

Dim InitialMsg As String Private Sub Command1_Click() Dim InData As Double InData = Val(Text1.Text) If Combo1.Text = "Sin" Or Combo1.Text = "Cos" Or Combo1.Text = "Tan" Then InData = Val(Text1.Text) * 3.14159265 / 180 End If Text2.Text = "" Select Case Combo1.Text Case "Abs": Text2.Text = Abs(InData) Case "Cos": Text2.Text = Cos(InData) Case "Exp": Text2.Text = Exp(InData) Case "Int": Text2.Text = Int(InData) Case "Sqr": Text2.Text = Sqr(InData) Case "Sin": Text2.Text = Sin(InData) Case "Tan": Text2.Text = Tan(InData) Case "Fix": Text2.Text = Fix(InData) Case "Log": Text2.Text = Log(InData)

新欲張り電子工作(第5章)

5-53

End Select End Sub Private Sub Command2_Click() End End Sub Private Sub Form_Load() InitialMsg = InputBox("任意の文字列を入力しなさい", "InputBox 画面") If InitialMsg = "" Then End End If End Sub Private Sub Form_Unload(Cancel As Integer) Ret = MsgBox(InitialMsg, vbDefaultButton1 + vbYes, "選択処理") End Sub

新欲張り電子工作(第5章)

5-54

5.6 RS232C による通信処理(実例)

それでは実際に、RS232C規格によるシリアル通信機能を使用した通信プログラムを作成します。

5.6.1 通信用コンポーネントの追加

VBにて RS232Cを介した通信処理ソフトウェアを作成する場合、通信処理用コンポーネントの追加操作

が必要となります。以下の操作により、通信コンポーネントの追加を行ってください。

5.6.2 通信処理用ユーザインターフェースモデル

新欲張り電子工作(第5章)

5-55

5.6.3 受動的受信処理による通信処理例

Private Sub Command1_Click()

Dim rd As String

MSComm1.Output = Text1.Text

Text1.Text = ""

Text2.Text = ""

End Sub

Private Sub Form_Load()

MSComm1.PortOpen = True

End Sub

Private Sub Form_Unload(Cancel As Integer)

MSComm1.PortOpen = False

End Sub

Private Sub MSComm1_OnComm()

'この機能を使用する場合は、MSCommの RThresholdを1とすること。

Dim Rdata As String

Rdata = MSComm1.Input

Text2.Text = Text2.Text & Rdata

End Sub

Rthreshold を1とする事により、

OnComm 機能を使った受動的な受信処

理が可能となります。

InputLenを1とする事により、1バイ

ト単位で通信データを読み込むこと

が可能となります。

新欲張り電子工作(第5章)

5-56

5.6.4 能動的受信処理による通信

Private Sub Command1_Click()

Dim Rdata As String

MSComm1.Output = Text1.Text

Text1.Text = ""

Text2.Text = ""

Do

DoEvents

Rdata = MSComm1.Input

Text2.Text = Text2.Text & Rdata

Loop Until InStr(Rdata, Chr$(&HD)) <> 0

End Sub

Private Sub Form_Load()

MSComm1.PortOpen = True

End Sub

Private Sub Form_Unload(Cancel As Integer)

MSComm1.PortOpen = False

End Sub

Private Sub MSComm1_OnComm()

'この機能を使用する場合は、MSCommの RThresholdを1とすること。

End Sub

Rthresholdを2以上に設定する事により、

能動的な受信処理が可能となります。

注意:

お互いがこの方式を採用した場合、送信側のデー

タを受信側が受信できない為に、正しい対話処理

はできない。

InputLen を1とする事により、1 バイト単

位で通信データを読み込むことが可能とな

ります。

新欲張り電子工作(第5章)

5-57

5.7 VB によるファイル処理(実例)

VB を使ってファイルに書き込んだり、読み込む場合、その用途に応じて処理モードを設定し、そのモ

ードに対応する命令を使って行う必要があります。

5.7.1 VB が提供する処理モードと命令

処理モード 識別子 動作及び使用される命令 補足説明

出力モード Output 書き込みを可能とします

open パス for Output As #番号 Len=長さ

Print #番号、変数名

Write #番号、変数リスト

Seek #番号、位置

Close #番号

ファイルが存在しなければ

新規に作成され、存在すれば

初期化が行われます

Seek の位置は、先頭からの

バイト位置です

入力モード Input 読み込みを可能とします

open パス for Input As #番号 Len=長さ

Input #ファイル番号、変数リスト

Line INPUT #番号、変数名

Seek #番号、位置

Close #番号

ファイルの先頭から読み込

みが行われます

Seek の位置は、先頭からの

バイト位置です

アペンドモード Append 追加書き込みを可能とします

open パス for Append As #番号 Len=長さ

Print #番号、変数名

Write #番号、変数リスト

Close #番号

ファイルが存在しなければ

新規に作成されます

ランダムモード Rnadom 位置指定の読み書きを可能とします

open パス for Random As #番号 Len=長さ

Get #番号、読み込み位置、変数名

Put #番号、書き込み位置、変数名

Seek #番号、位置

Close #番号

ファイルが存在しなければ

新規に作成されます

Get/Seekの読み込み位置/位

置は、レコード番号(行番号)

となります

バイナリ-モード Binary バイナリデータの読み書きを可能とします

open パス for Bainary As #番号 Len=長さ

Get #番号、読み込み位置、変数名

Put #番号、書き込み位置、変数名

Input #番号、変数リスト

Write #番号、変数リスト

Close #番号

ファイルが存在しなければ

新規に作成されます

読み込み位置は先頭からの

バイト位置

新欲張り電子工作(第5章)

5-58

5.7.2 アペンドモードと入力モード活用事例

Private Sub Command1_Click()

Text1.Text = Text1.Text & "."

MSComm1.Output = Text1.Text

Print #1, "送:" & Text1.Text

Text1.Text = ""

Text2.Text = ""

End Sub

Private Sub Command2_Click()

On Error GoTo Exitdo

i = 1

Close #1

Open "History" For Input As #1

Label1.Caption = ""

Do Until i = 0

Input #1, HistData

Label1.Caption = Label1.Caption & HistData & " "

Loop

Exitdo:

Close #1

Open "History" For Append As #1

End Sub

新欲張り電子工作(第5章)

5-59

Private Sub Form_Load()

MSComm1.PortOpen = True

Open "History" For Append As #1

End Sub

Private Sub Form_Unload(Cancel As Integer)

MSComm1.PortOpen = False

Close #1

End Sub

Private Sub Label1_Click()

End Sub

Private Sub MSComm1_OnComm()

'この機能を使用する場合は、MSComm の RThreshold を1とすること。

Dim Rdata As String

Rdata = MSComm1.Input

Text2.Text = Text2.Text & Rdata

If Rdata = Chr$(&HD) Or Rdata = "." Then

Print #1, "受:" & Text2.Text

End If

End Sub

新欲張り電子工作(第5章)

5-60

5.7.3 ランダムモード活用事例

Private Sub Command1_Click()

If Combo2.Text = "読み込み" Then

Get #1, Combo1.Text, Indata

Text1.Text = Indata

Else

Outdata = Text1.Text

Put #1, Combo1.Text, Outdata

Text1.Text = ""

End If

End Sub

Private Sub Form_Load()

Open "random" For Random As #1 Len = 32

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close #1

End Sub

新欲張り電子工作(第5章)

5-61

補足:ファイルの構成

① 順編成ファイルの仕組み

記憶装置の先頭から順番に記憶する方法で、記録効率(空きがない)としては良いのですが、

データを順次アクセスしかできませんので、データの検索、挿入及び削除が困難である欠点が

あります。

② 索引編成ファイルの仕組み

索引編成は、索引域(インデックス域)と実際にデータが書き込まれる基本域、及びあふれ

域から構成されるもので、通常は基本域にデータは格納されますが削除/更新を繰り返すとデー

タは基本域に格納できず、あふれ域に格納することとなり、記録効率が劣化します。

③ 直接編成ファイルの仕組み

実際のデータに、記憶装置のアドレスに変換できるようなキーを持たせ、そのキーをハッシ

ュ変換等で実際の物理アドレスに変換してアクセスする方式で、高速なアクセスが可能ですが、

記憶装置に無駄が発生しますので、記録効率は良くありません。

追記:

ハッシュ法とは、ハッシュ関数を用いてインデックスとして設定した列の値を変換し、物理

的な格納アドレスを知る方法ですが、関数の計算結果が同じ値となった場合(シノニムと言い

ます)に、その位置にデータ格納ができない為に別の領域に格納することになり、この処理に

よる効率は劣化することになります。(ハッシュ関数には、平方抽出法や合同法(除算法)があ

ります)

新欲張り電子工作(第5章)

5-62

5.8 VB におけるタイマー処理

VB プログラムミングにおいて、タイマーを使った時間制御を行いたい場合は、タイマーコントロール

を使用します。

Dim timerflag As Integer

Private Sub Command1_Click()

For i = 1 To 10

Text1.Text = i

delay_ms (1000)

Next i

End

End Sub

Private Sub delay_ms(arg0 As Integer)

timerflag = 0

Timer1.Interval = arg0

Timer1.Enabled = True

Do Until timerflag = 1

DoEvents

Loop

Timer1.Enabled = False

End Sub

Private Sub Timer1_Timer()

timerflag = 1

End Sub

タイマー用コントロールです。タイ

マー機能を使う場合は、このコント

ロールをフォームに貼り付けます。

Enabled プロパティーを True にすると

タイマーが動作し、False で停止します。

Interval プロパティーにミリ秒単位で設定します。

この設定を行った後で、Enabled プロパティーを True に

するとタイマーが動き出し、指定された時間が経過する

と、タイマーモジュールが実行されます。

新欲張り電子工作(第5章)

5-63

5.9 独自のサブルーチンに作成方法について

通常のプログラミングにおいて共通の関数を作成する理由には以下があります。

① 全体的なコード数が削減できる。

② 共通関数に問題が発生した場合、その関数を修正するだけ良い。

③ 共通関数の信頼性を向上させればその関数を呼ぶ全てのプロシージャの信頼性があがる。

④ 個々のプロシージャ内で個別にコードを挿入する手間が省ける。

ビジュアルベーシックで作成する関数には、戻り値を返さない Sub 関数と戻り値を返却する Function

関数があります。各々の仕様は以下の通りです。

1)Sub 関数

Private Sub Command1_Click()

Dim A As Integer

Dim B As Integer

Dim C As String

Enzan A, B, C

End Sub

Private Sub Enzan(X As Integer, Y As Integer, Z As String)

Select Case Z

Case "+":

Text11.Text = X + Y

Case "-":

Text11.Text = X - Y

Case "*":

Text11.Text = X * Y

Case "/":

Text11.Text = X / Y

End Select

End Sub

A,B,C は引数で、Command1_Click で宣言され、格

納されるものです。

関数を呼ぶ場合は、左記の様に関数名と引数(複数

ある場合は“、”で区切ります)を定義します。

X,Y,Zは親プロシージャから渡された引数に対

応します。この部分で設定される引数は、親か

ら呼ばれる時に設定される引数と対応します。

(名前は同じである必要はありません)

また、引数として渡される変数の形を宣言する

必要があります。

この共通関数が終了すると、親のプロシージャ

で関数を呼び出した次の番地に戻ります。

新欲張り電子工作(第5章)

5-64

2)Function 関数

Private Sub Command1_Click()

Dim Ret As Integer

Dim A As Integer

Dim B As Integer

Dim C As String

Ret = Enzan(A, B, C)

If Ret = -1 Then

Text11.Text = "入力不正"

End If

End Sub

Function Enzan (X As Integer, Y As Integer, Z As String) As Integer

Enzan=-1

Select Case Z

Case "+":

Text11.Text = X + Y

Case "-":

Text11.Text = X - Y

Case "*":

Text11.Text = X * Y

Case "/":

If Y = 0 Then

Enzan = -2

Exit Function

End If

Text12.Text = X / Y

End Select

Enzan= 0

End Function

A,B,C は引数で、Command1_Click で宣言され、格納されるもの

です。

関数を呼ぶ場合は、左記の様に関数名と引数(複数ある場合は“、”

で区切ります。また、引数は括弧でくくります)を定義します。

また、左辺の変数には関数で設定された値が格納されます。

X,Y,Z は親プロシージャから渡された引数に対応します。この部分

で設定される引数は、親から呼ばれる時に設定される引数と対応

します。(名前は同じである必要はありません)

また、引数として渡される変数の形を宣言する必要があります。

親のプロシージャに返却するデー

タの形を定義します。

この様にプログラムすることで、親がこの関数を呼び出した時

の左辺に定義した変数に値が返却されます。返却時の形は、

Function 文で定義した形となります。

この共通関数が終了すると、親のプロシージャで関数を呼び出

した次の番地に戻ります。

新欲張り電子工作(第5章)

5-65

5.10 VB でできる付加機能

5.10.1 ネットワークを使ったファイル転送

ビジュアルベーシックには、FTP などのようなネットワーク関連機能を使用できるライブラリも数多

く提供されています。このようなライブラリを使って、クライアントからサーバへのファイルのアップ

ロード処理や、サーバからクライアントへのダウンロード処理が行えます。また、それらはいろいろな

方式で実現されます。以下に、FTP 関連のライブラリを使ったファイル転送例を紹介します。

1) INET コントロールを使ったファイル転送例

補足:

INET コントロールとは、インターネット・トランスファー・コントロールと言われるもので、VB の

標準コンポーネントとして付属しているものです。

新欲張り電子工作(第5章)

5-66

2) WinInet.API を使ったファイル転送例

補足:

WinInetAPI(WinInet.dll)は、IE に付属しているネットワーク関連のライブラリです。

新欲張り電子工作(第5章)

5-67

5.10.2 API を使った音声出力方法

VB から音声を出力する方法にもいろいろありますが、以下の API を使って音声出力例を紹介します。

1) グローバル定義として以下を定義します。

'

' 音声用 API 関数です

'

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _

(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _

ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long

2) 音声出力は以下のようにプログラムします。

' start.mp3 という音声ファイルを復元します。

SoundFileName = "C:¥sound¥start.mp3"

Call mciSendString("Play " & SoundFileName, vbNull, 0, 0)