【第15講】データのコピー・ソート(ラーメン屋さんの売上げを集計しよう!⑦)

スポンサーリンク

こんにちは!かいけつマクロです。

前回第14講までで、売上げ情報の取込みは完了しました。

今回は、準備段階としては、いよいよ最後となる、データのソートを行っていきます。

①ファイル一覧を作成する …済(第12講
②ファイル一覧を利用して、データを取込む …済(第13講第14講
③集計しやすいように、「商品>年月」の順に、データをソートする …今回(第15講)
④ソートされたデータを用いて、データを集計する …第16講

それでは今回も、張り切っていきましょう!

スポンサーリンク

ソートをする目的

ここまでよく勉強されている方だと、

「wk_売上げ情報一覧」シートから、直接、集計すればよいのでは?

と思われる方もいらっしゃると思います。

なので、まずは、そもそも、何のために明細のソートを行うのか、ということを確認しておきます。

ポイントは、「集計しやすいように」ということです。

少し前のブログになりますが、
「ラーメン屋さんの売上げを集計しよう!」シリーズの始まった第9講で、
本シリーズの最終目標を、このように書いていました。

最終的には、「集計結果」シートに、商品・年月ごとに、売上げ情報をまとめていきます。

商品・年月ごとに売上げ情報を集計する場合、どのような方法があるでしょうか。

ぜひ、みなさん自身で、

こんな風にすればできるかも!

という案を検討してみてください。

・・・さて、どのような案が思い浮かんだでしょうか。

このようなExcelマクロを用いた集計作業において、最もポピュラーな方法は、

売上げ情報をForループで足し合わせ、

商品、もしくは、年月が変わったところで、

集計結果シートに反映させる

という方法になります。

「商品>日付」の順に並べておき、売上げ数量」を、上から1明細ずつ足し合わせる。
「商品」または「年月」が変わったタイミングで、そこまでの足し合わせた結果を、集計結果シートに反映する。

そのため、今回は、

「商品>日付」の順に並べる=ソートを行う方法

について、学んでいきたいと思います。

なお、この他にも、集計するための方法は、いくつか存在しています。

こんな方法でも行けるんじゃない?

という方法を思いついた方は、このブログのコメントや、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
「sort_sales_info_list()」プロシージャを追加する

どうですか?

上から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」で選択される範囲、という意味になります。

例えば、こちらの図(気温と湿度の例)をご覧下さい。

「Ctrl+a」で、そのセルを含む、データが入力された範囲(=CurrentRegion)を選択できる

「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コードの赤枠青枠に対応しています。

・・・なので、

VBAでソートを行いたいときは、必ず、
Excelの並べ替え機能をイメージする

ということだけ、まずは覚えておきましょう。

長くなったので、各キーワードの細かい意味は割愛してしまいました( ;∀;)

ご要望があれば、追加でブログ記事にするので、ぜひTwitterのDMやコメント等でご連絡いただけますと幸いです!

本日のまとめ

今回は、「データのソート」について学びました。

Excelの「並び替え」機能を使えば、結構簡単にデータのソートができるということを確認できたと思います。

次回はいよいよ、最終的な集計作業に取り掛かります。

「Excelマクロ(初心者向け)」の集大成になるので、ぜひ、気を引き締めて、もうひと頑張りしていきましょう!

それでは次回もお楽しみにして下さい!

本日の学びポイント
  • ソートをする目的は、「データの集計をしやすくする」ということ
  • 「CurrentRegion.Copy Destination:=」で、「Ctrl+a」で選択した範囲をコピー・貼り付けできる
  • VBAでソートを行うときは、必ず、Excelの並べ替え機能をイメージする

コメント

タイトルとURLをコピーしました