今回の物語の最初は

おもしろプログラミング教室開催

VBAから始める方は

基本のコマンド Rangeコマンド

からご覧ください。

 

数日後、沖田君から卒業試験の回答が届きます。

沖田君の場合

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取得に分厚い本を片手に数ヵ月も奮闘した方もおられます。

実際に事務処理で活かす部分に絞り込み

エクセルの機能を活かして作成すれば

大変シンプルなコードで済みます。