テクニック集第7回、メニュー情報から業者別食材発注書を印刷。エクセルVBAで献立自動化、栄養士さんお助けツール

Excel VBA

前回までのレビュー

前回までは、週間献立表にレシピシステムで作成したレシピのメニュー名を食事カテゴリーごとに設定し、そのメニュー情報の詳細を献立作業指示書として展開して印刷するまでの処理を考えてきました。

メニューを設定するうえで、レシピシステムの機能不足やバグに見舞われ、少し時間を取られましたがなんとかここまでたどり着きました。

業者別食材発注書を作成する

今回からは、第7回目としてこれまでの献立情報から業者別の食材発注書の作成処理を考えてみます。

レシピに設定した食材にはその食材の仕入れ先業者名が設定されています。食材名、使用量も合わせて設定されているので、それら利用して並べ替えや集計を組み合わせると何とかなりそうです。

献立作業指示書のデータを活用

■週間献立表システムで献立作業指示書データを作成するとき、同時にそのデータをCSVデータとして所定のフォルダーに保存しておく処理を追加しました。内容は以下の図で説明します。

上図は、CSVファイルを作成するときに必要になる配列データとファイル名を作成して

最終行の Call hattyukakidasi(fileName, workData)でCSVデータで書き出すメソッドを呼び出しています。

下図はhattyukakidasiのCSVファイルの作成メソッドです。

Sub hattyukakidasi(fileName As String, data As Variant)
'対象範囲の値を配列に格納
'保存ファイル名を定義
Dim outputFile As String
outputFile = ActiveWorkbook.Path & "\recipedata\hattyuu\" & fileName & ".csv"

'空番号を取得
Dim csvNum As Long
csvNum = FreeFile

'書き込みのためにファイルを開く(ファイルがなければ作成される)
Open outputFile For Output As #csvNum

    Dim i As Long
    Dim j As Long
    Dim csvVal  As String
    
    csvVal = ""

    '行方向の要素数分ループ
    For i = LBound(data, 1) To UBound(data, 1)
        '列方向の要素数分ループ
        For j = LBound(data, 2) To UBound(data, 2)
            'シートの値を配列から定義
            csvVal = """" & data(i, j) & """"

            '値をファイルに書き込み
            If j = UBound(data, 2) Then
                '最終列なら、「;」をつけない(デフォルトで改行コードが付与される)
                Print #csvNum, csvVal
            Else
                '最終列でなければ、値の後に「","」をつける必要がある。そして末尾に「";"」を付与し改行なしで書き込む
                Print #csvNum, csvVal & ",";

            End If
        Next
    Next

Close #csvNum

'MsgBox ("CSVが出力されました。")


End Sub

下図は実際に書き出された一週間分のCSVファイルです。

■ こんな感じでこのCSVファイルの作成ができました。このCSVファイルを発注データとして活用しようと思います。

下図は新しく作成したエクセルファイル「業者別発注」で上記で作成したCSVファイルを二次元配列に取り出しておく前段階でファイル選択ダイアログを通じてファイル名を取得するコードです。

 

■これでとりあえず、CSVデータを配列に取り出すことができたので、次回からは具体的なその活用方法を考えていきます。

ダウンロード

ここまでのファイルを下のカードからダウンロードしてください。

コメント

タイトルとURLをコピーしました