こんにちは!かいけつマクロです。
前回第14講までで、売上げ情報の取込みは完了しました。
今回は、準備段階としては、いよいよ最後となる、データのソートを行っていきます。
①ファイル一覧を作成する …済(第12講)
②ファイル一覧を利用して、データを取込む …済(第13講、第14講)
③集計しやすいように、「商品>年月」の順に、データをソートする …今回(第15講)
④ソートされたデータを用いて、データを集計する …第16講
それでは今回も、張り切っていきましょう!
ソートをする目的
ここまでよく勉強されている方だと、
「wk_売上げ情報一覧」シートから、直接、集計すればよいのでは?
と思われる方もいらっしゃると思います。
なので、まずは、そもそも、何のために明細のソートを行うのか、ということを確認しておきます。
ポイントは、「集計しやすいように」ということです。
少し前のブログになりますが、
「ラーメン屋さんの売上げを集計しよう!」シリーズの始まった第9講で、
本シリーズの最終目標を、このように書いていました。
最終的には、「集計結果」シートに、商品・年月ごとに、売上げ情報をまとめていきます。
商品・年月ごとに売上げ情報を集計する場合、どのような方法があるでしょうか。
ぜひ、みなさん自身で、
こんな風にすればできるかも!
という案を検討してみてください。
・・・さて、どのような案が思い浮かんだでしょうか。
このようなExcelマクロを用いた集計作業において、最もポピュラーな方法は、
売上げ情報をForループで足し合わせ、
商品、もしくは、年月が変わったところで、
集計結果シートに反映させる
という方法になります。
そのため、今回は、
「商品>日付」の順に並べる=ソートを行う方法
について、学んでいきたいと思います。
なお、この他にも、集計するための方法は、いくつか存在しています。
こんな方法でも行けるんじゃない?
という方法を思いついた方は、このブログのコメントや、TwitterのDMでご連絡いただけると、大変うれしいです!
明細ソートのプロシージャを確認
それでは実際に、明細をソートする方法について、学んでいきましょう。
まずは、いつも通り、コードのご紹介です。
'売上げ情報一覧をソート
Sub sort_sales_info_list()
'「集計結果.xlsm」と、「wk_売上げ情報一覧」「wk_売上げ情報一覧_sorted」シートを定義=============
Dim b集計結果 As Workbook
Dim sWk_売上げ情報一覧 As Worksheet
Dim sWk_売上げ情報一覧_sorted As Worksheet
Set b集計結果 = ThisWorkbook
Set sWk_売上げ情報一覧 = b集計結果.Worksheets("wk_売上げ情報一覧")
Set sWk_売上げ情報一覧_sorted = b集計結果.Worksheets("wk_売上げ情報一覧_sorted")
'wk_売上げ情報一覧_sortedシートにヘッダをつける=============
sWk_売上げ情報一覧_sorted.Cells(1, 1).Value = "日付"
sWk_売上げ情報一覧_sorted.Cells(1, 2).Value = "商品"
sWk_売上げ情報一覧_sorted.Cells(1, 3).Value = "売上数量"
'wk_売上げ情報一覧シートから、wk_売上げ情報一覧_sortedシートに、データをコピー=============
sWk_売上げ情報一覧.Range("A1").CurrentRegion.Copy Destination:=sWk_売上げ情報一覧_sorted.Range("A1")
'商品>年月の順でソート
sWk_売上げ情報一覧_sorted.Range("A1").CurrentRegion.Sort _
key1:=sWk_売上げ情報一覧_sorted.Range("B1"), order1:=xlAscending, _
key2:=sWk_売上げ情報一覧_sorted.Range("A1"), order2:=xlAscending, _
Header:=xlYes
End Sub
どうですか?
上から3つ目のブロック(wk_売上げ情報一覧_sortedシートにヘッダをつける)までは、
今まで学んできた、Excelブック・シートの定義・操作に関する行なので、
ここまでは、何をやってるか理解できるんじゃないでしょうか?
忘れちゃったなー
という方は、こちらのブログを、先に見てみてください(‘ω’)ノ
データをコピーする
それでは、今回初めて出てきた、こちらについて見ていきましょう。
'wk_売上げ情報一覧シートから、wk_売上げ情報一覧_sortedシートに、データをコピー=============
sWk_売上げ情報一覧.Range("A1").CurrentRegion.Copy Destination:=sWk_売上げ情報一覧_sorted.Range("A1")
ちょっとややこしそうに見えますが、初めて見るのは、「CurrentRegion.Copy Destination:=」という部分だけです。
これを、もう少し分解して見ていきます。
sWk_売上げ情報一覧.Range(“A1”).CurrentRegion
まずは、「CurrentRegion」の部分です。
実際には、前の部分と合わせて、
「sWk_売上げ情報一覧.Range(“A1”).CurrentRegion」で、ひとかたまり
と思ってください。
この「CurrentRegion」は、「Ctrl+a」で選択される範囲、という意味になります。
例えば、こちらの図(気温と湿度の例)をご覧下さい。
「Range(“A1”).CurrentRegion」とは、右の図の赤枠で囲った範囲のことを指します。
※「気温と温度の例」で使ったExcelを、以下のダウンロードボタンからダウンロードして、
ぜひ、ご自身でも動きを確かめてみてください。
Copy Destination:=sWk_売上げ情報一覧_sorted.Range(“A1”)
もう一つは、「Copy Destination:=」の部分です。
・・・が、こちらは、よーーーく見れば、なんとなく、意味が見えてきませんか?
「Copy」は、その名の通り、コピーです。
また、コピーしたものを、どこに貼り付けるか、というのが、
「Destination(行き先)」です。
そして、その行き先を「:=」という記号を使って記述します。
つまり、ここまでをまとめると、今回見てきたコマンドは、以下のような意味になります。
※ぜひ、コードと比較しながら、ゆっくり確認してみてください。
「wk_売上げ情報一覧」シートの「A1」セルで、
「Ctrl+a」で選択した範囲をコピーし、
「wk_売上げ情報一覧_sorted」シートの「A1」セルに貼り付ける
'wk_売上げ情報一覧シートから、wk_売上げ情報一覧_sortedシートに、データをコピー=============
sWk_売上げ情報一覧.Range("A1").CurrentRegion.Copy Destination:=sWk_売上げ情報一覧_sorted.Range("A1")
これで、「wk_売上げ情報一覧_sorted」シートにデータをコピーすることができました!
続いては、いよいよ、データのソートについて、見ていきましょう!
データをソートする
'商品>年月の順でソート
sWk_売上げ情報一覧_sorted.Range("A1").CurrentRegion.Sort _
key1:=sWk_売上げ情報一覧_sorted.Range("B1"), order1:=xlAscending, _
key2:=sWk_売上げ情報一覧_sorted.Range("A1"), order2:=xlAscending, _
Header:=xlYes
まず、一番上の行。
「sWk_売上げ情報一覧_sorted.Range(“A1”).CurrentRegion」までは大丈夫ですよね。
前の章でやった「CurrentRegion」が使われていることに注意してください!
そして、「sort」というキーワードが現れました。
この「sort」は、どのように並べ替えるかを、後ろに続けて記述する形で利用します。
これは、Excelマクロではなく、Excelの「並び替え」機能を使ってみたほうがイメージつきやすいと思うので、先ほどの、「気温と湿度」の例を使って、実際に見てみましょう。
Excelの「並び替え」機能を使ってみる
「データ」タブの「並び替え」を選択してみてください。こんなポップアップが表示されましたか?
ここで、実際にデータの並び替えを行います。今回は、こんな感じでソートしてみましょう。
- 最優先されるキー:気温(昇順)
- 次に優先されるキー:湿度(小さい順)
※「レベルの追加」を押せば、複数列にソート条件を指定することも可能です。
・・・すると、どうですか?
こんな感じで、気温>湿度の順に、昇順でデータのソートができましたかね?
これが、Excelの「並び替え」機能です。
VBAの「sort」コマンド
・・・さて、ここで、今回のVBAコードと、先ほど見た「並び替え」のポップアップを見比べてみましょう。
こうやって色付けをすると、なんとなく見えてきませんか??
そうです!
並び替え機能の赤枠・青枠で囲ったところが、
それぞれ、VBAコードの赤枠・青枠に対応しています。
・・・なので、
VBAでソートを行いたいときは、必ず、
Excelの並べ替え機能をイメージする
ということだけ、まずは覚えておきましょう。
長くなったので、各キーワードの細かい意味は割愛してしまいました( ;∀;)
ご要望があれば、追加でブログ記事にするので、ぜひTwitterのDMやコメント等でご連絡いただけますと幸いです!
本日のまとめ
今回は、「データのソート」について学びました。
Excelの「並び替え」機能を使えば、結構簡単にデータのソートができるということを確認できたと思います。
次回はいよいよ、最終的な集計作業に取り掛かります。
「Excelマクロ(初心者向け)」の集大成になるので、ぜひ、気を引き締めて、もうひと頑張りしていきましょう!
それでは次回もお楽しみにして下さい!
コメント