ACCESSで作成した在庫作成リストをEXCELへ出力

前回、ACCESSで出庫リクエストに対して在庫数の不足している品目リストをPDFで出力する様にしました。

各部署へ配布するには都合が良いのですが、それに対する作成状況を把握するのにEXCELへもデータを出力する事にしました。

本日はその機能を実装です。

 

取り合えず、メインの取引先2社分の不足数作成依頼リスト、適正在庫数を確保する為の作成依頼リストの計3つのリストを出力します。

 

不足数作成依頼リストは前回のクエリがあるので簡単簡単 ^_~

クエリからデータを取得するSQLを引数としたFunction Procedureを作成。

後は取得するるリスト毎にSQLを替えるだけ。

このFunction Procedureでデータを2次元配列に格納し戻り値にします。

 

で、今回新たに適正在庫数を保つ為のクエリを1つ作成しました。

在庫数を求めるクエリは元からあるので、マスタテーブルに下限在庫数フィールドを追加し、それと在庫数を参照します。

 

EXCELにシートを3枚追加し、それぞれにデータを書き込めばOK。

 

以下受け取った配列をシートへ書き込むコードです。

 

Sub WriteRequestList(ByVal flg As Integer)
    Dim strSql As String, queryName As String
    Dim dataArray As Variant
    Dim i As Long, j As Long, lastRow As Long
    Dim ws As Worksheet
    
    Select Case flg
        Case 1
            queryName = "q_○○作成依頼"
            Set ws = Worksheets(●●_IRAI)
        Case 2
            queryName = "q_●●●作成依頼"
            Set ws = Worksheets(●●●_IRAI)
        Case 3
            queryName = "q_在庫作成依頼"
            Set ws = Worksheets(ZAIKO_IRAI)
    End Select
    
    strSql = "SELECT * FROM " & queryName
    
    dataArray = ReturnData(strSql)
    
    Application.ScreenUpdating = False
    
    With ws
        If .Range("A1") = "" Then ItemInput2 ws
        
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
        
        For i = 0 To UBound(dataArray)
            For j = 0 To UBound(dataArray, 2)
                .Cells(lastRow, j + 1).Value = dataArray(i, j)
            Next j
            
            lastRow = lastRow + 1
        Next i
        
        .Columns("A:J").AutoFit
    End With
    
    Set ws = Nothing
    
    Application.ScreenUpdating = True
End Sub