'【VBA】【請求書自動印刷システム】(3日目(最終日) 完成ソース)

'グローバル変数宣言
Dim data_gyou_count As Integer
Dim data_retu_count As Integer
Dim tanka As Integer

Sub my_print_seikyusyo()
    '変数宣言
    Dim hinmoku_gyou_count As Integer
    
    '変数初期化
    data_gyou_count = 2
    data_retu_count = 5
    hinmoku_gyou_count = 19
    
    'シート「請求先データ」の「会社名」が途切れるまでデータを移し替え
    Do While Worksheets("請求先データ").Cells(data_gyou_count, 1).Value <> ""
    
        '会社名
        Worksheets("請求書").Range("A5").Value = Worksheets("請求先データ").Cells(data_gyou_count, 1).Value
        '郵便番号
        Worksheets("請求書").Range("A8").Value = "〒" & Worksheets("請求先データ").Cells(data_gyou_count, 2).Value
        '住所1
        Worksheets("請求書").Range("A9").Value = Worksheets("請求先データ").Cells(data_gyou_count, 3).Value
        '住所2
        Worksheets("請求書").Range("A10").Value = Worksheets("請求先データ").Cells(data_gyou_count, 4).Value
        
        '「請求額」項目になるまで品目データを移し替え(品目の増加・減少に備えて)
        Do While Worksheets("請求先データ").Cells(1, data_retu_count).Value <> "請求額"
            
            '品目ごとの単価を選び出す
            Call my_choose_tanka
            
            '各品目、数量が「1」以上の時だけデータを書き出す
            If Worksheets("請求先データ").Cells(data_gyou_count, data_retu_count).Value > 0 Then
                
                '品目名
                Worksheets("請求書").Cells(hinmoku_gyou_count, 1).Value = _
                    Worksheets("請求先データ").Cells(1, data_retu_count).Value
                '品目ごとの単価
                Worksheets("請求書").Cells(hinmoku_gyou_count, 4).Value = tanka
                '数量
                Worksheets("請求書").Cells(hinmoku_gyou_count, 6).Value = _
                    Worksheets("請求先データ").Cells(data_gyou_count, data_retu_count).Value
                '価格
                Worksheets("請求書").Cells(hinmoku_gyou_count, 7).Value = _
                    tanka * Worksheets("請求先データ").Cells(data_gyou_count, data_retu_count).Value
                
                hinmoku_gyou_count = hinmoku_gyou_count + 1
            End If
            
            data_retu_count = data_retu_count + 1
        Loop

		'印刷
		Worksheets("請求書").PrintOut
        
		'書き込んだデータを消去
		Worksheets("請求書").Range("A5").Value = ""
		Worksheets("請求書").Range("A8").Value = ""
		Worksheets("請求書").Range("A9").Value = ""
		Worksheets("請求書").Range("A10").Value = ""
		Worksheets("請求書").Range("A19:G21").Value = ""
        
        '行を一つ進める・変数再初期化
        data_retu_count = 5
        data_gyou_count = data_gyou_count + 1
        hinmoku_gyou_count = 19
        
        '「会社名」が「計」まで行ったらループを抜ける
        If Worksheets("請求先データ").Cells(data_gyou_count, 1).Value = "計" Then
            Exit Do
        End If
    Loop
    
    MsgBox "完了"

End Sub

'シート「単価一覧」から品目ごとの単価を選び出す
Sub my_choose_tanka()
    Dim i As Integer
    
    i = 2
    
    Do While Worksheets("単価一覧").Cells(i, 1).Value <> ""
        If Worksheets("単価一覧").Cells(i, 1).Value = Worksheets("請求先データ").Cells(1, data_retu_count).Value Then
            tanka = Worksheets("単価一覧").Cells(i, 2).Value
            Exit Do
        Else
            tanka = 0
        End If
        
        i = i + 1
    Loop
End Sub