Excel VBA | VBAで改行する方法

Excel VBA VBA
スポンサーリンク

発展練習問題

ここからは「月ごとの売上をまとめる」「部署ごとに集計する」という、実務でよくある集計課題に発展させてみましょう。

問題1:月ごとの売上をまとめる

データ例

  • A列:日付(例:2025/01/05, 2025/01/20, 2025/02/10 …)
  • B列:売上金額

課題

  • 月ごとに売上を合計し、セル D2 以降に次のように表示してください。
2025/01: 300000円
2025/02: 250000円
2025/03: 400000円

回答例

Sub MonthlySalesReport()
    Dim lastRow As Long, i As Long
    Dim salesDate As Date, monthKey As String
    Dim sales As Double
    Dim dict As Object
    Dim report As String
    
    Set dict = CreateObject("Scripting.Dictionary")
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastRow
        salesDate = Range("A" & i).Value
        sales = Range("B" & i).Value
        monthKey = Format(salesDate, "yyyy/mm")
        
        If dict.Exists(monthKey) Then
            dict(monthKey) = dict(monthKey) + sales
        Else
            dict.Add monthKey, sales
        End If
    Next i
    
    For Each monthKey In dict.Keys
        report = report & monthKey & ": " & dict(monthKey) & "円" & vbLf
    Next monthKey
    
    Range("D2").Value = report
End Sub
VB

解説

  • Format(日付, "yyyy/mm") で「年月」単位にまとめる。
  • Dictionaryを使って月ごとに売上を合計。
  • 出力はセルに改行付きでまとめる。

問題2:部署ごとに売上を集計する

データ例

  • A列:部署名(営業、開発、総務など)
  • B列:売上金額

課題

  • 部署ごとに売上を合計し、セル E2 に次のように表示してください。
営業: 300000円
開発: 250000円
総務: 120000円

回答例

Sub DeptSalesReport()
    Dim lastRow As Long, i As Long
    Dim dept As String, sales As Double
    Dim dict As Object
    Dim report As String
    
    Set dict = CreateObject("Scripting.Dictionary")
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    For i = 2 To lastRow
        dept = Range("A" & i).Value
        sales = Range("B" & i).Value
        
        If dict.Exists(dept) Then
            dict(dept) = dict(dept) + sales
        Else
            dict.Add dept, sales
        End If
    Next i
    
    For Each dept In dict.Keys
        report = report & dept & ": " & dict(dept) & "円" & vbLf
    Next dept
    
    Range("E2").Value = report
End Sub
VB

解説

  • 部署名をキーにして売上を合計。
  • Dictionaryを使うと「同じ部署が複数行に出てきても合計できる」。

発展アイデア

  • 月 × 部署 のクロス集計(ピボットテーブル的な処理)
  • 合計・平均・最大・最小 を部署ごとに出す
  • グラフ化して視覚的に確認
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました