• 検索結果がありません。

検索用のコード−その1:キーワードを与える

ドキュメント内 橡WINAPLI.PDF (ページ 34-40)

Kensu = 0 ' 検索合致件数を記録する変数の初期化

For Gyou = 1 To Grid1.Rows - Grid1.FixedRows Grid1.Row = Gyou

Sarch = "" ' 一行分の情報をまとめてためる変数

For Retu = 1 To Grid1.Cols - Grid1.FixedCols Grid1.Col = Retu

' 各列の情報を Sarch にためる Sarch = Sarch & Grid1.Text Next

' InStr関数は、Sarch の中にキーワードがあれば、

' その始まり位置を返す。無ければ、SarchResult の値は0 SarchResult = InStr(1, Sarch, KeyWord)

If SarchResult <> 0 Then

' 合致件数を Kensu でカウントする Kensu = Kensu + 1

' キーワードと合致する行にあるセルが持っている

' 情報を SarchedData 配列に保存しておく For Retu = 1 To Grid1.Cols - Grid1.FixedCols Grid1.Col = Retu

SarchedData(Retu) = Grid1.Text Next

' Sarched 配列に保存しておいた内容を

' 新たにグリッドの上の行から書き込んでいく

Grid1.Row = Kensu

For Retu = 1 To Grid1.Cols - Grid1.FixedCols Grid1.Col = Retu

Grid1.Text = SarchedData(Retu) Next

End If

Next

リスト 17 検索用のコード−その2:検索と結果の表示

9.2. 検索の仕組み

検索機能の本体は,リスト 17です.一 人分の四つの情報が一行に表示されるよう に設計してあるので,検索をかけるにはこ れら四つの項目を逐一チェックしなければ いけなくなり面倒な作業になります.

そこで四つの情報をつなぎ合わせて,一 人分の情報は一つの変数で取り扱えるよう に し ま し た . こ う し て 一 人 分 の 情 報 は

Sarch という名前の変数にまとまって与え

られます.これとキーワードとの比較をし ているのが,InStr関数です.

SarchResult = InStr(1 , Sarch , KeyWord)

KeyWord が持っている検索したい文字

列が,変数Sarchに含まれているかどうか,

Sarchの持っている文字列の1文字目から

順に探していきます.もしSarchがキーワ ードを持っていたら,それが何文字目で見 つかったのかという値がSarchResultに与 えられます.

もしSarchがキーワードを含んでいなけ

れば,SarchResultには0が入ります.注 目する行をFor 〜 Next文で変えながら,

全部の行を検索していきます.

9.3. 行の内容とキーワードが一致したとき

検索件数を与えるための変数 Kensu は 値を一つ増やします.キーワードと合致す る情報を含んでいる人の情報を,各項目ご とに配列に保存します.その後,配列に保 存しておいた情報は,Kensuの値で示され ている行(1 行目)に書き込まれます.書 き込みが終われば次の人の情報に移ります

つぎにキーワードに合致する人物が現れ ると,やはり Kensu は 1 増えます.先ほ どと同様に配列に情報が保存され,今度は さっきの次の行(2 行目)に書き込まれて いきます.

こうしてグリッドの全部の行を検索して いくと,キーワードに合致した人の情報は 1行目から順番に並べられることになりま す.

    上から順に 見ていって

キーワードが見つかると 上端の行から順番に書き込む

図 12 検索の基本動作

' 検索の結果該当するものがあった時には、余分な行を消す If Kensu <> 0 Then

' 削除する行数を求める

KesuGyouSu = Grid1.Rows - Grid1.FixedRows - Kensu

' 行の削除作業

For Gyou = 1 To KesuGyouSu Grid1.RemoveItem Kensu + 1 Next

Else

' キーワードを入力して、検索したけど該当するものがなかった時の表示

Msg = " 該当するものはありませんでした "

If KeyWord <> "" Then MsgBox Msg , 0 , "検索結果"

End If

End Sub

リスト 18 検索用のコード−その3:不要な行の削除

9.4. 余分な行を削り取る

グリッドの上の方の行は検索の結果が書 き込まれていても,下の方は検索前の状態 の ま ま で す . そ の 下 の 方 の 余 分 な 行 を

RemoveItemメソッドで削り取るのが,リ

スト 18です.検索の結果が書き込まれた

最終行はKensuの値から分かりますから,

グリッド全体の行数を表す Rows プロパテ ィから,固定行数を表す FilexdRows プロ

パティとKensuuを引いた値が,削除する

行数となります.RemoveItemメソッドを For 〜 Next文を使って,この回数分だけ くり返して不要な行を削除します.

また,検索の結果該当するものがなかっ

た場合は,見つからなかった旨のメッセー ジを出すようにしています.

