Excel VBA で同じ項目の行を揃える
こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。
この記事の目次
背景・目的
いきなりですが、データ活用は重要です。
作業にかけた工数の集計、可視化や売上の集計可視化が即座にできるようなレイアウトでまとめる必要があります。
そこで、同じ項目について行の位置を揃えて、データの差異や特徴を捉えやすくする VBA をまとめます。
プログラム
ソースコード
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 』
コメント
図2 の様にまとめる事で、顧客 A と顧客 B の差異がはっきりしました。
顧客 A によく売れるもの、顧客 B によく売れるものの傾向が分かります。
その傾向から顧客に買ってもらえそうなものを顧客単位で分析する事も出来そうですね。
以上