マトリックス図の在庫表から在庫ゼロを抽出して新しいシートに記入

マトリックス図の在庫表は、以下。シート名は、「在庫表」

この表から、在庫ゼロ(黄色セル)を抽出して、以下、シート「発注リスト」を作成する。

以下が、サンプルマクロです。

' マトリックス図の在庫表から在庫ゼロを抽出して新しいシートに記入
Private Sub CreateOrderList()
    Dim ws As Worksheet
    Dim orderWs As Worksheet
    Dim lastRow As Long, lastCol As Long
    Dim orderRow As Long
    Dim i As Long, j As Long
    
    ' 在庫表のシートを指定
    Set ws = ThisWorkbook.Sheets("在庫表")
    
    ' 発注リストの新しいシートを作成
    On Error Resume Next
    Set orderWs = Sheets("発注リスト")
    On Error GoTo 0
    
    If orderWs Is Nothing Then
        Set orderWs = Sheets.Add(After:=Sheets(Sheets.Count))
        orderWs.name = "発注リスト"
    Else
        orderWs.Cells.Clear
    End If
    
    ' 在庫表のデータ範囲を特定
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).column
    
    ' 発注リストのヘッダを設定
    orderWs.Range("A1:F1").Value = Array("商品名", "商品C", "事業所C", "事業所名", "在庫数", "発注数")
    
    ' 発注リストの行を初期化
    orderRow = 2
    
    ' 在庫表をループして発注リストを作成
    For i = 3 To lastRow ' 商品名行から開始
        
        For j = 3 To lastCol ' 事業所列から開始
            If CLng(ws.Cells(i, j).Value) = 0 Then ' 在庫が0の場合
                ' 発注リストにデータを追加
                orderWs.Cells(orderRow, 1).Value = ws.Cells(i, 1).Value
                orderWs.Cells(orderRow, 2).Value = ws.Cells(i, 2).Value
                orderWs.Cells(orderRow, 3).Value = ws.Cells(1, j).Value
                orderWs.Cells(orderRow, 4).Value = ws.Cells(2, j).Value
                orderWs.Cells(orderRow, 5).Value = ws.Cells(i, j).Value ' 在庫数
                orderWs.Cells(orderRow, 6).Value = 1 ' 発注数(規定値1)
                
                orderRow = orderRow + 1
            End If
        Next j
    Next i
End Sub

Follow me!