jeed€¦ · web view1...

23
技技技技技技技技技 Windows

Upload: others

Post on 07-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

技術解説用テキスト

Windowsによる計測データ処理

Page 2: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

 Microsoft、Windows、Visual Basic、Excel は米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。その他会社名、商品名、製品名などは、一般に各社の登録商標または商標です。なお、本文中には TM およびⓇマークは明記していません。Microsoft Corporation のガイドラインに従って画面写真を使用しています。

1/25

Page 3: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

目次

1 計測データをファイル化して保存・表示するプログラムの作成................................41.1 A/D変換ボードを使った温度データの表示プログラムの作成..........................41.2 VISUAL BASIC であつかえるファイルの種類について.........................................51.3 シーケンシャルファイルを使ったデータの保存................................................61.4 シーケンシャルファイルの表示......................................................................71.5 シーケンシャルファイルをEXCELで表示する...............................................81.6 ランダムファイルを使った保存と表示.............................................................91.7 ランダムファイル内特定データの表示と書き込み.............................................9

2 VISUAL BASIC と EXCEL 間のデータ交換...............................................12

2.1 DDE機能を使ったデータ交換.....................................................................122.1.1 コードによるリンク..............................................................................122.1.2 デザインによるリンク..........................................................................13

2.2 OLEコンテナコントロールを使ったオブジェクト表示.................................142.3 ACTIVEX オブジェクトを使ったデータ交換.....................................................142.3.1 オブジェクト変数の宣言と割り当て........................................................142.3.2 GetObject関数を使ったデータ交換.......................................................152.3.3 CreateObject関数を使ったデータ交換..................................................16

3 EXCEL VBA を使った計測データの表化、グラフ化......................................18

3.1 温度データを EXCEL セルに転送するプログラムの作成.....................................183.2 EXCEL 側で発生するイベントプロシージャの確認...........................................193.3 EXCEL VBA を使った転送データの表作成.......................................................203.4 EXCEL VBA を使った転送データのグラフ化....................................................203.5 EXCEL VBA でファイル処理を行う.................................................................21

4 計測データをデータベースに保存・表示するプログラムの作成.........................21

4.1 ビジュアルデータマネージャを使ったデータベースファイルの作成.................214.2 計測データを JET データベースに保存・表示するプログラムの作成..................21

5 SQLの SELECT コマンドを使った計測データの抽出...................................23

5.1 ビジュアルデータマネージャを使った SELECT コマンドの実行.......................235.2 プログラム上で SELECT コマンドを実行する方法..........................................23

6 応用課題演習....................................................................................24

6.1 SELECT コマンドの実行結果を CSV 形式のファイルに保存するプログラムの作成24

6.2 SELECT コマンドの実行結果を EXCEL に転送するプログラムの作成..................24

2/25

Page 4: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

参考文献(1) Visual Basic Vol.1 はじめてのプログラミング 山本信雄 著 翔泳社

(2) Excel97VBA のこつ      大村あつしプログラミング 著    エーアイ出版

(3) Visual Basic 6.0 プログラミング2    日向俊二 著     翔泳社

(4) じっくり学ぶ Visual Basic 6.0 実践編  藤本壱  著     エーアイ出版

(5) Visual Basic でエンジョイプログラミング 互野恭治 著     CQ出版社

(6) Visual Basic 5.0 中級テクニック編    河西朝雄 著     技術評論社

(7) Visual Basic 5.0 上級テクニック編    河西朝雄 著     技術評論社

(8) Microsoft Visual Basic データアクセスオブジェクトガイド    Microsoft(9) Microsoft Visual Basic オンラインヘルプ            Microsoft(10)Visual Basic magazine 1999年 1月号 付録

  Visual Basic による計測制御アプリケーション入門 矢沢 久雄/青木 清 著

3/25

Page 5: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

1 計測データをファイル化して保存・表示するプログラムの作成

1.1 A/D変換ボードを使った温度データの表示 プログラムの作成

タイマコントロールを使って、1秒ごとに温度データをラベルに表示するプログラムを作成します。

サーミスタの抵抗値変化を電圧変化にし、A/D変換ボードのアナログ入力端子に接続して、温度データを測定しています。回路図を下に示します。

このセミナーでは、計測データをA/D変換ボードで取り込んだ後の処理方法について説明します。したがって、計測データを取り込む方法、およびプログラム作成方法の詳しい説明は省略します。

今回使用するA/D変換ボード(コンテック社製 AD12-16LG(PC))は、以下に示した関数を使って制御をおこないます。これらの関数の定義は、温度計測.bas という名前の標準モジュールに記述していますので、「プロジェクト」メニューの「標準モジュールの追加」で「既存のファイル」タブを選んで、標準モジュールを読み込んでください。

A/D変換ボード初期化用関数 AdInit  :引数 なし、戻り値 なし

温度データ取得関数      AdConvert :引数 なし、戻り値 温度データ(Single型)

また、A/D変換ボードを制御するためのコントロールとして、汎用I/O制御 ActiveXコントロール IOControl(Visual Basic magazine 1999年 1月号 付録 )を使用します。下図の要領でフォームにコントロールを貼り付けてください。

以下にサーミスタの温度を計測するためのA/D変換プログラムを示します。

4/25

5V

3k Ω の抵抗

25℃の抵抗値が10k Ω のサーミスタ

A/D変換ボードのアナログ入力端子へ

A/D変換ボードのアナロググランド端子へ

Page 6: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Option Explicit

Private Sub Command1_Click() ‘「1秒ごとに温度表示」 ボタン

Timer1.Enabled = TrueEnd Sub

Private Sub Command2_Click() ‘「停止」 ボタン

Timer1.Enabled = FalseEnd Sub

Private Sub Form_Load() AdInitEnd Sub

Private Sub Timer1_Timer() Label1.Caption = AdConvertEnd Sub

Private Sub Form_Unload(Cancel As Integer) EndEnd Subプログラムを作成したら、温度データがラベルに表示されることを確認してください。

室温を測定しても温度データの変化は望めません。サーミスタに息を吹きかけて暖めたりして温度が20℃~30℃程度に変化することを確認してください。

1.2 Visual Basic であつかえるファイルの種類 について

ファイルとは、データの集合体のことです。箱にたとえれば、ファイルの処理とは、箱を開き(open)、データの追加、更新、削除をおこなった後、箱を閉じ(close)ることです。

Visual Basic は従来の Basic 言語で扱われていたファイル(シーケンシャルファイル、ランダムファイル、バイナリファイル)処理をおこなうことができます。

5/25

「プロジェクト」メニューの「コンポーネント」の「コントロール」タブで IOControlX のチェックボックスを有効にしたのち、ツールボックスからフォームに貼り付ける

温度表示用オブジェクト Label1

Page 7: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

各ファイルの定義については Visual Basic のオンラインヘルプ、副教材を参照してください。

1.3 シーケンシャルファイルを使ったデータの 保存

A/D変換ボードを使って、サーミスタの温度データを1秒間隔でシーケンシャルファイルに保存するプログラムを作成します。保存するファイル名が同じため、プログラムを実行するたびに、新しいデータのみが保存されます。メモ帳でファイルを開けば、中身を確認できます。

ファイルに計測データを保存するには次の手順でプログラムを作成します。

1. ファイルを開きます。(Open ステートメントを使います。)

