前回の売上明細から自動で請求書を作る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)の知識が必要
- 請求書の書式を変更したときにマクロが正しい範囲を選択できなくなる可能性がある
- メンテナンスの難易度が上がる
- 使う端末すべてでマクロを有効にする必要がある
- マクロのエラーが発生すると他の人では直せない可能性が高い
コメント