宛名印刷
2017/02/28
エクセルからワードの宛名をレイアウトする。(郵便枠編)
管理者用
今までは、レイアウトに必要なテキスト配置の設定について紹介してきました。
これからは、実際にレイアウトしながら進めて行きます。
まず初めに、郵便番号の配置です。
郵便番号は、日本郵便のHPに、その仕様が記載されています。
仕様に沿って配置すると良いでしょう。
以下に、そのスクリプトを紹介します。
7ケタの郵便番号を1文字づつ分解して、1文字づつテキストボックスを作って配置してます。
紹介の、スクリプトでは、3~7ケタの配置部分は、省略してますので注意してください。
同じ事の繰り返しなので、プログラム的には、関数やサブルーチン化するなど、工夫と思われますが、今回は割愛します。
また、郵便番号データを見ますと、〒マークや、ハイフォンなどの文字が含まれている場合があります。
ハイフォンなどが付いていないデータを用意すれば、問題無いのですが、今回は、正規化を行う関数も紹介しておきます。
最後に、参考として載せてます。
エクセルの住所データ
実行結果 ワードにレイアウト
印刷結果
使い古しのハガキを使って実際にプリントしてみました。
少しずれているようですが、調整は最後にしましょう。
また、テキストボックスの枠も気にしないで、最後まで行きます
郵便番号のマクロ
Sub yubin()
Dim myWord As New Word.Application ' Word 起動
Dim docWord As Document
Set myWord = CreateObject("Word.Application")
Set docWord = myWord.Documents.Add
' Word を表示する
myWord.Visible = True
'******************************************************
Rem ブックのサイズをはがきサイズに ========
'******************************************************
With docWord.PageSetup
.PageWidth = MillimetersToPoints(100)
.PageHeight = MillimetersToPoints(148)
.LeftMargin = MillimetersToPoints(5)
.RightMargin = MillimetersToPoints(5)
.TopMargin = MillimetersToPoints(5)
.BottomMargin = MillimetersToPoints(5)
End With
<ご参考> 郵便番号のハイフォン、〒マーク等を削除するスクリプト
'******************************************************
Rem 郵便データを取り込む ========
'******************************************************
InData = Sheet1.Cells(2, 5) 'シート1の2行4列のデータ
yubin_DAT = InData
'******************************************************
Rem 郵便番号の配置 開始 ========
'******************************************************
If Not yubin_DAT = "" Then
yubin_DAT = yubin_del(yubin_DAT) '郵便番号の正規化
yubin_font = "MS ゴシック" 'MS ゴシック
yubin_fontW = "Regular"
font_p = 14 '14p
YH = font_p * 0.35 + 3
YH = MillimetersToPoints(YH)
YW = font_p * 0.35 + 1
Me_yubin_mojikan = 7
Me_yubin_mojikan = MillimetersToPoints(Me_yubin_mojikan)
yubin_X1_ich = MillimetersToPoints(44 - 0) '+ Me_size_OFX 44
yubin_X2_ich = yubin_X1_ich + Me_yubin_mojikan '7
yubin_X3_ich = yubin_X2_ich + Me_yubin_mojikan '7
yubin_X4_ich = yubin_X3_ich + Me_yubin_mojikan * 1.086 '7.6 'Me_yubin_mojikan*1.086
yubin_X5_ich = yubin_X4_ich + Me_yubin_mojikan * 0.971 '6.8 'x0.971
yubin_X6_ich = yubin_X5_ich + Me_yubin_mojikan * 0.971 '6.8
yubin_X7_ich = yubin_X6_ich + Me_yubin_mojikan * 0.971 '6.8
Me_yubin_YS = MillimetersToPoints(11.5 - 0)
yubin_YS_ichaa = Me_yubin_YS
'-----------------1桁
Set TextFramA1 = docWord.Shapes.AddTextbox _
(Orientation:=msoTextOrientationHorizontalRotatedFarEast, Left:=yubin_X1_ich, Top:=yubin_YS_ichaa, Width:=Me_yubin_mojikan, Height:=YH)
TextFramA1.TextFrame.TextRange.Text = Mid(yubin_DAT, 1, 1) 'データを書き込む
TextFramA1.TextFrame.TextRange.Font.Size = 14
TextFramA1.TextFrame.TextRange.Font.Name = "MS ゴシック (見出しのフォント - 日本語)"
With TextFramA1.TextFrame.TextRange.ParagraphFormat
.SpaceBefore = 0 '前のスペース
.SpaceBeforeAuto = False
.SpaceAfter = 0 '後のスペース
.SpaceAfterAuto = False
.LineSpacingRule = wdLineSpaceExactly '行間隔モード
.LineSpacing = 10 '行間隔
.Alignment = wdAlignParagraphCenter '揃え方向
End With
With TextFramA1.TextFrame
.VerticalAnchor = msoAnchorMiddle
.MarginBottom = 0
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
End With
'TextFramA1.Line.Visible = msoFalse '枠線無しに
'-----------------2桁
Set TextFramA1 = docWord.Shapes.AddTextbox _
(Orientation:=msoTextOrientationHorizontalRotatedFarEast, Left:=yubin_X2_ich, Top:=yubin_YS_ichaa, Width:=Me_yubin_mojikan, Height:=YH)
TextFramA1.TextFrame.TextRange.Text = Mid(yubin_DAT, 2, 1) 'データを書き込む
TextFramA1.TextFrame.TextRange.Font.Size = 14
TextFramA1.TextFrame.TextRange.Font.Name = "MS ゴシック (見出しのフォント - 日本語)"
With TextFramA1.TextFrame.TextRange.ParagraphFormat
.SpaceBefore = 0 '前のスペース
.SpaceBeforeAuto = False
.SpaceAfter = 0 '後のスペース
.SpaceAfterAuto = False
.LineSpacingRule = wdLineSpaceExactly '行間隔モード
.LineSpacing = 10 '行間隔
.Alignment = wdAlignParagraphCenter '揃え方向
End With
With TextFramA1.TextFrame
.VerticalAnchor = msoAnchorMiddle
.MarginBottom = 0
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
End With
'TextFramA1.Line.Visible = msoFalse '枠線無しに
'-----------------3桁
'-----------------4桁
'-----------------5桁
'-----------------6桁
'-----------------7桁
End If
'******************************************************
Rem 郵便番号の配置 END
'******************************************************
<ご参考>郵便番号 正規化関数です。
桁数が短いなどの場合は、”●” 文字を付けてます。
Function yubin_del(郵便番号)
'〒 コードチェック&削除
郵便番号 = LTrim(郵便番号) '両端スペース削除
郵便番号 = RTrim(郵便番号)
yua = Left(郵便番号, 1)
If yua = "〒" Then
郵便番号 = Mid(郵便番号, 2, 10)
End If
'郵便番号123-4567→1234567
郵便番号 = StrConv(郵便番号, 8) '半角へ変換
jj = Mid(郵便番号, 4, 1)
If jj = "-" Then
az = Mid(郵便番号, 1, 3)
ay = Mid(郵便番号, 5, 9)
az = az + ay
Else
az = 郵便番号
End If
'郵便番号レングス調査 3桁の場合
If Not Len(az) = 7 Then
'az = Left(az, 3)
yubin_del = "●" + az + "●●●●"
Else
yubin_del = az
End If
End Function