2. ファイルに計測データを保存します。(Write # ステートメントを使います。)

3. ファイルを閉じます。(Close ステートメントを使います。)

Open、Write #、Close の各ステートメントの使い方は Visual Basic のオンラインヘルプ、副教材を参照してください。

Option ExplicitDim k As Integer

Private Sub Command1_Click() ‘「1秒ごとに温度表示」 ボタン

Timer1.Enabled = TrueEnd Sub

Private Sub Command2_Click() ‘「停止」 ボタン

Timer1.Enabled = FalseEnd Sub

Private Sub Form_Load() k = 1 AdInit Open "c:\My Documents\温度データ.dat" For Output As #1 Write #1, "データ番号", "温度データ" ‘タイトル行の書き込み

6/25

Page 8: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Close #1End Sub

Private Sub Timer1_Timer() Dim Ondo As Single Ondo = AdConvert Open "c:\My Documents\温度データ.dat" For Append As #1 Write #1, k, Ondo ‘データ番号と温度データの書き込み

Close #1 Label1.Caption = Ondo k = k + 1End Sub

Private Sub Form_Unload(Cancel As Integer) EndEnd Sub

1.4 シーケンシャルファイルの表示

取り込んだファイルデータをリストボックスに表示します。変数が数値型なので、タイトル行は0で表示されます。

ファイルを読み込むとき、ファイルの最後は EOF 関数で調べます。

EOF 関数は Input #ステートメント(ファイルデータを変数に格納するステートメント)がファイルの最後のデータを読み出すと、ブール型の True を返します。引数はファイル番号です。

リストボックスにデータを表示するために、AddItemメソッドを使います。

7/25

Page 9: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

プログラムの追加部分だけを下に記します

Private Sub Command3_Click() ‘「保存した を に表示」 ボタンデータ リストボックス Dim Num As Integer, Ondo As Single Open "c:\My Documents\温度データ.dat" For Input As #1 List1.Clear Do While Not EOF(1) Input #1, Num, Ondo List1.AddItem Num & ":" & Ondo Loop Close #1End Sub

1.5 シーケンシャルファイルをExcelで表示 する

区切り文字がカンマ、タブ、スペースなどであれば、Excelでファイルを読み込むことができます。(ただし、ウイザードが起動します。)

区切り文字がカンマのファイルを CSV 形式ファイルといい、拡張子を.csv にすれば、ウイザードを起動せずにファイルを読むことができます。Open ステートメントの拡張子を.csv に変更して Excel でファイルを読んでみてください。

8/25

Page 10: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

1.6 ランダムファイルを使った保存と表示

ランダムファイルは、任意のレコード位置のデータをリード/ライトできます。しかし、1件のレコードの長さは、固定長でなければなりません。

データ番号をレコード番号にしてランダムファイルに保存します。

ランダムファイルを先頭レコードから最終レコードまでをシーケンシャルアクセスして、リストボックスに表示します。

ランダムファイルでは読み込みは Get ステートメント、書き込みは Put ステートメントを使います。

ファイルの最後はシーケンシャルファイル同様 EOF 関数で調べることができます。

Get、Put の各ステートメントの使い方は Visual Basic のオンラインヘルプ、副教材を参照してください。

Option ExplicitDim k As Integer

Private Sub Command1_Click() ‘「1秒ごとに温度表示」 ボタン

Timer1.Enabled = TrueEnd Sub

Private Sub Command2_Click() ‘「停止」 ボタン

Timer1.Enabled = FalseEnd Sub

Private Sub Command3_Click() ‘「保存した を に表示」 ボタンデータ リストボックス

9/25

Page 11: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Dim Num As Integer, Ondo As Single Open "c:\My Documents\温度データ.dat" For Random As #1 Len = Len(Ondo) List1.Clear Num=1 Do While Not EOF(1) Get #1, Num, Ondo List1.AddItem Num & ":" & Ondo Num=Num+1 Loop Close #1End Sub

Private Sub Form_Load() k = 1 AdInitEnd Sub

Private Sub Timer1_Timer() Dim Ondo As Single Ondo = AdConvert Open "c:\My Documents\温度データ.dat" For Random As #1 Len = Len(Ondo) Put #1, k, Ondo Close #1 Label1.Caption = Ondo k = k + 1End Sub

Private Sub Form_Unload(Cancel As Integer) EndEnd Sub

1.7 ランダムファイル内特定データの表示と書き 込み

特定のレコード番号の温度データを表示、書き込みする処理を追加します。

Get、Put ステートメントの第 2引数はレコード番号(数値型)です。テキストボックスの入力値を数値変換するために Val 関数を使っています。

Put ステートメントの第3引数は温度データ(単精度浮動小数点型)です。テキストボックスの入力値を数値変換するために Csng 関数を使っています。

Val 関数、Csng 関数の使い方は Visual Basic のオンラインヘルプを参照してください。

10/25

Page 12: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

プログラムの追加部分だけを下に記します。

Private Sub Command4_Click() ‘「特定レコードの処理フレーム」の「表示」 ボタン

Dim Ondo As Single Open "c:\My Documents\温度データ.dat" For Random As #1 Len = Len(Ondo) Get #1, Val(Text1.Text), Ondo Close #1 Text2.Text = OndoEnd Sub

Private Sub Command5_Click() ‘「特定レコードの処理フレーム」の「書き込み」 ボタン

Dim Ondo As Single Open "c:\My Documents\温度データ.dat" For Random As #1 Len = Len(Ondo) Put #1, Val(Text1.Text), CSng(Text2.Text) Close #1 Text2.Text = ""End Sub

11/25

Page 13: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

2 Visual Basic と Excel 間のデータ交換

2.1 DDE機能を使ったデータ交換

2.1.1 コードによるリンクDDEとは Dynamic Data Exchange の略で、動的にデータを交換する技術、つまり

Excel など他のアプリケーションにある特定のデータフィールドと Visual Basic のコントロールを相互に結び付けることができます。

通常、DDE 通信における情報はソース(送信元)からデスティネーション(送信先)へ送られます。ここではソースを Excel、デスティネーションを Visual Basic とし、Visual Basic のテキストボックスのデータと Excel のA1セルのデータを交換するプログラムを作成します

デスティネーションを Visual Basic としたのは、DDE のプログラムはデスティネーション側で記述する必要があるためです。Visual Basic をソース側にする場合、プログラムはExcel 側で記述しなければいけません。

デ ス テ ィ ネ ー シ ョ ン ( Visual Basic ) 側 の LinkMode プ ロ パ テ ィ は 自 動(VbLinkAutomatic)、手動(vbLinkManual)、なし(vbLinkNone)の3つがあります。このプログラムでは手動を使います。手動をつかうと LinkRequest メソッドを実行したときにのみ、データがソースからデスティネーションへ送られます。

LinkPoke メソッドを使うとデスティネーションからソースへデータを送ることができます。

LinkPoke メソッドを使って Visual Basic から Excel にデータを送ります。LinkRequest メソッドを使って Excel から Visual Basic にデータを送ります。(ただし、Visual Basicプログラムを実行する前に Excel は起動していなければなりません。)

DDE通信に関するプロパティ、メソッドの詳細についてはオンラインヘルプを参照してください。

Option Explicit

12/25

Page 14: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Private Sub Command1_Click() '「VB→Excel」 ボタン

Text1.LinkPokeEnd Sub

Private Sub Command2_Click() '「Excel→VB」 ボタン

Text1.LinkRequestEnd Sub

Private Sub Form_Load() With Text1 .LinkMode = vbLinkNone .LinkTopic = "Excel|Sheet1" .LinkItem = "R1C1" .LinkMode = vbLinkManual End WithEnd Sub

2.1.2 デザインによるリンクほかのアプリケーションにコピーとリンク貼り付けコマンドがあれば、デザイン時にリ

ンクすることができます。

Visual Basic から他のアプリケーションにデータを送る場合1. Form の Link Mode プロパティをプロパティウインドウで1(ソース)にする。(こ

れをおこなわないと、他のアプリケーションでリンク貼り付けのオプションボタンを選ぶことができない)Form の Link Mode プロパティのみ他のコントロールと異なり、ソース側の設定ができます。この場合、実際のリンクオブジェクト(テキストボックス)の設定は必要ありません。

2. リンクしたいコントロール(テキストボックス)を右クリックして、「コピー」を選択

3. 他のアプリケーションのリンクしたい部分(Excel のセルなど)を右クリックして、「形式を選択して張り付け」を選び、リンク貼り付けのオプションボタンを選び、「OK」を押す

4. ExcelがVisual Basic 側プログラムの実行を促すメッセージを出す。

5. Visual Basic 側プログラムを実行し、テキストボックスに値を代入した後、コマンドボタンを押す

6. Excel の「編集」メニューの「リンクの設定」の「今すぐ更新」ボタンを押す

7. Visual Basic のテキストボックスの値を変更すると Excel のセルの値も変更されるのを確認

13/25

Page 15: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

他のアプリケーションから Visual Basic にデータを送る場合1. 他のアプリケーションのリンクしたい部分(Excel のセルなど)を右クリックして、

「コピー」を選ぶ

2. Visual Basic でリンクしたいコントロール(テキストボックス)をクリックして「編集」メニューの「リンク張り付け」を選ぶ

3. Excel のセルの値を変更すると Visual Baisc のテキストボックスの値も変更されるのを確認

4. テキストボックスの Link*プロパティが変更されているのを確認

2.2 OLEコンテナコントロールを使ったオブ ジェクト表示

OLEは、Object Linking and Embedding の略でほかのアプリケーションオブジェクト(Excelワークシート、Word 文書など)を Visual Basic アプリケーションと接続する技術です。接続方法にはリンク(Object Linking:データだけの接続、DDE機能と類似、データはそのデータを作成したアプリケーションで管理します。)と埋め込み(Object Embedding:埋め込み。データはそのデータを作成した他のアプリケーション側、Visaul Basic 側のどちらでも管理します。)があります。

ここではデザイン時に Visual Basic と Excel のリンクを行う方法のみ説明します。

1. Excel ファイルをあらかじめ作っておきます。

2. ツールボックスから、OLE(OLEコンテナコントロール)を選び、フォームに貼り付けます。

3. 「オブジェクトの挿入」ウインドウが表示されますので、「ファイルから」オプションボタンを選び、「リンク」チェックボックスにマークを入れた後、「参照」ボタンで、先に作成した Excel ファイルを選んでください。

4. Visual Basic アプリケーションを実行して、オブジェクトをダブルクリックするとExcelが起動します

5. Excel のセルにデータを書き込むと、Visual Basic アプリケーションのセルデータも同時に変更されることを確認してください

2.3 ActiveX オブジェクトを使ったデータ交換 ActiveX オブジェクトは、Visual Basicや Excel などで共通に利用できるコントロール

のことです。

Excel の場合、ワークブックやワークシートのオブジェクトがあり、このオブジェクトをVisual Basic で利用することで Visual Basic と Excel 間のデータ交換ができます。

具体的には GetObject 関数や CreateObject 関数を利用して、ActiveX オブジェクトへの参照を作成して、データ交換をおこないます。

2.3.1 オブジェクト変数の宣言と割り当てオブジェクトへの参照を作成するために、オブジェクト変数について説明します。

ラベルオブジェクトの Caption プロパティに値を代入するのプログラムを考えます。

14/25

Page 16: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Label1.Caption=… と記述する代わりにオブジェクト変数の宣言と割り当てを行うと、次のような記述になります。

Option Explicit

Private Sub Command1_Click() Dim LabelObject As Label Set LabelObject = Label1 LabelObject.Caption = "Hello World"End Sub

Private Sub Form_Unload(Cancel As Integer) Set LabelObject = NothingEnd Sub上 の よ う に 宣 言された 変 数 LabelObject を オ ブ ジ ェ ク ト 変 数 と い い ま す 。 変 数

LabelObject は Label型オブジェクトと同様に使うことができます。ただしこのオブジェクト変数が Label1 オブジェクトを参照していることを明らかにするために、Set ステートメントを使って Label1 オブジェクトの参照であることを記述しなければいけません。

Excel のオブジェクトは階層構造(オブジェクトの中にオブジェクトがある)になっており、オブジェクト変数を操作するにはその階層構造について知っておく必要があります。これらはオンラインヘルプを参照してください。

Excel のオブジェクト変数を Visual Basic で利用する場合、「プロジェクト」メニューの「参照設定」で「Microsoft Excel8.0 Object Library」のチェックマークを入れる必要があります。

2.3.2 GetObject 関数を使ったデータ交換指定したファイルに関連付けられるアプリケーションを起動し、データ交換をおこなうに

は、GetObject 関数を使い、オブジェクトへの参照を取得する必要があります。

一つの Workbook オブジェクトのなかには複数(デフォルトで3つ)の Worksheet オブジェクトが存在します。これらのなかから単体の Worksheet オブジェクトの参照を取得するには、どの Worksheet オブジェクトを選ぶのかを指定する必要があります。そのために、Worksheets プロパティをつかいます。Worksheets プロパティにシート名を指定すると、Worksheet オブジェクトを参照できます。

My Documents ディレクトリにある Excel ファイルのオブジェクト参照を取得してデータ交換をおこなうプログラムを作成します。

Excel はあらかじめ起動しておく必要があります。

15/25

Page 17: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Option ExplicitDim XLbook As Excel.WorkbookDim XLsheet As Excel.Worksheet

Private Sub Command1_Click() '「VB→Excel」 ボタン

XLsheet.Cells(1, 1).Value = Text1.TextEnd Sub

Private Sub Command2_Click() '「Excel→VB」 ボタン

Text1.Text = XLsheet.Cells(1, 1).ValueEnd Sub

Private Sub Form_Load() Set Xlbook = GetObject("c:\My Documents\book1.xls") Set Xlsheet = XLbook.Worksheets(“Sheet1”) XLsheet.Application.Visible = TrueEnd Sub

Private Sub Form_Unload(Cancel As Integer) Xlbook.Application.Quit Set Xlbook = Nothing Set Xlsheet = NothingEnd Sub

2.3.3 CreateObject 関数を使ったデータ交換新しくファイルを作成して、関連付けられるアプリケーションを起動し、データ交換をお

こなうには、Create Object 関数をつかいます。

16/25

Page 18: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

この場合、プログラム上で Excelが起動しますので、あらかじめ Excel を起動しておく必要はありません。

Option ExplicitDim XLbook As Excel.WorkbookDim XLsheet As Excel.Worksheet

Private Sub Command1_Click() '「VB→Excel」 ボタン

XLsheet.Cells(1, 1).Value = Text1.TextEnd Sub

Private Sub Command2_Click() '「Excel→VB」 ボタン

Text1.Text = XLsheet.Cells(1, 1).ValueEnd Sub

Private Sub Form_Load() Set Xlbook = CreateObject("Excel.Sheet") Set Xlsheet = XLbook.Worksheets(“Sheet1”) XLsheet.Application.Visible = TrueEnd Sub

Private Sub Form_Unload(Cancel As Integer) XLbook.Application.Quit Set Xlbook = Nothing Set Xlsheet = NothingEnd Sub

17/25

Page 19: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

3 Excel VBA を使った計測データの表化、グラフ化

3.1 温度データを Excel セルに転送するプログラ ムの作成

Visual Basic をつかって Excel の制御を行うことも可能ですが、Visual Basic で計測データを Excel に転送する部分だけを作成し、データ処理のプログラムは Excel VBA を使ったほうが Excel の印刷処理、グラフ化処理、統計処理などを利用でき、効率的です。

GetObject 関数をつかって温度データを1秒間隔(タイマーコントロールを利用します)で Excel のA1セルに転送するプログラムを作成してください。

Option ExplicitDim XLbook As Excel.WorkbookDim XLsheet As Excel.Worksheet

Private Sub Command1_Click() ‘「1秒ごとにデータ転送」 ボタン

Timer1.Enabled = TrueEnd Sub

Private Sub Command2_Click() ‘「停止」 ボタン

Timer1.Enabled = FalseEnd Sub

Private Sub Form_Load() AdInit Set Xlbook = GetObject("c:\My Documents\温度データ.xls") Set Xlsheet = XLbook.Worksheets(“Sheet1”)

18/25

Page 20: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

XLsheet.Application.Visible = TrueEnd Sub

Private Sub Form_UnLoad(Cancel As Integer) XLbook.Application.Quit Set XLbook = Nothing Set XLsheet = Nothing EndEnd Sub

Private Sub Timer1_Timer() XLsheet.Cells(1, 1).Value = AdConvertEnd Sub

3.2 Excel 側で発生するイベントプロシージャの 確認

データ転送が行われるセルを含むワークシートにコマンドボタンとリストボックスのコントロールを貼り付けて、次のプログラムを ExcelVBA で作成してください。Worksheetオブジェクトの Change イベントが発生していることが確認できます。

Option Explicit

Private Sub CommandButton1_Click() ‘「リストボックスのクリア」 ボタン

ListBox1.ClearEnd Sub

19/25

Page 21: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Private Sub Worksheet_Change(ByVal Target As Excel.Range) ListBox1.AddItem Range("A1")End SubDDE 機能を使っても同じ事ができます。しかし、Worksheet オブジェクトのイベント(Change イベントやその他のイベント)は全く発生しません。そこで、次のように転送データを数式に変更すれば、Worksheet オブジェクトの Calculate イベントが発生します。

Text1.Text = "=" & Str(AdConvert)Text1.LinkPoke

3.3 Excel VBA を使った転送データの表作成 Excel VBA を使って、温度データを表にするプログラムを作成します。Worksheet オブ

ジェクトの Change イベント発生ごとに、Worksheet オブジェクトの Cells プロパティを使った転送データのコピーをおこないます。

Ws.Cells(k, 2).Value = Ws.Cells(1, 1).Value を お こ な う と セ ル デ ー タが変 化し、Worksheet オブジェクトの Change イベントが再帰的に発生します。

これを防ぐため、転送データのコピーを次の条件文で囲っています。

If (Target.Row = 1) And (Target.Column = 1) Then End IfOption Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range) Static k As Integer Dim Ws As Worksheet Set Ws = Worksheets("Sheet1") If (Target.Row = 1) And (Target.Column = 1) Then k = k + 1 Ws.Cells(k, 2).Value = Ws.Cells(1, 1).Value If k >= 10 Then k = 0 End IfEnd Sub

