納品書データをデータベース化(1)最終更新日:2014-11-11第28回.納品書データをデータベース化(1)エクセルで顧客管理を作ろう、さーて、プログラム作成を進めます、シート「納品書」で入力した内容を、データベース化します。今回は、その前段作業を行います。シート「納品書」に名前定義を追加します。多くの名前定義をしましたので、何が何やらわからなくなってしまっています。名前定義の画面(Ctrl+F3)で、1つづつ確認していたのでは、日が暮れる、いや夜が明ける。そこで、名前定義の一覧をマクロで取得してみます。どこの標準モジュールでも良いのですが、新規に「Modツール」を作成しました。Subこのマクロを実行すると、新規シートが作られ、A列に名前定義の名前、B列に参照範囲が出力されます。Worksheets.Addは、シートを新規に追加します、場所はどこでもよいので省略しています。追加場所を指定する場合は、Before:=やAfter:=に続けて、シートを指定します。ActiveWorkbook.Namesは、ブックに定義されている、名前定義を1つづつ取り出します。nm.Indexは、定義のインデックスです、まあ、順番です。nm.Nameは、名前です。nm.Valueは、参照範囲です。Mid(nm.Valueは、参照範囲の先頭の「=」を取り除いています。このように、Midは、第3引数を省略すると、最後までになります。このマクロ、何回も実行すると、シートが次々にできてしまいますので、念の為!作成された一覧より、「納品書」の部分だけを抽出したものが、下の表です。納品書!$B$4太字が今回追加した名前定義です。前回までに、名前定義していなかった項目を追加しました。これで、「納品書」の入力項目全てが名前定義されました。続いて、シート「売上明細」を作成します。納品書なので、納品書明細かもしれませんが・・・この方が呼びやすいので。(笑)まあ、名前は何でも、普段使っている名前で良いでしょう。B2には、それぞれ該当する、「納品書」の名前定義を入れます。手入力では大変なので、マクロで入れます。新規に作成した、「Modツール」に以下を追加し、実行します。Sub2行目に、該当する名前定義が入力されます。内容は、先のモジュールとほぼ同様です。○△□を取り出し、3行目に入力した項目と一致する列に、名前定義を入れています。項目名を便りに、データを作成したのでは、ちょっと危険な気がします。列の入替・追加・削除に対応する為、名前定義を指定するようにしました。方法はいろいろありますが、今回のソフトでは、名前定義をキーとして処理している部分が多いので、ここでも、名前定義をキーに、データ保存列を決定するようにしてみました。プログラムが複雑にならず、しかし、融通が利く事を考えた、妥協の産物です。(笑)ソフト作成では、ほんのちょっとした仕様の違いで、プログラムの難易度が格段に違ってくるものです。譲れない仕様もあるでしょうが、ちょっと柔軟に考えただけで、開発工数を半減できます。頑なに当初の仕様にこだわるのは、TCOの増大を招きます。なんか、もっともらしい事を書きましたが、これなら、プログラムが書きやすそうだったので今まで付けた名前定義も、命名方法がバラバラなので、この際統一します。命名規則としては、先頭に、「シート名_」を付けるようにします。新規に名前定義をするようにします。修正すると、元の名前定義が残ってしまいます。マクロで行って下さい。Sub上は、サンプルです。変更前、変更後に、正しい名前を指定して下さい。作成途中でも、このような変更は重要です。今後の開発をスムーズに進める為には、改められる事は、積極的に改めて行きます。名前定義の変更に伴い、VBA中のリテラル("名前定義")の名前定義は、全て修正します。これで準備は整いました。シート「納品書」の入力データを、シート「売上明細」へ入れ、データベース化します。この記事を書いている時点では、まだ、先のプログラムは出来ていません。無事にプログラミングできるのでしょうか。この「売上明細」の作成、そして、これを集計するあたりが、このソフトの最大の山場になります。私の腕の見せ所・・・大丈夫でしょうかまあ、大丈夫です、この程度なら、かわいいもんです。ブログで紹介するので、あまりにの力技では、説明が困難になります。ここが最大の問題です。スマートで可読性の良いプログラムにするか・・・ここが最大の課題です。