【事務職が頑張るExcel・VBA】封筒に印刷してみる
郵送物を送る際の封筒に住所や郵便番号などを印刷しようと思った場合いくつか方法があると思います。Wordの差し込みを使ったりExcelでセルの位置を調整したりと人の好みもあると思いますが今回はテキストボックスを使っていきたいと思います。
テキストボックスを使うと、セルを少し動かすと大きく印刷バランスが崩れるExcelのデメリットを多少和らげる気がするので自分はよく使用しています。Wordの差し込みもファイルが二つになるしなんかイヤだ!Σ(゚д゚lll)という方は是非試してみてください。
目標
「入力シート」に必要事項を入力するとその分だけ封筒に印刷してくれる機能だよん♪ セルではなくテキストボックスを使っているため位置調整などは楽ちん。今回は封筒長3という規格で試してみました。複数の宛先に郵送物を送る際は使ってみてくださいな。
印刷用のシートとデータ入力用のシートを準備
データ入力用のシートには取りあえず、6個ぐらいの項目を用意しておく。
・郵便番号 ・住所 ・肩書
・宛名 ・発送元住所 ・発送元の名称
ぐらいあればいいかな。必要に応じて増やしてください。
印刷用のシートは各項目ごとにテキストボックスを作っていきます。
〔挿入 > テキスト > テキストボックス〕
テキストボックスの名称は重複しないようにしっかり設定しておいてください。後にこの名称で値を入れていくことになります。
書式設定でテキストボックスの背景や枠の線などは消しておきます。
文字の大きさや間隔はお使いの封筒によって調整する必要があるため個々で調整しましょう(/・ω・)/
簡単だけどおおまかにできたのはこんな感じ(∩´∀`)∩
ボタンと実行部分をつくる!
印刷ボタンと一応プレビューだけするようのチェックボックスを作って~っと...コードも外枠だけ作るφ(. . )
Option Explicit
'実行ボタンが押されたらスタート
Public Sub main()
'郵便番号調べで記入されてる最終行を取得
Dim max_row As Long: max_row = Sheets("データ入力").Cells(Rows.count, 1).End(xlUp).Row
'印刷対象のデータのスタート位置
Dim rg As Range
Set rg = Sheets("データ入力").Range("A3")
'印刷用のシート名
Dim 印刷シート As Worksheet
Set 印刷シート = Sheets("封筒長3")
'ループ用のカウント
Dim count As Long
'データが一つも入っていなかったら終了
If (max_row <= 2) Then Exit Sub
'印刷用シートに代入する部分
For count = 0 To max_row - rg.Row
'====================================
'====================================
'ここに代入式を書いていくよ(/・ω・)/
'====================================
'====================================
Next count
End Sub
テキストボックスに代入する方法
テキストボックスにどうすれば代入できるかよくわからなかったのでマクロの記録を頼りにいろいろいじくってみた結果、以下のように記述すると値を書き込めることが分かったよ(/・ω・)/
テキストボックスの名称が「郵便番号」のものに「1234567」の値を設定する例だとこうなる...マクロの記録は便利っすな~(n*´ω`*n)
印刷シート.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Characters.Text = "1234567"
各項目も同じように設定できるのでそれぞれ記述していくφ(`д´)
'印刷用シートに代入する部分
For count = 0 To max_row - rg.Row
'ここに代入式を書いていくよ(/・ω・)/
印刷シート.Shapes.Range(Array("郵便番号")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 0)
印刷シート.Shapes.Range(Array("住所")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 1)
印刷シート.Shapes.Range(Array("肩書")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 2)
印刷シート.Shapes.Range(Array("宛名")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 3)
印刷シート.Shapes.Range(Array("発送元")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 4)
印刷シート.Shapes.Range(Array("発送元名称")).TextFrame2.TextRange.Characters.Text = rg.Offset(count, 5)
Next count
プリントアウトさせて完成(/・ω・)/
ActiveXコントロールで作ったチェックボックスを参照してプレビューかプリントアウトかさせる
'プリントアウトかプレビューさせるぜぃ
If プレビューのみ.Value Then
印刷シート.PrintPreview
Else
印刷シート.PrintOut
End If
入力シートに記載した分だけ印刷されたら成功(n*´ω`*n)
あとは使う封筒に対して郵便番号とかの位置を微調整していけば使えるはず
ファイル置き場
無料記事内だけで今回は完結していますが、うまくいかない、ゼロから記述するのメンドーなどの場合は有料部分でダウンロードだけできるようにしておきます。(*´▽`*)追記情報などはないのでファイルデータがいらない場合は購入しないでね♪
ここから先は
¥ 100
この記事が気に入ったらチップで応援してみませんか?