3.4 Excel VBA を使った転送データのグラフ化 3.3 で作成される温度データの表から、グラフウイザードを使ってグラフを作成してください。温度データが更新されるたびに、グラフも更新されるのがわかります。グラフウイザードの使い方については Visual Basic のオンラインヘルプを参照してください。

20/25

Page 22: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

3.5 Excel VBA でファイル処理を行う 3.3 で作成された温度データの表をシーケンシャルファイルに保存するプログラムを作成

してください。また、保存したシーケンシャルファイルデータを別のワークシートに表示するプログラムも作成してください。

4 計測データをデータベースに保存・表示するプログラムの作成

4.1 ビジュアルデータマネージャを使ったデー タベースファイルの作成

Visual Basic では、データベース(Visual Basic に付属の Jet データベース)とアクセスする方法として、データコントロールを使う方法とデータ アクセス オブジェクト(DAO)を使う方法があります。ここではデータコントロールを使う方法でプログラムを作成します。

データベースファイルをつくる方法にはプログラムコード(DAO またはSQL)で作成する方法とユーティリティを使う方法があります。

ユーティリティを使う方法が簡単です。ここではビジュアルデータマネージャと呼ばれる Visual Basic のアドインのユーティリティを使います。

以下の構成のデータベースファイルをビジュアルデータマネージャで作成してください。

