(license)みなさん、こんにちは!タカハシ(@ntakahashi0505)です。エクセルVBAでクラスを使って請求書マクロを作ろう!ということでシリーズをお送りしています。エクセルVBAでクラスを使った請求書でマクロの日付関連の処理を作るエクセルVBAでクラスを使って請求書マクロを作ろう!のシリーズです。今回は、ユーザーが入力した対象の年月から、月末日と翌月末日を求める処理、対象の年月のデータだけを抽出する判定処理を作っていきます。tonari-it.com2019.02.03クラスを使った請求書マクロの日付関連の処理についてお送りしました。今回は、抽出したデータを請求書シートに転記する処理を作成していきます。いうことで、エクセルVBAでクラスを使った請求書マクロのシートへの転記処理の作り方です。マクロ抽出したデータの転記と請求書作成の流れ抽出したデータを「請求書」シートに転記するデータの集合をシートモジュールに渡す受け取ったコレクションからシートに書き込む抽出したデータの転記の動作確認まとめ連載目次:エクセルVBAでクラスを使って請求書マクロを作る前回のおさらいでは、前回のおさらいからです。「請求データ」シートとその関連処理まず、請求書に記載する元となるデータが、以下の「請求データ」シートに蓄積されています。これらのデータのうち、対象月の分のデータについて、取引先別に取り分けて請求書を作りたいのです。それで、その準備として、「請求データ」の1行分を表すクラスを作成しました。それがこちらのDataクラスです。Subそして、このDataクラスのインスタンスをコレクションとして取り出す処理を、「請求データ」シートのシートモジュールwsDataに書いています。以下が「取引先マスタ」シートです。ここに記載されている取引先の分だけ、毎月請求書を作成します。「取引先マスタ」シートも、DataクラスとwsDataモジュールと同様に、1行分を表すクラスの作成と、それをコレクションとして取り込み処理を作成しました。以下のクラスモジュールClientと、シートモジュールwsClientです。Sub「請求書」シートとその関連処理さらに、以下が請求書のひな形となる「請求書」シートです。このシートのシートモジュールwsTemplateにもコードを記述しております。Propertyこれは前回作成した処理ですね。請求書マクロを動作させたときに、InputBoxメソッドで請求書を作成する対象年月をユーザーに入力してもらうのですが、それを格納するプロパティDayCutoffを定義しています。このプロパティの設定時に、請求書の請求日と支払日も入力しています。請求書作成マクロそして、まだ作成途中ではありますが、メインの請求書作成マクロを記述している標準モジュールがこちらです。Function各取引先ごとに転記するデータを抽出してイミディエイトウィンドウに出力するとこまで作成しました。抽出したデータの転記と請求書作成の流れ目標としては、抽出したデータをイミディエイトウィンドウではなく、「請求書」シートに転記をする必要がありますね。それで、取引先ごとにそれを行って、それぞれ別のエクセルファイルとして保存したいわけです。手順としては以下の手順になります。取引先ごとに繰り返す「請求データ」から対象のデータを抽出する「請求書」シートをクリアする「請求書」シートに抽出したデータを書き込む「請求書」シートを新規ブックにコピーして別名で保存して閉じる前回は1の部分を作りました。今回は3の部分の処理を作っていきますよ。抽出したデータを「請求書」シートに転記するまずは、取引先ごとに抽出したデータを「請求書」シートに転記していきたいと思います。今回はシートモジュールを大活用しているので、そのデータもシートモジュールのプロシージャに渡して処理してあげたいですよね。そのデータをどういう形で渡すのが良いでしょうか。データの集合をシートモジュールに渡す「請求データ」の1行分のデータが、複数ある集合になりますよね...集合なら、配列か、辞書か、コレクション......!ということは、Dataクラスのコレクションで渡せば良さそうですね。targetDataというCollection型のオブジェクト変数を用意して、そこにAddしていって渡すようにしましょう。標準モジュールMainのSubプロシージャNew請求書マクロを以下のように変更しました。SubtargetDataにすべてのDataオブジェクトが追加できたら、wsTemplateのWriteDataというメソッドを呼び出します。あと、ついでにオブジェクト変数c、これは現在対象となっている取引先のデータを表すClientオブジェクトですが、これも渡しておきます。受け取ったコレクションからシートに書き込む一方で、受け取ったコレクションtargetDataとClientオブジェクトを使って、シートに転記するのが、以下のwsTemplateのWriteDataメソッドです。終わったら、Hiddenプロパティを使って、余計な行を隠します。ついでにA3セルからA7セルに取引先情報を書き込みます。このために、Clientオブジェクトを引数で渡していたんですね。これをいったんClientNameプロパティに確保しておきます。抽出したデータの転記の動作確認では、New請求書マクロを実行して動作を確認してみましょう。WriteDataメソッドでStopステートメントを仕込んでいますので、中断の際に確認しましょう。ABC株式会社の請求書...良さそうです。次に、二回目の中断です。株式会社ホゲホゲの請求書...良さそうですが、ちょっと待って下さい。行の非表示を解除してみましょう。ありゃー、ダメですね。21,22行目までは正しく入力されていますが、23行目以降にABCさん向けのデータが消されずに残っちゃっていましたね。この部分は対策する処理を入れないといけませんね。まとめ以上、エクセルVBAでクラスを使った請求書マクロのシートへの転記処理の作り方についてお伝えしました。クラスモジュール、あんまり使っていないように見えますが、オブジェクトとコレクションを作っておくと、モジュール間のやり取りに便利ですよね。次回はいよいよ請求書ファイルを作成して保存する部分を作成して完成まで持っていきましょう。エクセルVBAでクラスを使った請求書マクロでシートのコピー&保存処理を作るエクセルVBAでクラスを使って請求書マクロを作ろう!のシリーズをお送りしております。今回はエクセルVBAでクラスを使った請求書マクロでシートのコピー&保存処理を作成していき、請求書マクロを完成させます。tonari-it.com2019.02.05どうぞお楽しみに!連載目次:エクセルVBAでクラスを使って請求書マクロを作るエクセルVBAの題材として実務でもよく利用される「請求書マクロ」。ある程度スキルを磨いたら「これをクラスを使って実装したら?」という疑問が出てくるもの...このシリーズで実際に作ってみましょう。プランノーツ代表、コミュニティ「ノンプロ研」主宰。ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ★フォロー頂ければ嬉しいです。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。関連記事Excel・VBA活用術ノンプログラマーでも「クラス」を学ぶべき理由ノンプログラマーがVBAやGASを学習していくと、その先に謎の言葉ばかりが登場する恐怖のエリア登場します。今回は、「なぜノンプログラマーがクラスを学ぶべきなのか」について書きたいと思います。【初心者向けエクセルVBA】取引先別に請求書を作成するマクロを作る初心者向けのエクセルVBAのシリーズとして、請求書を作成するマクロの作り方をお伝えしています。これまで紹介してきたテクニックを元に、取引先ごとに別のブックで請求書を作成するマクロを完成させていきます。請求データ一覧から請求書を自動で作成するシリーズのVBA講座です。今回は間違いなくお世話になる条件分岐If~Thenの使い方の超基本をマスターしていき特定のデータのみ転記するように改良していきます。マクロの全体おさらいと総仕上げ脱エクセルVBA初心者向け、請求書を自動で作る際の様々なテクニックについてお伝えしています。過去の記事でお伝えしたテクニックも多く含まれますが、おさらいも含めまして総仕上げの解説をしていきます。今回はエクセルVBAでイミディエイトウィンドウを使う方法の超基本として、初心者のうちからぜひとも知っておいて欲しいDebug.Printの使い方です。一行に複数の出力をする方法も解説していますよ。【エクセルVBAでAccess連携】SQLのSELECT,FROM,WHEREによる様々なデータ抽出方法エクセルVBAでAccessデータベースを操作するシリーズ。今回はAccessデータベースのテーブルから色々なパターンでデータを抽出するSELECT、WHEREの使い方についてお伝えします。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった2020.02.072020.02.08GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法2020.02.052020.02.05Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。