ExcelVBAさて、前回「具体的なモノをつくってみるぞー」という言葉で締めさせて頂いたわけですが、ExcelVBAとAccessデータベースを使った簡単なアプリケーションを作ってみます。一緒に作ってみてください。クラスで処理をまとめるこの連載がもっと実用的なサンプルで書籍になりました!擬似twitterをつくろうどんなものがわかりやすいかなーと考えましたが、ユーザーが多くて理解しやすいであろう、twitterのようなモノを作ってみようかと思います。ツイートするような感覚でデータベースに書き込んで、更新するとタイムラインに発言が増える、みたいな。複数のアカウントをつくることで、データベースっぽさも味わえると思います。実際の作成前に、構想を練ります。アカウント情報と、ツイート内容を格納するふたつのテーブルつくることにします。頭につけた名前になっていますが、必須ではありません。(後で見たときに分かりやすいかなっていう自分ルールです。)忘れちゃいけないのが、キー(重複しない項目)にするフィールドをつくること。アカウントはキーにできますね。(下ふたつのtwitterアカウントは架空のものです)重複するデータを持つ場合はテーブルを分けると管理しやすくなります。t_tweetのテーブルにf_name(表示名)のフィールドを持ってしまうと、ツイートするたびに表示名も無駄に記録してしまうこととなり、変更したときには、過去の表示名を変えるのが大変になります。別のテーブルに情報を持つことで、ツイートを読み込むときにf_id(アカウント名)を参照すればf_name(表示名)はそちらのテーブルから持ってこれるわけです。これなら、表示名が変更されても過去の全ツイートに反映できます。Accessを開いてテーブルを作ってみましょう。キャプチャですが、さすがにもう使っていないので、2007以降のものはこの後追記してあります。該当のほうをご参照ください。新規作成のアイコンを押すと右側にこういうのが出てくるので、[空のデータベース]をクリック。ファイル名を要求されます。ここで保存したファイル名と場所を後で指定するのでちゃんとメモっておいてください。このような画面が出てきます。[デザインビューでテーブルを作成する]をダブルクリック。さきほどの構想のとおりに、まずはt_mainのフィールド名とデータ型を指定します。データ型は、数値か日付か文字列(テキスト型)か、ということを決めておきます。メモ型はテキスト型より上限文字数の大きな文字列型です。キーは、赤く囲った部分の右クリックから設定することができます。テーブル名は、一度保存ボタンを押すと付けることができます。同じように、t_tweetテーブルも作成します。ここではf_noを数値型にしていますが、オートナンバー型にしても良いと思います。レコードを追加すると自動でナンバーを振ってくれるので管理が楽です。反面、後から番号を変えることができなくなるので用途によってお好みのほうを選択してください。これでふたつのテーブルの作成が完了しました。ここで、t_mainのテーブルにだけ、レコードを直接入力してしまいましょう。ダブルクリックで開きます。さきほど構想したとおりに、入力します。ご注意:本来ならばtwitterアカウントは@から文字列がはじまるのですが、Excel側のバージョンによって先頭が@だとセルに書き込みできないので、ここから先は@無しで進めていきます。ちなみにt_tweetはカラのまま。こちらへはExcelVBAから書き込んでいきますので、Accessを開いての操作はこれでおしまいです!保存して閉じてしまいましょう。追記:作成(2007~)2013のキャプチャなのですがおそらく2007以降はだいたい同じなんじゃないかなーと。データベース]をクリック。ファイル名と保存場所を指定して、ファイルを作成します。[デザインビュー]をクリック。ここでテーブル名を要求されるので作りたい名前を入力。さきほどの構想のとおりに、まずはt_mainのフィールド名とデータ型を指定します。データ型は、数値か日付か文字列(テキスト型)か、ということを決めておきます。テキスト型は2種類あって、短いテキストは255文字までという上限があります。そのぶん容量が少なくて済むので、内容次第ですね。ひとつテーブルを作ります。[作成]タブの[テーブルデザイン]をクリック。t_tweetテーブルを作成します。ここではf_noを数値型にしていますが、オートナンバー型にしても良いと思います。レコードを追加すると自動でナンバーを振ってくれるので管理が楽です。反面、後から番号を変えることができなくなるので用途によってお好みのほうを選択してください。主キーは、該当のフィールドを右クリックで設定できます。テーブル名は一度上書き保存するとつけられるみたいです。これでふたつのテーブルの作成が完了しました。ここで、t_mainのテーブルにだけ、レコードを直接入力してしまいましょう。[データシートビュー]をクリック。さきほど構想したとおりに、入力します。ご注意:本来ならばtwitterアカウントは@から文字列がはじまるのですが、Excel側のバージョンによって先頭が@だとセルに書き込みできないので、ここから先は@無しで進めていきます。t_tweetへはExcelVBAから書き込んでいきますので、カラのままでOKです。Accessを開いての操作はこれでおしまいです!保存して閉じてしまいましょう。こちらも、セルの位置を忠実に作ってもらえれば、後述のコードを手直しせずに使えると思います、幅や色や枠線なんかはお好みで大丈夫です。動かしてみるこちらの記事を参考にVisualBasicEditorを開いて、Module1の作成と、3つのボタンをつくるところまでやっちゃいましょう。Module1には何も書いていませんので、ボタンへのプログラムの割り当ては後で行います。VBAを省コードで書くさて、前回Accessを連携させる基本コードを書きましたが、あれを使えば、このような形で書けると思います。(ざっくりなイメージ)ひとつのボタンに対してひとつのプロシージャ。同じコードを何度も書くというところを気持ち悪く感じてしまいます。そこで、このように書いてみたいと思います。「接続」と「切断」を部品化してしまいます。変数宣言をDimではなくPrivateで行うことで、1回の宣言でどのプロシージャでも使えるようにしておきます。使うのはDimですが、ほかにも宣言の仕方があるんですよー。SubVisualBasicEditorの、先ほどつくったまっさらなModule1にこいつを貼り付けてください。貼り付けてみると区切り線が出るのでもっとわかりやすいと思います。このコードは、先程のイメージだとこの部分にあたります。処理コードさっき書いたコードの下に、各ボタンから起動するコードを書きます。Subイメージだとこの部分。これをこちらを参考に各ボタンから起動できるようにしておきます。今まで長々と書いてきたのは所詮下準備。この3つのプロシージャの中に書くものこそが核心です。次回より、ようやく実際にデータベースを操作するSQLの説明に入っていきます。長くてすみません...。公開日:2013/03/08更新日:2015/11/16ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。私がExcelVBAでよく使う便利なコード・スニペットまとめプログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいことExcelVBAのクラスモジュールって何?という人向けの使い方まとめ書籍を執筆しています。OfficeExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。週間人気記事ExcelVBAでカレンダーコントロールを自作するExcelで1行・1列おきの合計を求めるSUM関数の書き方これからExcelのマクロを勉強したいという方に!簡単な練習問題作りました。-2019/09/27運営者*you非IT系の会社で社内業務アプリ開発したりWeb担してたり。ExcelとかAccessの本を書いてます。