1 テーブル名:温度変化

2 フィールド名:時間、温度

4.2 計測データを Jet データベースに保存・表示 するプログラムの作成

1秒ごとに温度データと時間データをデータベースに転送するプログラムを作成してください。

データコントロールはデータを表示する機能を持っていません。このプログラムでは、表の形で表示するDBグリッドコントロールをデータコントロールと連結しています。この設定は'DB グリッドコントロールの DataSource プロパティを Data1 にするだけですが、デザイン時にプロパティウインドウで記述してください。

DBグリッドコントロールを使用するときは「プロジェクト」メニューの「コンポーネント」で「Microsoft Data Bound Grid Control」を選んでください。

21/25

Page 23: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Option Explicit

Private Sub Command1_Click() ‘「1秒ごとにデータ転送」 ボタン

Timer1.Enabled = TrueEnd Sub

Private Sub Command2_Click() ‘「停止」 ボタン

Timer1.Enabled = FalseEnd Sub

Private Sub Form_Load() Data1.DatabaseName = "c:\windows\デスクトップ\test.mdb" Data1.RecordSource = "温度変化" Data1.Refresh AdInitEnd Sub

Private Sub Form_Unload(Cancel As Integer) EndEnd Sub

Private Sub Timer1_Timer() Data1.Recordset.AddNew Data1.Recordset.Fields("時間").Value = Now

