今回は表にテンプレートを張り付けるレシピを紹介したいと思います。日々の記録をExcelに残す作業がある人も多いと思います。めんどくさい作業を簡単に自動化しちゃいましょう!
やりたいこと
表に自動で文字を入力するマクロを作成したいと思います。署名はセルから取得することで変更しやすいように、日付を今日が自動で入力されるような仕様にしていきます。
今回は実際の表があるブックはマクロが使えないことを想定してマクロ専用の別ブックからマクロを動かしていきます。
テンプレートブックの作成
まず、表とは別のブックを用意します。そこに署名欄と入力したい要素を作ります。今回は署名と書かれているの右隣りのセルに署名欄に入力したい名前を書き、C5からG5のセルを入力したい要素とします。
VBAプログラムの作成
VBAプログラムを作成していきます。セルのアドレス等は環境に合わせて変更してください。
Sub 自動入力()
' 署名
Dim name As String
' 表があるワークシート
Dim ws As Worksheet
Set ws = ActiveSheet
' 署名の名前を取得
name = ThisWorkbook.Worksheets(1).Range("D3").Value
' 入力する要素をコピー
ThisWorkbook.Worksheets(1).Range("C5:G5").Copy
' 最終行を取得して貼り付け
If ws.Range("B4").Value = "" Then
ws.Range("B4").Select
Else
ws.Range("B3").End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' 署名と日付を入力
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = name
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Date
End Sub
プログラムの説明
今回は入力したい表があるブックで実行することを想定しているので開いているブックを取得します。
' 表があるワークシート
Dim ws As Worksheet
Set ws = ActiveSheet
別ブックの署名を取得して要素をコピーします。ブックの状態に合わせてセルの範囲を変更してください。
' 署名の名前を取得
name = ThisWorkbook.Worksheets(1).Range("D3").Value
' 入力する要素をコピー
ThisWorkbook.Worksheets(1).Range("C5:G5").Copy
表の最終行を取得して貼り付けています。If文があるのは表に1行も記載がない場合に対応するためです。またペーストは元の書式の影響をうけないように値貼り付けにしています。
' 最終行を取得して貼り付け
If ws.Range("B4").Value = "" Then
ws.Range("B4").Select
Else
ws.Range("B3").End(xlDown).Select
ActiveCell.Offset(1, 0).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
最後にセルを右にずらしながら署名と日付を入力しています。
' 署名と日付を入力
ActiveCell.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = name
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Date
実践
完成したので実際に動かしていきます。入力したい表のあるブックでマクロを実行します。
うまく入力されました。
まとめ
自動でテンプレートを表に入力する方法を紹介しました。応用をすれば複数行の入力やテンプレートの切り替えもできるのでぜひ活用してみてください。
VBAの実践レシピを紹介を紹介しています。ぜひ他のレシピも見て日々の業務を自動化してください。