Access と Excel のテータ交換 前回までは、 Microsoft の Office 製品が Web でどの ように利用できるかについて、 ・ Microsoft A ℃ cess ・ Microsoft Excel という 2 つのアプリケーションの lnternet Assistant を 用いて紹介してきました。今回は lnternet Assistant か ら離れて、 Access と ExceI がどオ・けごけ、、仲良し " かとい う話をしましよう。 どちらもデータを「彡式で扱うので、いかにもデータ交 換ができそうです実際、この 2 つのアプリケーション のあいだでは、 ・ファイルを介して受け渡す データを茁妾送り込む などのガ去で、データの受渡しカ呵能です。また、データ を直接送り込む方 1 去にも、バリエーションがいくつかあり ます。 「聞いて聞いて。昨日、ひどい目に遭ったのよ」 「どうしたん ? 」 「部屋に入ろうとしたのに、ドアを開けられなかったの」 「鍵を落としたんでしよ」 「違うの、ドアチェーンのせいだったのよ ! 」 彼女の部屋のドアチェーンは、鎖の先に留金カ咐いてい るタイプではなくて、まっすぐな金属のバーを倒すタイプ なのだそうです。この金属バータイプはバネか弱ると、ド アを閉めたときにはすみでドアチェーンがかかってしまう ことがあるのです。こうなると、多廻屋さんでも JAF でも 手が出ません。けっきよく、窓ガラスを割って自分の部 屋に忍び込むことに 「それにしても、大きなガラスってすごく高いのね」 それからしばらくのあいだ、彼女は夜遊びかできなかっ たようです。 UNIX MAGAZINE 1998.3 連載 / プログラマー入門ー① などの利点があります。また、 UNIX コマンドの助けを しかし、素直な彼女はその後、来客時にはドアチェー ンをしつかり活用するようになりました。ところがある これらの具ー勺なガ去を紹介しましよう。 ファイルを媒介とする方法 ExceI も Access もデータはバイナリファイルに保存さ れます。しかし、なにかと事情があって 4 、テキストファ イルを読み込む機能ももっています。読み込めるファイル の形式は、以下のようなものです。 ・ HTML ファイル ・コンマ区切りテキスト形式 (CSV 形式 ) ・タフ・区切りテキスト形式 ・スペース区切りテキスト形式 ExceI に HTML ファイルを読み込むカ 1 去は、前回紹 介しましたれ 1. lnternet Assistant を使って、 Access のデータを HTML 形式で出力する 2. HTML 形式のファイルを ExceI に言売み込む という手順で、 Access のテープルやレポートを気軽に Excel の表として読み込めます。同し方法で、 Excel の 表を Access に読み込むこともできます。 ただし、 HTML ファイルは、、 Shift JIS 工ンコーディ ング " で出力しておいてください。さもないと、 法も便利です。テキストファイル形式には、 プなどでフィールドを区切ったテキストファイルを使う方 HTML ファイルよりもオーソドックスな、カンマやタ しまいます。 ような前置きから想像できると思いますが、文字化けして ・ uniq で重複を詩べる ・ sort で並べ替える 借りられるのなら、 ・ツールで加工しやすい ・エデイタで編集できる くのアプリケーションがテキストファイル形式をサポートしてきました 4 昔から、異なるアプリケーション間てつデータ交換のム絲冬手段として、多 ・ sed 、 awk 、 sh 、 csh 、 perl で加工する 129
連載 / プログラマー入門ーの 図 7 マクロの言彖ダイアログ・ポックス 図 9 マクロ・ダイアログボックス ステッフ・イ : マ知の保存先 1 ているすべてのフャ 説明 ~ csv 形式で保存する 図 10 Visual Basic Editor ウインドウ 万イ 2 集表示入書式 0 テ第切 ) 実行 (B) た第ワイントア劃 x 目 , ロりゞ : 癶ツ ( G ・れ“物 D Sub SaveAsCSV() 画を m を猶ー“ x 0 S 報 sC 評 M30r0 白 BA 0 ( ー CSV 形式で保存する M oso れ取、 9 1 ( R ョ n を 0 ( ・ AI つ . S 引・ ct ChDir ・ C. V リ ni 第 2 を 2 Act i WO 「 kbOOk. Sa 合えー F ⅱ 0N0 の 0 :=€C ・第 u 第 aV A 。 0 を 白・・日モシル C 「 teB ・ ck リ p : =Fal End Sub 7 知の記 知急当 SaveAsCSV ート加トキー : マ知の保存先の OK さ量三 ( : SV 1 図 8 言彖終了ツーノレく一 記録にロ i 2. 、、マクロ名 ( 邀 ) : " のフィールドには「 SaveAsCSV 」、 、、説明 ( ) : " のフィールドには「 csv 形式で保存する」 と入力し ( 図 7 ) 、 [OK] ボタンをクリックします。 3. 図 8 の当冬了 " ツーノレヾーが表示されるので、デー タを CSV 形式で保存する操作を実行してください。 4. 操作カ鮗了したら、、、言冬了 " ツールバーの左側にあ る・ボタンをクリックします。 これでマクロの言剥ま終りです。マクロ処理を実行する には、メニューの、、ツール ( 工 ) " →、、マクロ ( ) " →、、マ は、コンパイルする必要がないスクリプト言語なので、変 クロ ( 邀 )... " を選んでください。図 9 のような、、マクロ " 更はすぐに反映されます。 ダイアログ・ポックスが表示されるので、 [ 実行 ( ) ] ポ さきほどマクロとして言求したプログラムは、、、モジュ タンをクリックすれば、言求したマクロ操作かま行されま ール " 内に、、 ModuIe1" として保存されています。 す。 SaveAsCSV マクロのプログラム 「だめ、これしゃあ完璧とはいえないわ」 リスト 2 は ModuIe1 の内容です。 DOS 上で動作す 「なんでやねん。すいぶん手間カヾ成ったやん」 る大昔の BASIC しか知らない方にとっては、このプロ 「まだ Access にデータか渡ってないもの」 グラムはとても BASIC にはみえないでしよう。去も丘の マクロの実体は、しつは、、 Excel Visual Basic" で書か Visual Basic はオプジェクト指向になっていて、 C 十十 れたプログラム、 ・・もっと正確にいえばサプルーチンで の文法をとりいれています。 す。言求したプログラムに手を加えれば、 Access にデー また Excel VisuaI Basic は、文法的には Visual Ba- タを送り込むこともできます。 sic の仲間ですが、 Excel のデータにアクセスするための 機能 ( オプジェクト ) が使えるように孑長されており、 Vi- VisuaI Basic Editor sual Basic の文法を知っているだけではプログラムは作 Excel VisuaI Basic に農れるために、 CSV 形式てイ呆 れません。 存するマクロのプログラムをみておきましよう。 リスト 2 を見てみましよう。マクロのプログラムは、 メニューの、、ツール ( 工 ) " →、、マクロ ( 邀 ) " →、、 VisuaI Sub サプルーチン名 Basic Editor (Y)" を選ぶと、図 10 に示したエデイタの サプルーチンの本体 ウインドウか開きます。ウインドウの左側は、 Exce1 ファ End Sub イルに含まれているプログラムの一覧で、選んたプログラ という形式です。リスト 2 では、サプルーチン名はマクロ ムの内容力イ則に表示されます。 名として指定した、、 SaveAsCSV" になっています。 マクロの重川乍を変えるには、ウインドウの右側でプログ また、シングルクオート ( ' ) の後ろはコメントですが、 ラムを書き換えて保存してください。 ExceI Visual Basic ・ M ” 0 」ふ日”に - 4NGAc ・・ 0 物 d 謝引ロート月 132 UNIX MAGAZINE 1998.3
映り「らせ 小工・ラセん」とは意味 が選う第 作者は白い 泉積花を限り一 連載 / プログラマー入門ー① 図 17 の尺 卩卩当ル印表示挿入書式 0 しト国ツ-慕@ ンアせ ロトフ司 @ ヨ国フ”引を、日を物ー 4 モ心 問く 0 図 15 データソースの尺ダイアログ・ポックス 再同ロ ! 、 : トスの析 、 M ” 0 、 0 こ ( を三 ラ→、、スはリ 0 Wo 市 book sh•r•ble Fox 0 30 0 砂 : : ー shar•ble) ー旧 M 0 日 2 めー第 h 鼾山 ) い一 0 " れ 0 を虱 1 第 ab ) M 03 SOL S ーめ 4 物、第扉 Open “′を北 le ) ( t•bks 0 を第 le ) - 旦ー「万再弖ト乍成すを 図 16 クエリー乍成 ファイル ) 編集表〒 ) 書式たフ第印 条件 0 レ上ト。 ( 印ウインドウ OK 参 ( 印ー 同口 : 闇ハロティマンガテーアル 画の「らせん」とはかつ ・い工・フにノ 80 % 黒のかさ水 作者は白い人 響花第第 専 0 苑な ( 物 .. む ー 0 イ、一リアでない 2 3 5 シルバームみ、ギャクわいコわまにかシリアスに ート弖日 同ロ ・・ M 、のりエリーー 国同ロミ 2 - と」上 ! 」と上ー / 5 しコード上」 . 亠ー 図 18 Excel の表に変換した例 当ファイルの編集 ( 印表〒挿入 (P 書式 0 ツヨ想テ・ - 第 0 ) ウインドウヘルア x ・ 0 B ~ まー」蕚議圉 % MS ゴシッケ 作品名 度を 0 、 M ” 0 れ Excei - 60 ( 1 小工・ラセン 映わ「らせん北は意叶がう 黒のかき氷 作者は白い人 積花第限 泉積花を曜リなく第ノむ 。シルバーース ギャクカつのまにかシリアスに a10X ドコー 出条件を表〒 / 編果すをコく出条件〒 ) ルを指定して、はいおしまい " というわけにはいきません。 図 15 のように、 Access のファイルをデータ ソースとして登録するまでに、、、 ODBC " 流のまわりくど い手続きが必要です。 3 番目のステッフでは、 ・データベース ( データソース ) のどのテープルに含まれ る情報を ・どのように取り出すか ( 抽出するか ) < 品 コマンド Access の場合は ? Access から Excel にデータを送ったり、 Excel のデー タを Access に取り込む方法は、さきほどの場合とくらべ るととても簡単です。 Access のデータを Excel に送るには、テープルやク 工リーを選択した状態で ( 図 17 ) 、メニューの、、ツール ーを作 ・ Microsoft Query のインターフェイスでクエリ ( 工 ) " →、、 Office Links ( し ) " →、、 ExceI に出力 ( △ ) " を る 選んでください。送ったデータを含む Excel のウインド 、、クエリー " ウイザードを使う ウがいきなり表示されます ( 図 18 ) 。 一方 Excel のデータを Access に取り込む方法は、 という 2 不転頁の去のどちらかで指定します。図 16 は、 csv 帋式のフイルを取り込むときと同しです。メ = 、 Microsoft Query' ウインドウです。 Access のクエリー ーから、、ファイル ( 当 " →、、外部データの取り込み (P)" と似たインターフェイスになっていますれどちらの力法 、、インポート① ... " を選んで、 Excel のファイルを指 でも、データを抽出したり並べ替えたりできます。ウイザ 定します。 ードや Microsoft Query を終了すると、データが Excel に渡されます。 Visual Basic プロクラミンク この方法ではクエリーの結果を取り込めるので、デー タを加工してから取り込みたい場合に向いています。しか 「ん一、なんかダサいのよね」 し、 Access のテープルの内容をそのまま取り込むだけ、 「これだけなんでもできるのに、何カ材﨑やねん」 という単純な処理をするには手順が複雑すぎるのか嘆点 です。 う、もっとびったりのことができてはしいのよね」 を、 135 UNIX MAGAZINE 1998.3
連載 / プログラマー入門ー 0 表 1 / く口ティマンガの表 作品名 おテラ / 、 小細工・ラセン 黒のかき水 鏡花無限 シノレヾームース オフィーリアではない ギャクがいつのまにかシリアス 泉鏡花を限りなく楽しむ 作者は白い人 日麪酌の「らせん」とは懣未が違 SF 度 100 % 10 % 0 % 20 % 80 % 図 1 テータを ExceI に入力 〕ファイえ化 ) 編集表示物入書式 ) た見デ第ン門ア、 x MS p ゴシック い " り B 才Ⅱ第を國、 % こ , 2 おテラへ 3 ~ 小細工・ラセン 4 黒のかき氷 を、花限 を、シルバームース コマンド オフィーリアではない 映画の「らせん」とド鬘味が違う 作者は白い人 泉花を限りなくノむ キャクがいつのまにかシリアスに 10 ) % 1 SF 図 2 Excel のデータを CSV 形式て保存する わ・元バ キャンセル 保存 1 第ル名を付けて埓俘 「そうかなあ。まあ、とりあえす試してみよか」 ( O )... " で、 CSV 形式のファイルを開けはいいじゃない」 「どうせ Excel と同しでしよ。、、ファイル ( 当 " →、、開く 「どうするんや ? 」 「あら、それならできるわ」 に読み込みます。 2 番目のステッフでは、 CSV 形式のデータを Access ル ( リスト 1 ) として保存されました。 これで、 Excel のデータが CSV 形式のテキストファイ ください。 ますが、 こではカレントのワークシートだけを保存して シルノく一ムース , ギャクがいつのまにかシリアスに , 10 % 鏡花無限 , 泉鏡花を限りなく楽しむ , 0 % 黒のかき氷 , 作者は白い人 , 20 % 小細工・ラセン , 映画の「らせん」とは意味が違う , 80 % おテラへ , オフィーリアではない , 100 % 作品名 , 一言 , SF 度 リスト 1 MANGA. csv の内容 などの方法で、自由にデータを編集してから、 Excel や Access に読み込ませることもできます。 Excel のデータを Access に読み込む それでは、 CSV 形式のテキストファイルを介して、 Ex- cel のデータを Access に移す手順を紹介しましよう。 今回サンプルとして使うのは、パロディマンガをまとめ た表です俵 1 ) 。この表を Excel に入力した状態か図 1 です。 最初のステッフは、図 1 のデータ、、 MANGA. xls" を CSV 形式で保存することです。これはとても簡単です。 1. メニューから、、ファイル (E)" →、、名前を付けて保存 ( A )... " を選びます。 2. 、、ファイル名を付けて保存 " ダイアログ・ポックスカ俵 示されるので、、、ファイルの不頁 ( 工 ) : " から、℃ SV ( カ ンマ区切り ) ( *. csv ) " を選びます。 3. 、、ファイル名 ( ざ ) : " には「 MANGA. csv 」と入力して、 [ 保存 ( S ) ] ボタンをクリックします ( 図 2 ) 。 竹喋はこれだけです。処理中に、、、複数のワークシート を csv 形式のファイルに保存することはできないので、 カレントのワークシートだけを保存するか、保存するファ イル形式を変更せよ " という意味のメッセージが表示され 130 「はいはい。 ・・まあ、認識できません、なんていわれ た。あんた、ばかあ ? 」 残念ながら、 Access で CSV 形式のファイルを直接開 くことはできません。むりやり CSV 形式のファイルを開 いても、 データベースの形式 ) ファイル名 ' を認識できません。 というメッセージか表示されて、言も囚みに失敗してしまい ます。 Access で CSV 形式のファイルを読み込むために は、ますデータベースを用意しておいて、そこへファイル をインポートします。 Access を起動して、既存のデータベースを読み込む か、新規にデータベースを作ります。ここでは、例とし て、、 Manga. mdb " データベースを新規に作ることにしま す。 UNIX MAGAZINE 1998.3
連載 / プログラマー入門ー 0 リスト 2 SaveAsCSV マクロのプログラム Sub SaveAsCSV() ←マクロ名がサプルーチンの名前になる ' SaveAsCSV Macro ' CSV 形式で保存する Range("A1") . select ←、 AI " セルを選択する " ←ディレクトリ C:*unimaga* へ移動する ChDir "C : *unimaga ActiveWorkb00k. SaveAs Fi1eName : ="C : *unimaga*MANGA. csv" , FiIeFormat : =xICSV , CreateBackup : =Fa1se ↑アクテイプなブックを保存する End Sub ChDir "C ・ %unimaga は、 CSV 形式のファイルを保存するディレクトリ C: *unimaga* へ移動するためのものです。 3 行目の最後はアンダースコア ( ー ) で終っていますが、 これは、、次の行へ続く " という未です。つまり 3 行目と 4 行目は、 2 行で、 ActiveWorkbook. SaveAs 引数 , 引数 , 引数 という BASIC の一文です。前の 2 行にくらべてかなり複 雑なコードですね。この文は、、 ActiveWorkbook" オプ ジェクトの、、 SaveAs" メソッドを実行します。 SaveAs メ ソッドは、メニューの、、名前を付けて保存 " に相当します。 SaveAs メソッドは省略可能なオプションの引数をもっ ており、これらは C 言語や C 十十言語にはないガ去で指 定します。オプションの引数には名前カ咐いていて、 引数の名前 : = 引数の値 ' SaveAsCSV Macro ' CSV 形式で保存する の、℃ SV 形式で保存する " は、マクロを言泉するときに、 、、マクロの記録 " ダイアログ・ポックス ( 図 7 ) の、、説明 ( ) : " のフィールドに入力した文字列です。 サプルーチン本体の最初の行の、 Range("A1") . Se1ect は、ワークシートの、、 AI " のセルお尺しています。 2 行目の、 UNIX MAGAZINE 1998.3 表 2 SaveAs のオプション引数 引数の名前 FileN ame FileFormat CreateB ackup 引数直 C:*unimaga*MANGA. csv xlCSV False という形式で引数の値を指定します。たとえば、 3 ~ 4 行 目の SaveAs の引数は、表 2 の 3 つのオプション引数を 指定しています。 本当は、サプルーチン本体の 1 ~ 2 行目がなくてもこの マクロは重川乍します 5 。興味のある方は、 SaveAsCSV プ ログラムを変更してみてください。 マクロのプログラムを書き換えれば、メニュー操作の組 合ぜ以」「 . の処理かできます。あとで簡単なプログラムを紹 介しますが、その前にメニューでできることをお話しして おきましよう。 そうそう、書き忘れていました。図 10 のエデイタ・ウ インドウから抜けるときは、メニューの、、ファイル ( E ) " 、、終了して Microsoft ExceI へ戻る (C)" を選びます。 ファイルを介さない方法 ファイルを介さなくても、 Excel のデータを Access の テープルやフォーム、あるいはレポートに送ったり、新し いテープルなどを作ることができます。しかも、ユーサー が Access を起ける必要はありません。すべてを完全に、 ・・とはいきませんが、半自重加勺に ExceI がおこなって くれます。 これには、 Excel の、、データ ( ) " メニューの、 5 工ラーカ考 &' おしたときク別イ 1 三には若 T の違いがあります。 133
連載 / プログラマー入門ー 0 図 11 Access にデータを送るためのメニュー 」に ] ファイ [ ) 編集 ( 印を〒 ) 挿入書式 0 け、第 0 ) ウイントつフ D 日び : 茎第づ第 ) ・いし MS p ゴシック おテラへ 3 。小細工・ラセン ~ 4 ( = ・黒のかき水 一 5 花無限 0 ゞシルバームース 9 0 12 13 コマンド 図 12 奐する囲の尺 を〕ファ翻・集鴫 ) 表示Ⅳ ) 挿入書式 0 - た幕テ・ - Q ウイントつ崢アせ . 」劃 x D 2 ! 3 」づ MS p ゴシしツ - ~ ~ 、い、第 ~ = ま國 % 1 図 14 Access のテーカレに変換した表 は ? [ ) 0 表示 ) 揮入書式ゆしコー砂ツンフ・ ロテっヨゎムい日物モシ・ヨ 問く 0 新規作成 、 M に ~ 0 三 0 蹶 0 司ー MANG.Ax\s “ M を 0 ミ 0 A : 心三ミ 回ロ 第同ロ 物ル第 [ ) 入力規印虹ル 区一位阯 . テンフ・いトウイナート第 1.- グルっ・とトライン定 ( 0 ) ト 外部デ、 - ) 」込み 0 第 A 。。”第に変換Ⅳ ) ー オフィーリアではないゞ : ・ 映画の「らせん」よは 作者は白い人 泉鐔花を限りなく楽ノ 0 十ャクがいつのまにか SF ィーリアでな 1 い 小報工・ラセン 映り「らせん」とオ意味が違う 黒のかき氷 作者は白い人 泉積花を拠」なくむ 花第鵬 シルバア—スギャクカつの、ゾノアスに ぬード上廴」「一一 - 了ⅵ”レ 5 0 《 0. 住 デこ斗どト さ ) " を選び、 [OK] ボタンをクリックしましよう。 Ac- cess か起動し、図 13 に示したような、、ワークシートイン ポートウィサード " のウインドウか表示されます。 このウィサードは、 CSV 形式のファイルをインポート したときの、、テキストインポートウィサード " とほとんど 同じ形式です。あとは、ウイザードに従ってテープルを 作ってください。これだけで Access のテープルに変換で きるのでとても簡単です ( 図 14 ) 。 Microsoft Query の使用 「ほら、これならすいぶん便利やろ」 「でも、送りつけるだけでは芸がないわね。データを奪い 取ることってできないの ? 」 奪い取るというと言尠各がありますが、、、外部データの取 り込み " 機能を利用すれば、 Access や、そのほかのさま ざまなアプリケーションのデータを ExceI に直接取り込 むことができます。 誓ンセル このコマンドは、、、 Microsoft Query" を使ってデータ べースなどからデータを取り出し、 ExceI に読み込ませま ・ MS Access フォーム ( ).. す。ただ、実際の操作手順はかなり複雑なので、今回は手 ・ MS Access レホート ( C ).. 順の概要だけを紹介しましよう。 ・ MS Access に変換 (Y).. 最初のステップでは、メニューの、、データ (D)" →、、外 を使います ( 図 11)0 部データの取り込み ( ) " →、、新しいクエリーの作成 Excel に入力した / ヾロディマンガの表を Access のテー さ ) … " を選び、、、データソースの j 尺 " ダイアログ・ポッ プルに変換してみましよう。 Access に変換する範用を指 クスを表示します。 定して ( 図 12 ) 、メニューの、、データ (P)" →、、 MS Ac- 2 番目のステッフでは、、データソースの〕尺 " ダイア cess に変換 ( y )... " を選択してください。、、 Microsoft ログ・ポックスで、データ窈当ルこ ( データソースと呼び Access に変換 " ダイアログ・ポックスか表示されます。 ます ) を指定します。ここでは Access のファイルがデー こでは、、、変換先 " として、、新しいデータベース タソースになります。しかし、、、ェクスプローラでファイ M , 0 ミ 0 Excel - M 角「ぎ」 Ax ヒ 同、 オフィーリアではない 小細工・ラセン 映画の「らせん」とは意叶が違う - 黒のかき氷 作者は白い人 花無限 泉花を限りなく県しむ ン止バニぬニューーー主クがいつの二かシリヱュに一 - ーーー」の 図 13 ワークシートインポート・ウィサード 元のデー知 ) 先頭行が列見出 - , である場合、これをな - ルド名として使うことができます。 行辷をド名としすツ ワー、 - トインホ・一トウイナード おテラへ オフィーリアではない 小工・ラセン映り「らせん」とは意味が遣う 8 黒のかき水作者は白い人 . 2 積花長泉積花を限りなく楽しむ シルバームースキャクがいつのまにかシリアスに一 度 134 UNIX MAGAZINE 1998.3
連載 / プログラマー入門一① Va1ue く > " " Wend UNIX MAGAZINE 1998.3 ます。 の行のデータを Access のレコードセット、、 rs" に登録し を串ヾ、 1 列目のセルにデータか書かれているあいだ、そ 続く WhiIe ループでは、 Excel の 3 行目以降のセル されます。 は、テープルのデータの集合であるレコードセットか第 ードでデータを登録するための前準備です。変数、、 rs" に は、データベースの、、パロディマンガ " テープル ( 追加モ dbOpenTab1e , dbAppendOn1y) Set rs = Db. OpenRecordset("'€ロディマンガー ます。 の 3 行目↓年のデータを Access のテープルに追加してい プログラムに戻りましよう。最後のループでは、 Excel Basic リファレンス " を参照してください。 プ ( 旦 ) " で、 Microsoft Office/Excel/Access VisuaI 関するマニュアル [ 1 ー 3 ] を入手するか、メニューの、、ヘル る方は Excel Visual Basic と Access VisuaI Basic に 詳しい説明は省力せていただきますが、どうしても気にな こでは コードをすんなりとは読めないかもしれません。 ル ( 構成 ) にみえるかか理解できていないと、サンプルの データベースが、プログラムで扱うときにどのようなモデ Excel や Access に登場するワークシートやテープルや Defs と・ 「 Worksheets と Cells と Table. Fields と Db. TabIe- 「どのへんカ巧 ) からへんのや ? 」 「うーん、ますます早できない」 テーフル定義の集合に TabIe を追加する " となります。 す。このコードを人間用に翻訳すると、、、データベースの は、作成したテープルをデータベースに追加するコードで Db. Tab1eDefs . Append TabIe ループの直彳変の、 キスト型 " として作っています。 いないので、どのフィールドもサイズが 255 バイトの、、テ ここではデータの不鶤頁までは区別して ています。ただし、 かぎり、その文字列をフィールド名としてテープルを作っ の While ループのなかで、セルに文字列が瞽かれている 取に、 appAccess . App1ication. Quit で Access を終了して、イベントハンドラの処理を終え ます。 「は一ら、できた。これでどうだ ! 」 「で、これってどうやって使うの ? 」 「 [Access へ送る ] ボタンをクリックしてみいな」 「したよ。あ、なんか、タスクバーに Access が出てきた。 ・・と思ったら、いなくなったよ。で、どうなったの ? 」 「今度はこっちゃ。 C:*unimaga*Manga. mdb : ンヾロ ディマンガの表がコピーされとうで」 「ふーん、本当だ。でも、このプログラムって解説された 部分はなんとなく分かったつもりになっても、違う処理を したいときにどうすればいいのか、さつばり見当がつかな し ) ねえ」 ☆ 今回は、 Excel と Access のデータ交換を、用意されて いる機能と作成した BASIC プログラムの両方で実現して みました。 プログラムを作るには、 Excel や Access のオプジェク トの使い方に習熟する必喫があり、道のりは平坦ではない かもしれません。しかし、マニュアルにはサンフ。ルコード も付いているので、今回のサンプルのように制限か厳しく てエラー処理か不十分なプログラムであれば、慣れていな い方でも作れるようになるでしよう。ますは、マニュアル のサンプルを試すことから始めてみてください。 ( あらい・みちこ ASTEC) [ 文献 ] [ 1 ] David Boctor, Microsoft 0 ガ e 97 / レな社襯 Basic 叩 6 リ S め叩 , 1997 ( ドキュメントシステム訳 tMicrosoft Office 97/Visual Basic ステッフ。ノヾイステッフ。』、アスキー、 1997 [ 2 ] Microsoft, Microsoft 0 ガ e 97 / い s 社 Basic ん 0 れ - 田 ge 可℃れ ce , 1997 ( マイクロソフト訳 CMicrosoft Office 97/Visual Basic ランゲージリファレンス』、アス キー、 1997 年 ) [ 3 ] Microsoft, Microsoft 0 、伊 ce 97 / レなれ召を c pt 、 0- grammer's Guide, 1997 ( マイクロソフト訳 fMicrosoft Office 97/VisuaI Basic プログラマーズガイド』、アスキー 1997 年・ ) 139
連載 / プログラマー入門ー 0 図 20 プロバティ・ウインドウ ツールポックス 図 19 「びったりって、どんなふうに ? 」 「つまりい、パロディマンガの表を書き換えたときに、コ CommandButtont Comm 日 u ー、 全体」項目月叮 マンドー発で Access に送りたいの」 ( フラ、ェク Comm 旧日リ 0n1 「それなら、 Excel の、、 MS Access に変換 " でええやん A00 引鼾 0L0 記 F 引 F ・ヒ・ : ロ H8 朝℃ 00F & 日ョ ckCo 断 「でも、範用を指定するのも、不必要なはど高い機能のた 日 ckS ⅳに ヨ - ー m 日・ S を yIeO A 。弱へ送る Enabled T ′リ・ めにウィサードにつき合うのも嫌なの」 気 Font ー & ト旧 0 〔 )OI コ田 2 & F を 00 「・・・・・・ ( わがままやなぁ ) 」 0.25 Left このわがままなユーサーの要求を満たすような機能を作 ってみましよう。マクロを書き換えるだけでもよいのです ワークシートにボタンを追加 図 21 が、もうすこしおしゃれに、、、ワークシート上のボタンを 、ファイ編集 ( 0 表示 0 迎挿入叩書式 0 たルテ・一 ) ウイン第ア クリックすると、表を Access のテープルに変換する " と いう動作をするものを作りましよう。 Åcce へ送る コントロールの追加 2 オフィーリアではない おテラへ 映画の「らせん」とは味が違う 「小細工・ラセン 「 Excel って、ボタンを作れるの ? 」 。作者は白い人 黒のかき水 泉鏡花を限りなく楽ノむ 鏡花無限 「そうやで。知らんかったやろ」 ャクかいつのまにかンリアス 7 ' シルバームース コマンド Windows の世界では、 でショートカット・メニュー 7 を表示し、メニュー項目 ・ボタン の、、プロバティ " を選んでプロバティ・ウインドウを開い ・テキスト入力フィールド てください。、、本 " タブの、℃叩 ti 。Ⅱ " の右側の文字列 を「 Access へ送る」に書き換えると ( 図 20 ) 、ボタンのラ ・イメージ ベルも同し文字列に置き換わります。図 21 は、パロディ などの、 GUI を友する部品をコントロールと呼びます。 マンガの表のなかに [Access へ送る ] ボタンお助日した状 標準では、コントロールを作るためのツールポックスが表 態です。 示されていないので、 Excel のワークシート上にボタンを データを Access に送るプログラムの作成 作れるなんて気づかないかもしれません。 Excel のボタンは、クリックしたりフォーカスが移動 さて、次はいよいよプログラムの出番です。 したときなど、状態か変化したときにプログラムを呼び出 すことかできます。 ・ボタンをダブルクリックする →、、ツールノヾー ( 工 ) ' ますは、メニューの、、海衣 (Y)" ・ボタン上でショートカット・メニューの、、コードの表 →、、コントロールツールポックス " を選んで、 図 19 のツ 示 (Y)" を選ぶ ールポックスを表示してください 6 。左の列、上から 4 番 のどちらかを実行すると、 VisuaI Basic Editor かき、 目の矢研彡マークがボタン・コントロールです。 ツールポッ ボタンをクリックしたときに実行されるサプルーチンを表 ボタンを置 クス上のボタン・コントロールをクリックし、 示します。このサプルーチンのように、イベントか発生し く範用をマウスで指定してください。 たときに呼び出されるプログラムは、一殳にイベントハン ボタンのラベルが、、 CommandButtonI" となってい ドラと呼ばれます。 るので、、、 Access へ送る " に変更しましよう。ボタン上 7 マウスの右ボタンをクリックしたときに表示されるメニューのことを、 6 、コントロールツールポックス " の代わりに、同しメニューの、フォー Windows ではショートカット・メニューと呼びます。 ム " を選んでも、いル ) ツールポックスか表パされます。 アロハ・ティ 03P れ on ・ヾ 0 0 を 0 ー MA 慱 30 、 ls SF 136 UNIX MAGAZINE 1998.3
連載 プログラマー入門ー 0 イ メ フ CJ は 図 図 5 テキストインポート・ウィサード 峯」を畏 1 き形式であをと見なされますふこを嚇正しくない場合は、適ょ テ、タ形式 」記号付きうな々やタよど : 0 トカ切引 1 てい } に 0 固定長 - つイールドの長さ力定されて、ら フ言ル 0 都 - SERS 第 ARA 学 UNIMA 住学鰍 ) 3 を い乍品名 . ーま . 度 おテラへ . オフィーリアではない . tc 1 小報工・ラセン . 映の「らせん」とは意味がう . 別第 黒のかき氷 . 作者は白い人 .20•x 飛花第 . 泉鏡花を限りなく楽しむ . ox シルバームース . ギャクがいつのまにかシリアスにコ ox 、 M に 0 い A00 ・一ミ テキストインホ、一トード 外部テ。ー第乃取り込み ( 0 ) イン市・一トい い上を新一 HTML 形式で保印 デヨ、一スフでハ・テゆ 1 ト A ゴわト入力しくだに ~ 図 4 CSV 形式のファイルをミ尺 図 6 Access のテーカレに変換した例 万イ [ ) 編集 ( 印表示Ⅳ ) 揮入 q ) 書式 0 ) いードた似 0 ウイントつヘル ) ・せ ・朝 } 新す ; 、ⅵを↓天い物の朝 ロテっ御ヨ新フゎムい日マ司 4 い司 ロ 3 円ディ ”ィ ) ーをい 、 M 朝 0 を 0 A こ c を第 目同ロ 修市・一ト インホなト 言同ロ 聞パロディマンガ . テーアル SF ィーリアではない 小報工・ラセン映り「らせん」ま意味が違う 黒のかぎ氷作者は白い人 鏡花謇曜泉積花を限りな ( 第ノむ OX シルバームースキャクいつの却、シリアスに 10 % 冫も機ま 方イ紐地第「新にすー = 計ヨ更新日指定な -. を簽件 彊倥〒撲票畯叫巖“龝を選 ト阯ト i - のイルが見うはした。 「データか変わるたびに Excel から Access にデータを 1. メニューの、、ファイル ( 当 " →、、外部データの取り込み コピーしてるのだけど・・ 、、インポート①… " を選ぶと ( 図 3 ) 、、、イン 「それが、どうかしたん ? 」 ポート " ダイアログ・ポックスカ鯛きます。 「同し操作を繰り返すのって飽きちゃう。私には向かな 2. 、、インポート " ダイアログ・ポックスで、、、 MANGA. いわ」 csv " ファイルお尺し ( 図 4 ) 、 [ インポート ] ボタンを 「でも、計算機の操作って、そうゆうもんやないかあ ? 」 クリックします。 「人間を退屈させるなんてよくないわよ。きっと、もっと 簡単な力法があるはす」 これで、、テキストインポートウィサード " カ起動します 「ほなら、マクロやな」 ( 図 5 ) 。あとは、ウィサードに従って町石ムみの去を指定 していくと、自重加勺に CSV 形式のファイルが Access の まったく同し処理を何度も繰り返すのなら、マクロを使 テープルに変換されます。 ってみてください。マクロはユーサー窈巣作手順を言当求し 図 6 は、 CSV 形式のファイルを Access の、、パロディ たもので、言当求した操作をあとて何度でも実行できます。 マンガ " テープルに変換した例です。このデータベースは あとで使うので、 Manga. mdb として保存しておきまし マクロの記録 こでは、、、 MANGA. xls" を CSV 形式で保存する処 理をマクロにしてみましよう。 1. ExceI で、メニューの、、ツール ( 工 ) " →、、マクロ ( 邀 ) " 、、新しいマクロの言求但 ) … " を選びます。、、マクロ の言ダイアログ・ポックスか表示されます。 0 マクロ 「もうヤダ ! 」 「今度はどうしたんや」 131 UNIX MAGAZINE 1998.3
連載 / プログラマー入門ー 0 リスト 3 CommandButton1-Click イベントハンドラ Private Sub CommandButton1-C1ick() 'Access を起動する Dim appAccess As Object ←変数の宣言 Set appAccess = CreateObject("Access. Application") ) 新規データベースを作る appAccess. NewCurrentDatabase "c : *unimagaYManga. mdb" set Db = appAccess. CurrentDb ←カレント・データベースを Db に設定する , " パロディマンガ " テープルを作る Set Tab1e = Db. CreateTab1eDef(" パロディマンガ " ) ' " パロディマンカ " テープルのフィールドを定義する Dim i As lnteger 1 1 Whi1e Worksheets("Sheet1") . Ce11s ( 2 , i) . Va1ue く > Set Fie1d = Tab1e . CreateFieId(Worksheets("SheetI") . CeIIs ( 2 , ↑ Access のテープルのフィールドを作る ←作ったフィールドをテープルに登録 Tab1e . Fie1ds . Append FieId 1 Wend 作ったテープルをデータベースに登録 Db. Tab1eDefs . Append TabIe ← ) データを追加する i) . VaIue , dbText , Set rs = Db. OpenRecordset ( " ′く口ティマンガ " , dbOpenTab1e, dbAppendOn1y) 255 ) k) . Va1ue Dim j As lnteger 3 WhiIe Worksheets("SheetI") . Ce11s(j , 1) . Va1ue く > " " 新規レコードセットの作成 rs . AddNew ← Fo て k = 1 To i 1 rs(Worksheets("Sheet1") . Ce11s ( 2 , k) . Va1ue) ↑レコードを登録 Next rs. Update ←レコードセットの更新 Wend appAccess . App1ication. Quit ← Access の終了 End Sub 「なんだかよく分からないけど、 CreateObject() の引数 は文字列だよね。ほかに何カ甘旨定できるの ? 」 「それを説明するのは難しい。引数の一覧表なんてあらへ んねん。計算オ勺に調べられないことはないんやけど、ふ つうはそれぞれのアプリケーションのマニュアルて探すこ とになるなあ。ま、これ以 - ECOM の深みにはまらんう ちに、先に進も」 続けて、 appAccess オプジェクトの NewCurrent- Database メソッドで新しいデータベースを作り、 Cur- 138 Worksheets("Sheet1") . Ce11s(j , rentDb メソッドを使ってこのデータベースに、、パロディ マンガ " テープルを作ります。 TabIe 変数には新規に作っ たテープルか疋されていますが、この時点ではまだフィ ールド ( カラム ) は定義されていません。 Access のテープルのフィールドは、 Excel の表に合わ せたいのですが、表の見出しのラベルや個数は変わるかも しれません。そこで、 Excel の Sheet1 の 2 行目を見出 しとみなして、 WhiIe Worksheets("Sheet1") . Ce11s ( 2 , i) . UNIX MAGAZINE 1998.3