解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

Excel VBA で同じ項目の行を揃える



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。


この記事の目次



背景・目的


いきなりですが、データ活用は重要です。

作業にかけた工数の集計、可視化や売上の集計可視化が即座にできるようなレイアウトでまとめる必要があります。

そこで、同じ項目について行の位置を揃えて、データの差異や特徴を捉えやすくする VBA をまとめます。



動作環境


Windows 7
Excel 2007



プログラム

ソースコード


Sub 行揃え()

   ' 値を調べるセルの設定
   r = 4 ' 行
   c = 4 ' 列

   With ThisWorkbook.ActiveSheet

       ' 左の値と右の値の取得
       左 = .Cells(r, c - 2).Value
       右 = .Cells(r, c).Value

       ' ループ
       Do While 左 <> "" And 右 <> ""

           ' 文字列の比較
           比較 = StrComp(左, 右)

           ' 比較結果によって行を上下させる
           Select Case 比較

               Case -1
                   ' 左が上
                   .Range(.Cells(r, c), .Cells(r, c + 1)).Insert Shift:=xlShiftDown

               Case 0
                   ' イコール(何もしない)

               Case 1
                   ' 右が上
                   .Range(.Cells(r, c - 2), .Cells(r, c - 1)).Insert Shift:=xlShiftDown

               Case Null
                   ' 引数が Null だから何もできない

           End Select

           ' 左の値と右の値の更新
           r = r + 1
           左 = .Cells(r, c - 2).Value
           右 = .Cells(r, c).Value

       Loop

   End With

End Sub



結果

図1 の表は品名をキーにして昇順に並んでいます。

昇順のソートはリンクの記事でまとめています。
Excel VBA で昇順に並べ替える - 解析エンジニアの自動化 blog

図1 項目の行を揃える前


図2 項目の行を揃えた後



コメント

図2 の様にまとめる事で、顧客 A と顧客 B の差異がはっきりしました。

顧客 A によく売れるもの、顧客 B によく売れるものの傾向が分かります。

その傾向から顧客に買ってもらえそうなものを顧客単位で分析する事も出来そうですね。



以上