MsgBox 命令を使うと,小さなウインド

ウが開いてメッセージを表示させることが 出来ます.

MsgBox メッセージ

,モード ,ウインドウのタイトル

モードの値によってウインドウに表示され るボタンや絵が変わります.必要がなけれ ば,モードとタイトルを指定しなくてもか まいません.その時にはウインドウにはメ ッセージと[OK]ボタンだけが表示され ます.

 蛇足ですが,リスト 16〜リスト 18は,

長い一つのCommand_Clickプロシージャ を三分割したのもです.実際に利用される ときは,一つに組み合わせてお使い下さい.

10. メニューバーの作り方

仕様に盛り込んでいた機能は,完成しま した.これにメニューバーを付けてみまし ょう.ほとんどの Windows ソフトは,コ マンドボタン以外にメニューバーも持った 作りになっています.初めて使うときには,

なにを意味しているか分からないボタンや アイコンよりも,文字で書かれたメニュー の方がわかりやすいからです.

10.1. メニューの構造を考える

ここでは,フォームの上の各ボタンの機 能をメニューバーから利用出来るように作 っていきましょう.通常メニューバーは,

[ファイル],[編集],[ヘルプ]など のタイトルがあり,各々のメニューを開く と,中に選択項目がある階層構造になって います.分かりやすいメニューになるよう に各機能を仕分けしておく必要があります.

今回は,次のような構造にしましょう.

[ファイル]

メニュー項目 保存 読み込み 終了

[行操作]

メニュー項目 行追加 行削除

[検索・抽出]

 [検索・抽出]はメニュー項目は無しで す.

10.2. メニュー作成

メニューを作成するための「メニューデ ザイン」ボタンは,ツールボックスではな くツールバー上にあります.

フォームをクリックして,フォームがフ ォーカスされた状態にしてからメニューデ ザインボタンを押して下さい.

図 13 メニューデザインウインドウ

まず[キャプション(P)」のところにメ ニュータイトルを書き込みます.キャプシ ョンを書き込むと,ウインドウ下半分のリ ストボックスにキャプションの内容が表示 されます.メニューバーには左から,この 順番で並ぶことになります.またこの順番

ここです

リストボックス

で三行目の[インデックス(X)]の値を0,

1,2と書き込んで下さい.

[名前(M)」欄には,ファイル,行操作,

検索・抽出のそれぞれについて同じ名前を 書き込んで下さい.名前としては,mnu で良いでしょう.

リストボックスに上から順にファイル,

行操作,検索・抽出と並んでいる時には,

インデックスの値と名前は

キャプション 名前 インデックス

ファイル mnu 0

行操作 mnu 1

検索・抽出 mnu 2

となります.この状態で[OK]ボタンを 押して,フォーム画面に戻ってみましょう.

 ここでエラーメッセージが出る時は,名 前が同じであることと,インデックスが上

から順に0,1,2となっているかどうか,

確認してみて下さい.無事フォームに戻れ たらメニューバーが出来ているはずです.

次は,メニュー項目を作っていきます.

再びメニューデザインスイッチを押してメ ニュー作成画面を出します.

10.2.1. [ファイル]のメニュー項目

このリストボックスの「行の操作」と書 かれたところをクリックした後で,[挿入 (I)]を押します.するとファイルとの間に 隙間が出来ます.この状態で[キャプショ ン]に「保存」という項目を書き込みます.

[名前]のところにはファイルで使ったの と違うもの(mnuFile)にします.また,

インデックスは0にして下さい.

 ここでインデントスイッチ を押すと,

「保存」が右に寄ってファイルのメニュー 項目になります.同様な手法で「読み込 み」項目も作ります.これの名前は「保 存」と同じ mnuFile にして,インデック スは1 にします.終了も同様にしてインデ ックスは2にします.

ここで[OK]を押して再びフォームの 編集画面に戻ってみましょう.メニューバ ーの[ファイル]の部分をクリックすると,

[保存]や[読み込み]などが現れるよう になったはずです.

10.2.2. メニュー項目をクリックしたときに

行う命令の書き込み

ここでメニューバーをクリックして出て きた[保存]や[読み込み]をダブルクリ ックすると,コントロールオブジェクトの 時と同じようなコードウインドウが現れま す.ここに次のような Select Case 文を書 き込みます.

インデント スイッチ

Sub mnuFile_Click( Index As Integer )   Select Case Index

   ' Index = 0 の場合、保存    Case 0

   Command1_Click

    ' Index = 1 の場合、読み込み    Case 1

   Command2_Click     ' Index = 2の場合、終了

   Case 2    End End Select End Sub

リスト 19 メニューバーのファイルメニュー

ドキュメント内 橡WINAPLI.PDF (ページ 34-40)

関連したドキュメント