エクセルの機能とマクロの科目でです。
仕事では データの抽出の類なります。

今回は、かなり長くなります。
「年と月で指定した範囲のデータの抽出」...
仕事の データの抽出 になります。
機能でフィルターオプションの機能を使います。

今回もはOneDriveのフォルダにあるのフォルダーから 

郵便物 のファイルを右クリック
ダウンロード ファイルを開くで確認してみてください。
このファイルにはマクロが組み込まれているのマクロを有効に
して開いてください(ウィルスありまでんので大丈夫です)
今回は、月次集計と利用データのシートに注目してください。

 

1、利用データのシートには各社の日々データが入力されていくものとします。
2、月次集計のシートに 部署コードと日付の年と月を指定して
  条件にあったデータを抽出します。
準備事項 シート 月次集計
1、5行目に抽出後表示させる項目の一覧を利用データの1行目から
  コピーして配置
2、C1セルから右へ 抽出する条件を入れる項目
  部署コード  日付 日付 と準備
3、抽出する月入れる為のセル(H2、I2)を準備
  H2セルには 抽出したい年の2015
   I2セルには 抽出したい月の11 と入れます
4、Date関数を入れます組み合わせで
  D2セルは =">="&DATE(H2,I2,1)
  E2セルは ="<"&DATE(H2,I2+1,1)
  DATE(H2,I2,1) は指定した年月の初日(1日)です。
  DATE(H2,I2+1,1) DATE(H2,I2+1,1)は翌月の初日
  >= と < で指定した範囲を指定できます。
5、ここまで理解出来たら
  部署コード、年や月の部分を変更してみてください。
  6行目以下に、利用データから条件にあった部分だけが抽出
  されます。
  既に、そのマクロが組み込まれています。
あらまあ、不思議思われるおもいますので、エクセルの3つの機能を順次ご説明します。

1、フィルターオプション(オートフィルターではありません)
  手動の方法が以下に、手順に従って操作してみましょう。

フィルタオプションの設定(データ抽出)


  リボン データ 中央にある 詳細設定 をクリック
  フィルターオプションの設定 ウィザードが起動します
  選択した範囲に チェック
  リスト範囲 利用データの A~M列
  検索条件範囲 C2からE2
  抽出範囲   5行目のA~J
  入力したらOKボタン
  希望した条件のデータが抽出されます。

 

2、マクロの記録
  機能は理解できても、この操作を毎回操作するのは大変
  そこで、一連の操作をパソコンに記憶させます。
  以下の操作を行ってください。
  リボン 開発 左側にある マクロの記録 をクリック
  (開発のリボンが エクセルのオプションから設定してください)
  エクセルのバージョンにより違いがあるので

  エクセル(Excel)のリボンに「開発」タブを追加表示を参考に下さい。

 

  マクロの記録をクリック後、マクロの名前が表示されるので
  覚えておきます。
  先に試したフィルターオプションの操作を行います。
  データが抽出されたら、廃初の開発のリボンから
  記録の終了
  これで一連の操作がきろくされました。
  記録されたマクロを実行するには
  リボン 開発 の左側に マクロをクリック
  先ほどの名前を見つけてクリックすれば、一連の操作が実行されます。
  記録された内容を確認するには、左端のVisual Basic を
  クリックすると、VBエディターが起動します。
  VBエディターは、マクロ専用の編集ワープロとでも覚えておいてください。
Sheets("利用データ").Columns("A:K").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("C1:E2"), CopyToRange:=Range
と云う見て取れると思います。
もし見つからければ、左側のプロジェクト標準モジュール
Module1から順に開いてみてください。多分に
Module3にあると思います。このコードの内容、編集は後ほどです。

3、VBエディターで自動化
  それでも、毎回、マクロを実行する操作が面倒
  なので、シート上で、C2、H2、I2に変更が先ほどのマクロが
  実行されるようにします。
  郵便物管理ファイルの月次集計のシート名タブを右クリック
  コードの表示をクリックすると、種明かしが見れます。
VBエディターと呼ばれるVBA(マクロ)の編集専用のワープロが
起動します。中身は
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$2" Or Target.Address = "$H$2" Or Target.Address = "$I$2" Then
Sheets("利用データ").Columns("A:K").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("C1:E2"), CopyToRange:=Range("A5:J5"), Unique:=False
End If
End Sub
  意味不明ですが、
Worksheet_Change(ByVal Target As Range) は
このシート上で変更が発生したら
その変更が発生したセルを Traget と呼ぼう とします。
If Target.Address = "$C$2"
そのセル(Target)のアドレス C2、H2、I2 だったら
先に実行して記録したマクロと同じ内容を
Sheets("利用データ").Columns("A:K").AdvancedFilter ・・
を実行しよう。
と云う流れです。上下に IFコマンド End IFを記述して
フィルターオプションの部分は、先に記録した部分を貼付ければ
完成です
フィルター、マクロの記録、VBエディターを機能をたくさん設召しました。紹介したサイトを使って自分のものにしておいてください。

I3セルに、SUM関数で合計を表示させれば、請求書の完成ですね。
いよいよ次は、最終話に最終話になります。