VBAで簡単なマクロを組んでみたので備忘録も兼ねてメモをする。
私が業務上で管理しているエクセルだが、
シート名が数字で、コピーをして+1の値を入れるケースが多い。
請求書、見積書、発注書などなど、殆どがそのような形式になっており、
右クリックでコピーをしてシートを末尾に移動、でシート名+1に変更、
ついでに言うと作成日に今日の日付を入れるという一連の動作であるが、
その一連の動作自体は5秒~10秒ほどで完了はするが、
月初で請求書発行の時期などでは、その動作を百回近く繰り返す事になり
かったるいな~と思ってはおりました。
という訳で、VBAで上記動作をまとめて
ショートカットキーを割り当てる事にしてみた。
(あまり使わない「Ctrl+Q」を割り当てる)
で、ちょっと調べながら下記のようなかたちで記述をした。
Sub CopyWorksheet() Dim UWSheetName As Long '変数「UWSheetName」をLong型で宣言 Dim UWSheetNameNew As Long '変数「UWSheetNameNew」をLong型で宣言 UWSheetName = Worksheets(Worksheets.Count).Name '「UWSheetName」に一番右端のシート名を格納 UWSheetNameNew = UWSheetName + 1 '「UWSheetNameNew」に+1の値を格納 ActiveSheet.Copy After:=Worksheets(Sheets.Count) 'シートを末尾へコピー ActiveSheet.Name = UWSheetNameNew 'シート名を変更 Range("AA5").Activate '作成日のAA5セルを指定 ActiveCell = Date '今日の日付を挿入 End Sub
で実行すると下記のような結果。
残念ながら、変数009+1=010が10と認識されてしまうようで、
010と表示させたいのに10となってしまう。
別に10でも良さそうなものであるが、
これまでずっと3桁で統一をしてきたので何としても修正したい。
で調べたところFormat関数というものがあり、
変数に書式を設定をする事ができた。
また変数の宣言時にLong型にしていたが、String型に変更をする。
VBAの変数のデータ型についてはこちら
で出来上がったコードが下記。
Sub CopyWorksheet() Dim UWSheetName As String '変数「UWSheetName」をString型で宣言 Dim UWSheetNameNew As String '変数「UWSheetNameNew」をString型で宣言 UWSheetName = Worksheets(Worksheets.Count).Name '「UWSheetName」に一番右端のシート名を格納 UWSheetNameNew = Format(UWSheetName + 1, "000") '+1の値を格納、また書式を数字3桁に指定 ActiveSheet.Copy After:=Worksheets(Sheets.Count) 'シートを末尾へコピー ActiveSheet.Name = UWSheetNameNew 'シート名を変更 Range("AA5").Activate '作成日のAA5セルを指定 ActiveCell = Date '今日の日付を挿入 End Sub
で、実行するとうまく000型、3桁で表示ができた。
何とも爽快で、とりあえずCtrl+Q連打しました。
VBAはすぐ結果が返ってくるので楽しいです。