情報資源組織演習 A( 書誌の作成 ) 第 13 回書誌データ管理 検索システムの構築 第 14 回ネットワーク情報資源のメタデータ作成の実際 第 15 回まとめ 2013 年度跡見学園女子大学文学部准教授福田博同
検索システムの構築 ( 静的データベース ) 第 12 回で HTML ファイルに Google 検索窓を埋め込む方法は理解した 今回 :Excel の VBA を使い データベース的検索処理を行う ここでは必要最小限のみ説明する 基礎を学ぶ必要があり 公式サイト以外に Office TANAKA / 田中亨氏 よねさんの Word と Excel の小部屋 Office Pro / Tatsuo Ikura 氏 モーグ わずかな知識で VBA! / 上田誠氏 Excel VBA によるマクロプログラミング / 斉藤俊則氏 等々 無数にある Web 上の好教材を参照し 自習されたい 使用ソフト :Microsoft Excel または Open Office の Calc 手順 : 1. Excel マクロで見本分を理解 2. Excel VBA で見本分を理解 3. Excel VBA でプログラムを実行 4. Excel ワークシートにマクロを貼り付ける
処理の概要 ( 必要部分のみの解説 ) Excel には マクロと VBA がある マクロは手順を記憶し 登録するといつでも利用できる ( 大幅な効率化が図れる ) 手順の結果内容が表示される 処理を理解する マクロの限界 : 作業手順変更 繰り返し処理の対応など VBA を利用する マクロの実態は VBA であるが 手順部分を分かるようにしているプログラム VBA とは Visual Basic というプログラムである XML ファイルに変換したり 外部ファイルを処理したり 様々な処理がプログラムで可能 見本分で理解する では マクロから始める
マクロの操作 1. 見本ファイル wakadata.xl sx のワークシート Sheet1 の B 列 ( 項目 ) で 日本 を探す 2. マクロを記録する : 手順表示 マクロ マクロの記録 ここから記録が開始される
マクロ名を入れ 検索マクロを作る 1. マクロ名に B 列キーワード検索 と入れ Enter してみよう 2. 記録が開始される
検索マクロの手順を行い記録終了 1. B をクリック :B 列が選択される 2. Ctrl + F キーを入れる 検索と置換 窓が出る 3. 検索する文字列に日本と入れる 4. 次を検索をクリック 1. 検索窓を閉じて 2. 表示 マクロ 3. 記録の終了をクリック 4. すると
マクロファイル名を保存するが 1. マクロ画面がでて 2. ファイル 保存 (Ctrl + S) で 3. マクロなしのブックに保存できませんと言われ 4. いいえと入れます
マクロ有効ブックで保存 実行 1. ファイルの種類を 2. Excel マクロ有効ブックにする 3. 和歌データ.xlsm で保存される 4. では 実行してみよう 5. Alt + F8 キーで B 列キーワード検索 を実行してみる
検索が実行される シートに埋め込む セル B12 へ移動した シートにマクロ枠を作る 挿入 テキスト テキストボックス 横書きテキストをクリック
検索が実行される シートに埋め込む 横書きテキスト枠を右下へ広げ B 列検索と書く 枠左下を右クリックするとマクロの登録が出る クリック
マクロ枠作成完了 マクロの登録で B 列キーワード検索を選び OK すると登録される 次回からは マクロ枠をクリックすると利用できる 繰り返し処理などは VBA で行う つぎは VBA を学ぼう
VBA でデータベース的検索処理 B 列キーワード検索 マクロで Selection.Find(What:= 日本 が検索の方法かな? と理解されたであろうか? 文字列検索法は Find メソッドや Filter メソッドがある まず Find メソッドで試してみる Alt + F11 キーで VBA エディタを出す スペースや英数記号はすべて 半角英数 Office TANAKA すべて検索するを参考に 変数を日本語にかえ 検索語を日本にしてみる Sub 見つかったセル () Dim 見つかったセル As Range Set 見つかったセル = Cells.Find(What:= 日本 ") If 見つかったセル Is Nothing Then MsgBox " 見つかりません " Else 見つかったセル.Activate End If End Sub 解説は次ページ
VBA の基本 Sub マクロ名 () で始まり End Sub で終わる Dim 見つかったセル As Range 変数を使う 変数とは入れ物で 中に入るものが変わる 使う時は Dim で宣言する 変数名は日本語でも可能になった ( 見つかったセル は変数 ) As Range はセルの意味 型には String が文字列, integer が整数 などがある 参照 : エクセル大辞典 / 武藤玄氏
VBA の基本 if then else Set 見つかったセル = Cells.Find(What:= 日本 ) 日本 という文字列のあるセルを 見つかったセル という変数に入れなさい( 詳細解説日経 PC21) If 見つかったセル Is Nothing Then MsgBox 見つかりません Else もし (If)~~ なら Then してそうでないなら (Else) しよう そして Ifを閉じよう (End If) MsgBoxはメッセージボックスが出ます 保存したらマクロを表示して 実行してみる 見つかったセル.Activate で C4セルに移動する
VBA の基本検索ボックスから入れる 次の見本は VBA を編集せずに 検索ボックスを出してキーワードを入れる方式 参照 : 文字列検索 -Find メソッドの応用 / モーグ 実は奥が深い InputBox / Office TANAKA, Excel VBA 入門講座ほか前回 :Sub 見つかったセル () Dim 見つかったセル As Range, 最初のセル As Range, ターゲット As Range Set 見つかったセル = Cells.Find(What:= 日本 ") 今回 :Sub キーワード検索 () Dim 見つかったセル As Range, 最初のセル As Range, ターゲット As Range, キーワード As String キーワード = Application.InputBox( キーワードを入れよう, 検索, Type:=2) Application.InputBox はタイプを指定した入力窓です Type:= 2 は文字列です Set 見つかったセル = Cells.Find(What:= キーワード ) If 見つかったセル Is Nothing Then MsgBox " 見つかりません " Exit Sub Else Set 最初のセル = 見つかったセル Set ターゲット = 見つかったセル End If Do Set 見つかったセル = Cells.FindNext( 見つかったセル ) If 見つかったセル.Address = 最初のセル.Address Then Exit Do Else Set ターゲット = Union( ターゲット, 見つかったセル ) End If Loop ターゲット.Select MsgBox ターゲット.Count & " 件見つかりました " End Sub
VBA の基本 If Then Else Do Loop では 次のように書き直そう Sub 見つかったセル () Dim 見つかったセル As Range, 最初のセル As Range, ターゲット As Range Set 見つかったセル = Cells.Find(What:= 日本 ") If 見つかったセル Is Nothing Then MsgBox " 見つかりません " Exit Sub Else Set 最初のセル = 見つかったセル Set ターゲット = 見つかったセル End If Do Set 見つかったセル = Cells.FindNext( 見つかったセル ) If 見つかったセル.Address = 最初のセル.Address Then Exit Do Else Set ターゲット = Union( ターゲット, 見つかったセル ) End If Loop ターゲット.Select MsgBox ターゲット.Count & " 件見つかりました " End Sub そして 前回のようにマクロ枠を作ろう Do Loop は繰り返し行え の命令なので Exit Do がないと無限ループになるので忘れないように
フィルタによる検索色付け 文字列の中を変えるには Find メソッドでのデータ検索 / よねさん 等を参照しようまず 見つかったセルを緑色にしよう Sub 列 B からキーワードをフィルタで検索し色づけ () ' Dim 入れ物 As Object, キーワード As String Columns("B:B").Select ' 列 B を選んで With Selection.Interior 'End With まで Interior ことセルの内部を選ぶ.Pattern = xlnone ' セルのパターンを修飾しない.TintAndShade = 0 ' 色の明暗を標準に.PatternTintAndShade = 0 ' 網掛けをなしに End With キーワード = Application.InputBox(" キーワードを入れよう ", " 検索 ", Type:=2) For Each 入れ物 In Range("B:B") 'B 列で 各 入れ物 の If 入れ物.Value Like * & キーワード & * Then 入れ物 のセルにキーワードがあれば入れ物.Interior.ColorIndex = 4 ' 入れ物 のセルを緑色にする End If Next 入れ物 End Sub
フィルタによる検索色付け 次に それを緑色にしよう Sub 緑色フィルタにする () Columns("B:B").Select Selection.AutoFilter ActiveSheet.Range("B:B").AutoFilter Field:=1, Criteria1:=RGB(0, 255 _, 0), Operator:=xlFilterCellColor End Sub Sub フィルタをもどす () ' ' B 列フィルタをオートにする Columns("B:B").Select Selection.AutoFilter End Sub Sub 色フィルタをなくす () ' 色フィルタをなくす Macro Columns("B:B").Select With Selection.Interior.Pattern = xlnone.tintandshade = 0.PatternTintAndShade = 0 End With With Selection.Font.ThemeColor = xlthemecolorlight1.tintandshade = 0 End With End Sub
Excel VBA のデータベース的扱い 以上で Excel VBA によるデータベース的扱いのほんのさわりを見た ただ 本格的データベースソフトではないので限界は前述した Microsoft Access や SQL も挑戦しよう しかし Excel 上 Web データを取り込んだり Access や Text など他形式のファイルもやりとりできる もちろん HTML ファイルや XML ファイルも出力できる そこで Excel から XML データ出力により XML データベースの構築もできる 次回は XML データ出力を実習する