普段からExcelを酷使している会社ならみんなやってるはず
Excelのみで差し込み印刷 はがき用
投稿マラソンの最後にふさわしく、神ってるExcelをさらに(?)便利にするためのコードを書きました。
WordでExcelのデータを引用して差し込み印刷する方法もありますが、頻繁に印刷する必要がある場合はそれも割と手間がかかります。Excelだけで完結出来たら便利ですね。
真の神Excelを名乗るなら、高度なセル結合とExcel方眼紙のテクニックを駆使して、差し込む文字列(宛名の住所、名前等)が入る欄をセルにするべきですが、めんどくさいのでテキストボックス(ユーザーフォームではない方)にしました。
テキストボックスなら、大きさを必要に応じて簡単に調整できるので、怠惰のレベルを上げたい方向きです。
一応、はがき用としていますが、テキストボックスの位置や大きさを調整すれば、封筒にも対応できます。
雑にA1セルのみでやっています。セルの大きさは適宜調整する必要があります。
印刷範囲をA1セルのみに指定して、用紙をはがきサイズで指定すれば、きれいにはまると思います。
「郵便番号」「住所」「名前」「敬称」は、すべて挿入タブからシートに入れたテキストボックスです。ここで入っている文字列がそのままテキストボックス名になっています。
コード
Sub InsertAddress()
Dim i As Long
Dim LastRow As Long
LastRow = Sheets("リスト").Cells(Rows.Count, 1).End(xlUp).Row
Dim ws As Worksheet
Set ws = Sheets("はがき")
Dim wsList As Worksheet
Set wsList = Sheets("リスト")
'リストからテキストボックスへ転記
With ws.Shapes
For i = 2 To LastRow
.Range(Array("郵便番号")).TextFrame2.TextRange.Text = wsList.Cells(i, 2)
.Range(Array("住所")).TextFrame2.TextRange.Text = wsList.Cells(i, 3)
.Range(Array("名前")).TextFrame2.TextRange.Text = wsList.Cells(i, 4)
.Range(Array("敬称")).TextFrame2.TextRange.Text = wsList.Cells(i, 5)
'ws.PrintOut プリンターがある環境ではこの行をコメント解除
'動作テスト
Debug.Print ws.Shapes.Range(Array("名前")).TextFrame2.TextRange.Text
Next i
End With
'初期化
With ws.Shapes
.Range(Array("郵便番号")).TextFrame2.TextRange.Text = "郵便番号"
.Range(Array("住所")).TextFrame2.TextRange.Text = "住所"
.Range(Array("名前")).TextFrame2.TextRange.Text = "名前"
.Range(Array("敬称")).TextFrame2.TextRange.Text = "敬称"
End With
End Sub
なぜか動かなかった書き方
ws.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Text でテキストボックスを指定していますが、ググったら違う書き方もでできました。
最初はこれを読んで、
シート名.Shapes("テキストボックス名").TextFrame.Characters.Text = "文字列"
でテキストボックスに文字列が入ると思いましたが、プロシージャが全く動きませんでした。しかもステップインしようとしても動きませんでした。
Excelのバージョンは2021です。
↓動いた方の書き方
シート名.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Text = "文字列"
ところで、TextFrame2 の「2」ってなんだろう
知っている人がいたら教えてください。
参考URL コードの書き方についてはこちら
参考URL 神Excelについて