まりふのひと

ワードの差し込み印刷で縦書き賞状を印刷する


問い合わせの主旨は、

  1. Accessでは縦書きの賞状が作れない
  2. Wordで差し込み印刷で作ってみました。
    • 氏名を均等割出来ません。
    • テキストボックスを作ってからの差し込み均等割も上手くいきません。

そこで、Word2003/WindowsXP で確認してみた。

  1. Accessでの縦書き
    • 出来なくもないが、面倒だしやらない方がいいだろう。
    • 「どうしてもAccessで」というのであれば、Wordで名前のない賞状を作っておき、Accessで氏名のみを印刷する方法がいいのではないかと思う。
  2. Wordの差し込み印刷
    • 確かに縦書きにすると均等割り付けが出来ない。
      → 均等割り付けの文字列を作っておき、フィールドの割り付けを行うと、均等割り付けが壊れる。

そこで、下記前提で「私ならこうするだろう」という方法を考えた。

  • 前提
  • ポイント
    1. データファイルはExcelとする。
    2. Wordでは、名前の部分のみの作り方のみとし、差し込みフィールドの挿入関連は省略する。

1)データファイルに印刷用の氏名を作る

  • Wordの名前
    1. インデントすると、姓の位置は揃うが、氏名が長いと崩れる(2行になる)ことがある。
    2. 下揃えすると、姓の位置が氏名の文字数で上下することになる。
       この方法を補完するため、「姓と名の間に1文字の空白が入っている」前提で、Excelの氏名をマクロで次のように作り直す。(○:姓,□:空白,●:名)
      1. ○□●  → ○□□□●
      2. ○□●● → ○□□●●
      3. ○○□● → ○○□□●
      4. 上記以外は入力のままとする。
  • Excelマクロ
    • 氏名を選択後、マクロ名:印刷用氏名作成 を実行する。
    • 元に戻す(姓と名の間に1文字のスペースを入れる)には、氏名を選択後、マクロ名:印刷用氏名戻し を実行する。
  • Excelマクロのソース
     ベストか否かは判りません。参考にしてください。

    • Sub 印刷時氏名作成()
    For Each r In Selection
        t = r.Text                      'セルの表示文字を保存
        L = Len(t)                      '文字数
        i = InStr(t, " ")              'スペースの位置
        If i > 1 Then
            Select Case L
              Case 3
                t = Left(t, i - 1) & "   " & Trim(Mid(t, i))
              Case 4
                t = Left(t, i - 1) & "  " & Trim(Mid(t, i))
            End Select
        End If
        r.Value = t
    Next
    • Sub 印刷時氏名戻し()
    For Each r In Selection
        t = r.Text                      'セルの表示文字を保存
        t = Trim(t)                     '前後のスペースを取る
        i = InStr(t, " ")              'スペースの位置
        If i > 1 Then
            t = Left(t, i - 1) & " " & LTrim(Mid(t, i))
        End If
        r.Value = t
    Next

   VBAが解れば、自分で好きなように変えればいいので、この方法がベターかも知れない。

  • サンプルデータ
     ここからダウンロードできます。
    • SampleData1.zip ‥‥ 圧縮(zip形式)フォルダ
       解凍すると同名のフォルダの下に次のファイルが出来ます。

2)表+均等割り付け

表を作成し、氏名のセルを均等割り付けする方法です。これは「はがき印刷ウィザード」の氏名を印刷する方法と同じです。
Word文書を作る方法のみです。

  1. Wordを起動します。
  2. ページ設定します。
    • 例えば、A4版横+縦書き です。
    • 文字数と行数の指定は、「標準の文字数を使う」がいいです。
  3. 2行×2列の表を挿入します。
  4. 任意のセルを右クリック ⇒[表のプロパティ]をクリックし、[表]タブの「右揃え」をクリックします。
    • これは、表の左側に文字を入れるためです。
  5. 右側の列のセルを結合します。
  6. 右側のセルに賞状名を入力します。例えば、“皆勤症” です。
  7. 左側の下のセルに最大文字数の氏名を入力します。例えば、“佐々木 小次郎” です。
  8. 各セルの文字方向を縦にします。
  9. フォントおよびフォントサイズを設定します。
  10. セル(表)のサイズを調節します。
    • ズームを[ページ全体を表示]にして、全体を見ながら調節します。
    • 表の下の罫線がページぎりぎりまで大きくします。
      • これを行わないと、表の左側に文字を入力できません。
    • 表がページからはみ出ることがあります。サイズを調節する方法を変えてみてください。
    • 氏名のセルは(最大の文字数ですから)ぎりぎりの大きさにします。
  11. 氏名のセルをセル選択し、[均等割り付け]します。
  12. フィールドを挿入する時は、“佐々木 小次郎” を選択して行います。

3)段落に均等割り付けする

上記の「表+均等割り付け」を行っている時に気が付いた方法です。
 Wordで縦書き賞状が作ってある前提です。

  1. 氏名の行(正しくは段落)の字下げはスペースで行わずインデントで行います。(必須)
    • 一時的に横書きにするとルーラーで行えます。
    • ダイアログボックスで行うには、[書式]メニュー ⇒[段落]⇒[インデントと行間隔]タブの「左のインデント幅」、「右のインデント幅」で行います。
  2. 氏名の行を行選択し、[均等割り付け]します。
  3. 氏名(文字列)のみを選択し、差し込みフィールドを挿入します。
    (「挿入」ですが、その前に選択しているので置換になります。)

4)フィールドコードで均等割り付けする

インターネットを検索していて見つけたすごい方法です。

Alt+F9でフィールドコート表示
{eq \o \ad({MERGEFIELD"氏名"},□□□□□□□□□)}
四角は全角スペース

ポイントは、

  • フィールドコードの入力は、横書きで、フォントを拡大する前 がやり易いです。
     入力には VBA の知識が必要です。
  • 氏名には「プロポーショナルフォント」を使うことです。
     これにより、スペースの幅が狭くなり、見た目がよくなります。

5)2〜4)のサンプルデータ

  • ここからダウンロードできます。
     SampleData2.zip ‥‥ 圧縮(zip形式)フォルダ
     解凍すると同名のフォルダの下に次のファイルが出来ます。
    • 表+均等割付.doc ‥‥ Microsoft Word 文書
      • 「2)表+均等割り付け」の差し込み印刷文書です。
      • データファイルを選択し直す必要があります。
    • 段落の均等割付.doc ‥‥ Microsoft Word 文書
      • 「3)段落に均等割り付けする」の差し込み印刷文書です。
      • データファイルを選択し直す必要があります。
    • フィールドコード.doc ‥‥ Microsoft Word 文書
      • 「4)フィールドコードで均等割り付けする」の差し込み印刷文書です。
      • データファイルを選択し直す必要があります。
    • 名前.xls ‥‥ Microsoft Excel ワークシート