・きっかけ
私が勤務する会社では請求書をエクセルで作成しておりますが、毎月定額で発行している請求書は前月分のシートをコピーして日付や内容を毎回変更して作成しているのでが、毎回シートをコピーし内容を変更しております。そんな毎回決まった面倒な作業を少しでも減らしたくVBAを作成してみました。同じような作業をされている方の参考になれば幸いです。
(この記事は約5分ぐらいで読めます)
・今回のVBAではこんなことができます
・エクセルシート自動でコピーして新しくシートを作成します。
・セルに入力されている文字を自動で書き換えます。
・こんな方におすすめです
・毎回エクセルシートをコピーして新しいシート作成している方
・毎回特定セルの入力文字を修正している方(例:内容が〇月分と月だけ修正している)
・使用するコードの説明
構文①(シートのコピー)
Worksheets(”コピー元シート名”).Copy after:=Worksheets(”コピー元シート名”)
上記の「Worksheets(”コピー元シート名”).Copy」ではコピー元のシートを指定しコピーします。原本のような固定のしたシートではなく、選択中のシート選択したい場合は「ActiveSheet.Name」を入力します。
after:=Worksheets(”コピー元シート名”)ではコピーしたシートをどこに配置するか指定します。
引数「after」を指定すれば”コピー元シート名”の後ろにコピーしたシートが配置されます。「before」を指定すれば”コピー元シート名”の前に配置をします。
※Copyメゾットでシートをコピーすると、コピーして作成されたシート選択中(ActiveSheet)になります
構文②(新しく作成されたシート名の変更)
ActiveSheet.Name = ”新しいシート名”
・請求書シートを用意(使用例用のサンプルシートです)
コピー元の請求書シート(前月分)のエクセルシートを用意します。
・VBA実行後
新しくシートが作成(翌月分)され下記図の赤く囲んだ部分が翌月の日付になり毎回手作業で行っていたものが自動で反映されます。
・VBAの入力例(標準モジュールに入力)
Sub 翌月請求書発行()
'発行日が入力されているか確認
If ActiveSheet.Range("G4").Value = "" Then
MsgBox "セルG4に発行日付が入力されていません。", vbInformation, "確認"
Exit Sub
End If
'発行日が日付であるか確認
If Not IsDate(ActiveSheet.Range("G4").Value) Then
MsgBox "セルG4に日付を入力してください"
Exit Sub
End If
'シートをコピーし当月分として利用するシートを追加
Worksheets(ActiveSheet.Name).Copy after:=Worksheets(ActiveSheet.Name)
'追加したシートの内容を変更
' 日付を加算(コピー元の日付に1ヵ月加算)
ActiveSheet.Range("G4").Value = DateAdd("m", 1, ActiveSheet.Range("G4").Value)
' 日付を変更
ActiveSheet.Range("B15").Value = ActiveSheet.Range("G4").Value
' 品名を変更
ActiveSheet.Range("C15").Value = Month(ActiveSheet.Range("G4").Value) & "月分 利用料"
' 請求月を変更
ActiveSheet.Range("B10").Value = Month(ActiveSheet.Range("G4").Value) & "月分"
'シート名を追加
ActiveSheet.Name = Year(ActiveSheet.Range("G4")) & "年" & Month(ActiveSheet.Range("G4")) & "月分"
End Sub
・実行手順
表示/開発タブからマクロをクリック。マクロ名「翌月請求書発行」を実行ボタンクリックでマクロが実行されます。
・まとめ
今回は請求書のエクセルシートをコピーを行うものでしたが、最初は全部自動で翌月の請求書を予約する仕組みを作ろうとしましたが、私の知識ではここまでが限界でした。将来は翌月に全部自動で請求書も作って、相手先にメールで送る仕組みをエクセルで作れたらなと思っております。
最近は電子帳簿保存法の義務化に伴いクラウド上での請求書管理システムがたくさんあり、どれを使ったらよいか分からなかったり、そもそも流行りのシステムを導入できる余裕がない等の理由でエクセルで請求書を使っている方もいらっしゃると思います。私が勤務する会社は、コスト面、人手不足で流行りのシステムは導入できませんが、どうにかこうにかエクセルを使ってやっております。いまのエクセルだけでは正直、不便を感じることもありますが、不便と思うことはまだまだ改善の余地があるということで、新しいアイディがないか探しております。また、将来このエクセルシートを別の担当者に引き継いだとき管理や修正で逆に不便にならなように、私なりに考えコード数も少なくコードには説明用のコメントを残しており、今後も長く使ってもらえると作ったかいがあります。(自己満足でしたら申し訳ございません。)
この記事は私の実体験をもとに書いております。VBAを使いエクセルの自動化をすることで同じことの繰り返し作業やケアレスミスを減らすことができると思います。また、視点を変えて違うことへの利用を検討したり、この記事を通して新しいアイディアが生まれたり、VBAに興味を持っていただけたら幸いです。
ここまでご覧いただき、誠にありがとうございます。
・ご注意
・掲載されている内容には細心の注意をしてるつもりですが、
間違いやご指摘等がありましたら、「お問い合わせ」からご連絡をいただけますと幸いです。
・掲載されている入力VBAコード等は動作を保証するものではなく、あくまでサンプルとして掲載しております。
・掲載されている入力VBAコード等は自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
・対応バージョン
Excel2021、2019、2016
・サンプルファイル(自己責任でご使用ください)
※サンプルファイルはコードが入力されておりませんので、上記のコードをコピーし貼付して下さい。
コメント