22/25

Page 24: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

Data1.Recordset.Fields("温度").Value = AdConvert Data1.Recordset.UpdateEnd Sub

5 SQLの SELECT コマンドを使った計測データの抽出

5.1 ビ ジ ュ ア ル デ ー タ マ ネ ー ジ ャ を 使 っ た SELECT コマンドの実行

ビジュアルデータマネージャのSQLステートメントウインドウを利用すると、SQLを実行することができます。

ここでは計測データの一部を取り出すことをおこないます。SQLの中の SELECT コマンドを使用します。

SELECT コマンドの使い方については参考文献(5)を参照してください。

5.2 プログラム上で SELECT コマンドを実行す る方法

データコントロールの RecordSource プロパティに SQL の文字列を代入し、Refreshメソッドをおこなえば、実行できます。

23/25

Page 25: JEED€¦ · Web view1 計測データをファイル化して保存・表示するプログラムの作成 4 1.1 A/D変換ボードを使った温度データの表示プログラムの作成

4.2 で作成したプログラムにSQL入力用テキストボックスとSQL実行用コマンドボタンを追加して、プログラム上で SELECT コマンドが実行できることを確認してください。

6 応用課題演習

6.1 SELECT コマンドの実行結果を CSV 形式の ファイルに保存するプログラムの作成

指定した時間範囲の温度データを SELECT コマンドで取得して、そのデータを CSV 形式でシーケンシャルファイルに保存するプログラムを作成してください。データベースの抽出データをファイルに保存できますので、後で Excel で処理ができます。

WHERE句の条件式に時間を使う場合、年月日を#で囲む必要があります。

データコントロールのレコードセットプロパティのEOFプロパティが True であれば、最後のデータを検出したことになります。

シーケンシャルファイルへのデータ書き込みは Write#ステートメントを使って Do While~Loop 内で行なってください

データの移動はレコードセットプロパティ(SELECT コマンドの実行結果が格納されています。)の MoveFirst,MoveNext などのメソッドを使ってください。

6.2 SELECT コマンドの実行結果を Excel に転 送するプログラムの作成

指定した時間範囲の温度データを SELECT コマンドで取得して、そのデータを Excel に転送するプログラムを作成してください。

データコントロールのレコードセットプロパティのEOFプロパティが True であれば、最後のデータを検出したことになります。

Do While~Loop を使って Excel にデータを転送して、グラフ表示をおこなってください。

データの移動はレコードセットプロパティ(SELECT コマンドの実行結果が格納されています。)の MoveFirst,MoveNext などのメソッドを使ってください。

24/25