今回の物語の最初は
VBAから始める方は
からご覧ください。
数日後、沖田君から卒業試験の回答が届きます。
沖田君の場合
1、請求書のフォーマットのシートを準備
※複数ページを想定して
2、左上(E3セルに 年、G3セルに月)を入力規則で選択させる。
3、10行目~11行目に検索条件の範囲
取引先 出荷日 出荷日
4、請求対象の最初の日(当月月初)は =">="&Date(E3,G3,1)
最終の日(翌月月初)は ="<" & Date(E3,G3+1,1)
5、請求書のシートにボタンを配置
6、作成したコード
Sub 請求書作成()
Dim i As Long
For i = 2 To Sheets("取引先").Rnage("A" & Rows.Count).End(Xlup).Row
Rnage(”C10").Value =Sheets("取引先").Range("A" & i).Value
Sheets("売上データ").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("C10:E11"), CopyToRange:=Range("A12:E12"), Unique:=False
If Rnage(”A13").Value <> "" Then Activesheet.PrintOut
Next
ThisWorkBook.Save
End Sub
※実際に検証していませんので
エラーなどありましたら随時編集してください。
手抜きで申し訳ありません。
と、シートのChangeイベントは使用せずに 7行程のコードでした。
評価のポイント
・目的に合ったシートの準備(印刷用、データ、入力作業など)
※最も重要なポイントです。このシート構成を間違うと
プログラムが複雑になります。
・わかりやすいマクロ名
・インデントを付けてわかりやすく
・関数や印刷の設定も利用している
・For~Next、IF文も使えている
・エクセルの機能(フィルターオプション)を活かす
・複雑なコードは、マクロの記録で自動作成
・プリンターの印刷中に、上書き保存
・シンプルでわかりやすいコードでまとめた
アドバイス
・他の人が見てもわかるように
コメントアウトで補足説明を入れる
最後に、このファイルの説明のシートを追加して保存しておいてください。
※次投稿で紹介します。
VBA取得に分厚い本を片手に数ヵ月も奮闘した方もおられます。
実際に事務処理で活かす部分に絞り込み
エクセルの機能を活かして作成すれば
大変シンプルなコードで済みます。