0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

神ExcelのためのVBA はがきの宛名を差し込み印刷

Last updated at Posted at 2024-07-14

普段からExcelを酷使している会社ならみんなやってるはず

Excelのみで差し込み印刷 はがき用

投稿マラソンの最後にふさわしく、神ってるExcelをさらに(?)便利にするためのコードを書きました。

WordでExcelのデータを引用して差し込み印刷する方法もありますが、頻繁に印刷する必要がある場合はそれも割と手間がかかります。Excelだけで完結出来たら便利ですね。

真の神Excelを名乗るなら、高度なセル結合とExcel方眼紙のテクニックを駆使して、差し込む文字列(宛名の住所、名前等)が入る欄をセルにするべきですが、めんどくさいのでテキストボックス(ユーザーフォームではない方)にしました。
テキストボックスなら、大きさを必要に応じて簡単に調整できるので、怠惰のレベルを上げたい方向きです。

一応、はがき用としていますが、テキストボックスの位置や大きさを調整すれば、封筒にも対応できます。

雑にA1セルのみでやっています。セルの大きさは適宜調整する必要があります。
印刷範囲をA1セルのみに指定して、用紙をはがきサイズで指定すれば、きれいにはまると思います。

「郵便番号」「住所」「名前」「敬称」は、すべて挿入タブからシートに入れたテキストボックスです。ここで入っている文字列がそのままテキストボックス名になっています。
はがき実行前.png

宛名リスト
はがきリスト2png.png

コード

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

実行結果
はがき実行結果.png

なぜか動かなかった書き方

ws.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Text でテキストボックスを指定していますが、ググったら違う書き方もでできました。

動かない書き方.png

最初はこれを読んで、
シート名.Shapes("テキストボックス名").TextFrame.Characters.Text = "文字列"
でテキストボックスに文字列が入ると思いましたが、プロシージャが全く動きませんでした。しかもステップインしようとしても動きませんでした。
Excelのバージョンは2021です。

↓動いた方の書き方

シート名.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Text = "文字列"

ところで、TextFrame2 の「2」ってなんだろう
知っている人がいたら教えてください。

参考URL コードの書き方についてはこちら

参考URL 神Excelについて

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?