PR

売上明細から自動で請求書を作る3 Excel(エクセル)

請求書イメージ エクセルマクロ(VBA)

前回の売上明細から自動で請求書を作る2 Excel(エクセル)から引き続いて、請求書を作成していきます。まだ読んでない方は売上明細から自動で請求書を作る1 Excel(エクセル)も併せてお読みください。

請求書に明細を載せる(マクロを使う)

請求先名のセルに名前を付ける

例のエクセルの場合「B6」セルに請求先名が入力されています。請求先を切り替える場合はこのセルの値を変更していくので、常にこのセルを参照するようにします。

「B6」セルをクリックし、左上のセル番地が表示されている部分を選択し、「請求先」と入力します。

その後「Enter」キーを押して確定させます。これで「B6」セルが「請求先」というセル名に変わりました。

マクロを記載する

Sub 明細反映()
    Dim meisaish As Worksheet: Set meisaish = Sheets("売上明細")
    Dim thissh As Worksheet: Set thissh = Sheets("請求書")
    Dim i1 As Long: i1 = 4 '売上明細シートの行番号
    Dim i2 As Long: i2 = 16 '請求書シートの明細行番号
    Dim n As Long '売上明細シートの列数
    Dim LastRow As Long: LastRow = 40
    Dim seikyusaki As String: seikyusaki = thissh.Range("請求先").Value
    
    thissh.Range(Cells(i2, 2), Cells(LastRow, 5)).ClearContents '入力値をクリアする
    thissh.Range(Cells(i2, 2), Cells(LastRow, 5)).Interior.ColorIndex = 0 '塗りつぶしをクリアする
    
    Do Until meisaish.Cells(i1, 2) = ""
        If meisaish.Cells(i1, 3) = seikyusaki Then
            For n = 4 To 7
                thissh.Cells(i2, n - 2).Value = meisaish.Cells(i1, n).Value
                If i2 Mod 2 = 0 Then 'もし行数が偶数だったら下記を実行
           '行をグレーに塗りつぶす
                    thissh.Cells(i2, n - 2).Interior.Color = RGB(217, 217, 217) 
                End If
            Next
            i2 = i2 + 1
        End If
        i1 = i1 + 1
    Loop

End Sub

これを実行すると

請求先を「BBB」に変更してもう一度実行すると

となります。「売上明細」シートの内容が変わった場合はもう一度実行すれば、最新の状態に置き換えることができます。

空欄の行もすべて縞模様にする

「EndSub」の直前に下記のようにコードを追記する

Sub 明細反映()
    Dim meisaish As Worksheet: Set meisaish = Sheets("売上明細")
    Dim thissh As Worksheet: Set thissh = Sheets("請求書")
    Dim i1 As Long: i1 = 4 '売上明細シートの行番号
    Dim i2 As Long: i2 = 16 '請求書シートの明細行番号
    Dim n As Long '売上明細シートの列数
    Dim LastRow As Long: LastRow = 40
    Dim seikyusaki As String: seikyusaki = thissh.Range("請求先").Value
    
    thissh.Range(Cells(i2, 2), Cells(LastRow, 5)).ClearContents '入力値をクリアする
    thissh.Range(Cells(i2, 2), Cells(LastRow, 5)).Interior.ColorIndex = 0 '塗りつぶしをクリアする
    
    Do Until meisaish.Cells(i1, 2) = ""
        If meisaish.Cells(i1, 3) = seikyusaki Then
            For n = 4 To 7
                thissh.Cells(i2, n - 2).Value = meisaish.Cells(i1, n).Value
                If i2 Mod 2 = 0 Then 'もし行数が偶数だったら下記を実行
                    '行をグレーに塗りつぶす
                    thissh.Cells(i2, n - 2).Interior.Color = RGB(217, 217, 217)
                End If
            Next
            i2 = i2 + 1
        End If
        i1 = i1 + 1
    Loop
    
    Do Until i2 = LastRow + 1
        For n = 4 To 7
            If i2 Mod 2 = 0 Then 'もし行数が偶数だったら下記を実行
                thissh.Cells(i2, n - 2).Interior.Color = RGB(217, 217, 217) '行をグレーに塗りつぶす
            End If
        Next
        i2 = i2 + 1
    Loop
    
End Sub

この状態で実行すると

このようにデータの入っていない行にも縞模様を追加することができました。

マクロを使う場合のメリット

  • どんなケースでも臨機応変に対応できる
  • 売上明細の行追加削除をしても数式が崩れることがなくなる
  • 単純なマクロであればエクセルのバージョンを選ばず対応できる

マクロを使う場合のデメリット

  • マクロ(VBA)の知識が必要
  • 請求書の書式を変更したときにマクロが正しい範囲を選択できなくなる可能性がある
  • メンテナンスの難易度が上がる
  • 使う端末すべてでマクロを有効にする必要がある
  • マクロのエラーが発生すると他の人では直せない可能性が高い

コメント

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