まりふのひと

往復はがきの宛名書きを頼まれて‥‥

ワードの「はがき宛名印刷ウィザード」で作成した「往復はがき」の文書と、エクセル住所録(320件)を添付したメールに、「宛名書きをヨロシク」とあった。
「予算は?」と問いたいところであるが、メールなので無理かぁ〜
その日はメールを見ただけで早寝。今朝は3時に起きて‥‥10時に完成した。印刷会社に頼んだ方が安いと思うが...(ぼやき)

  • 気になるのが住所録
    • エクセルなので「入力が自由」なのが一番の問題。
    • 「筆ぐるめ」とか「筆まめ」,「はがきスタジオ」等の宛名印刷ソフトがあるが、入力の文字数に制限があるはず‥‥

案の定、メールに添付されている住所録,住所は「住所」と「住所2」があるが、入力ルールなどなし! 宛名は最高16文字もある。寿限無さんも顔負け‥‥
こんな感じなので、ワードの「はがき宛名印刷ウィザード」での宛名書きは無理。市販のソフトでも無理なはずだ。
そこで、

  1. 「はがき宛名印刷ウィザード」を使って「横書き」で宛名の文書を作成
  2. 袋とじ印刷で、往復はがきの返信面を作成
  3. 差し込みフィールドは手作りとした。

ワードの「はがき宛名印刷ウィザード」で往復はがきを作ると、2段組で、返信面にはテキストボックスが貼り付けてある設定になる。これでは「作成し難い」と思い、

    • 袋とじ印刷で1ページずつ作る
    • 宛名面の文字数が多い→行が増えてもズレないようにする
    • 宛名面に画像があるため、アンカーの位置を1行目に(明確に)固定する

袋とじ印刷にした結果、(横置きとなるため)

    • 余白の設定が「上下」が「左右」になる(ようだ)
    • 印刷時、往復はがきを横にセットする羽目になった。
※ 住所を2分割するために作った Excel のユーザー定義
Attribute VB_Name = "UserMacro"
Option Explicit

Public Function get住所上(arg住所, Optional argMax文字数 As Long = 18)
Dim str住所上, str住所下

    Call set住所上下(arg住所, str住所上, str住所下, argMax文字数)
    get住所上 = str住所上
    
End Function

Public Function get住所下(arg住所, Optional argMax文字数 As Long = 18)
Dim str住所上, str住所下

    Call set住所上下(arg住所, str住所上, str住所下, argMax文字数)
    get住所下 = str住所下
    
End Function

Sub set住所上下(ByVal arg住所, arg住所上, arg住所下, Optional argMax文字数 As Long = 18)
Dim i As Long, L As Long, L1 As Long, L2 As Long

    arg住所 = StrConv(Trim(arg住所), vbWide)
    L = Len(arg住所)
    If L <= argMax文字数 Then
        arg住所上 = arg住所
        arg住所下 = ""
        Exit Sub
    End If
    i = InStr(arg住所, " ")
    If i = 0 Then i = InStr(arg住所, " ")
    If i = 0 Then                   '桁オーバー
        arg住所上 = "Error(" & L & ")"
        arg住所下 = "Error!"
        Exit Sub
    End If
    arg住所上 = Left(arg住所, i - 1)
    arg住所下 = Trim(Mid(arg住所, i + 1))
    L1 = Len(arg住所上)
    L2 = Len(arg住所下)
    If L1 > argMax文字数 Or L2 > argMax文字数 Then
        arg住所上 = "Error(" & L1 & ")"
        arg住所下 = "Error(" & L2 & ")"
    End If
    
End Sub
  • Accessのように、半角/全角スペースを同一視してくれない。
  • ユーザー定義関数を独立したファイルにしている時は、
    • 開いておく
    • 呼び出すときは、“=マクロ.xls!get住所上()”のように、ユーザー定義関数が入っているブック名を付ける必要がある(ようだ)
      • XLStartに入れておくと、付けなくてもいい?(未確認)