名簿マスターから、印刷用にデータを抽出して並べる

昨日は名簿マスターに於いて、頭文字毎の区分けに挑戦した。
infoment.hatenablog.com

元々今回のネタは、職場の電話帳改善に端を発している。今回はクライマックス、「名簿マスターから、印刷用にデータを抽出して並べる」に挑戦する。
f:id:Infoment:20190916221737p:plain

A4用紙に、何列かに渡り改行された名簿がある。こんな感じだ。
f:id:Infoment:20190916221855p:plain

こちらのサンプルでは、30人記載するごとに列を変えることで、用紙内に効率よく名簿を配置して1枚に収めている。

しかし、この状態で修正を重ねると、様々な表現の揺らぎが増えていく。そこで、まず名簿マスターを作成して、更新作業はマスター側で行うべきでは?となって、昨日までの内容に至った次第。

まず名簿マスターとは別のシートに、印刷用のシートを準備する。こちらのシートでは、以下のルールで名前を記載している。

  1. 一列に記載する人数は、30人まで。
  2. 次の列は、4行オフセットした先とする。
  3. 記載するのは、イニシャル・名前・携帯の3つのみ。

こんな感じだ。
f:id:Infoment:20190916222526p:plain

イニシャルは、名簿マスターから取得する。各列番号をそのまま利用して、名簿マスターテーブルのイニシャル列からIndex関数を用いて値を取得してみよう。
f:id:Infoment:20190916222818p:plain

行番号を「Row()-1」としたのは、印刷用シートが2行目からデータをセットしていて、1行段違いになっているから。

この式を30行目までコピーして、さらにE列にコピーすると、こうなる。
f:id:Infoment:20190916223034p:plain

A列とE列が、同じ値になってしまった。当たり前と言えば、当たり前。
そこで数式には、改行するたびに参照先を30行増やすような工夫が必要となる。

  • 1列目 ⇒ 0
  • 5列目 ⇒ 1
  • 9列目 ⇒ 2
  • n列目 ⇒ (n-1)÷4

f:id:Infoment:20190916223541p:plain

結果、上手く改行することが出来た。
f:id:Infoment:20190916223620p:plain

レコード数を超えるとエラーになるので、エラー処理も施しておこう。
f:id:Infoment:20190916223816p:plain

次に、名前の列に、上記の式をコピーする。
このとき、以下の二点に注意する。

  1. 参照先を「イニシャル」から「名前」に変更。
  2. 列番号は、イニシャル列を参照する。

f:id:Infoment:20190916224132p:plain

すると、このように名前が表示される。
f:id:Infoment:20190916224356p:plain

携帯電話番号も、同様に数式をセットしてみよう。
f:id:Infoment:20190916224540p:plain

注意点は、「名前」の場合と同じだ。
f:id:Infoment:20190916224628p:plain

後は、等間隔に列ごとコピーするだけで、人数分の参照が可能となる。
f:id:Infoment:20190916224738p:plain

この方式ならば、名簿マスターを更新するだけで、印刷用シートも自動的に更新される。ただしこの方式には、以下の欠点がある。

  1. 改行数を変更する場合、少し手間がかかる。
  2. 列数を変更する場合、式の組み直しが必要。

これ以上の汎用性を持たせるには、マクロで名簿マスターを変換して貼り付けた方が手っ取り早いかもしれません。

参考まで。