昨日は名簿マスターに於いて、頭文字毎の区分けに挑戦した。
infoment.hatenablog.com
元々今回のネタは、職場の電話帳改善に端を発している。今回はクライマックス、「名簿マスターから、印刷用にデータを抽出して並べる」に挑戦する。
A4用紙に、何列かに渡り改行された名簿がある。こんな感じだ。
こちらのサンプルでは、30人記載するごとに列を変えることで、用紙内に効率よく名簿を配置して1枚に収めている。
しかし、この状態で修正を重ねると、様々な表現の揺らぎが増えていく。そこで、まず名簿マスターを作成して、更新作業はマスター側で行うべきでは?となって、昨日までの内容に至った次第。
まず名簿マスターとは別のシートに、印刷用のシートを準備する。こちらのシートでは、以下のルールで名前を記載している。
- 一列に記載する人数は、30人まで。
- 次の列は、4行オフセットした先とする。
- 記載するのは、イニシャル・名前・携帯の3つのみ。
こんな感じだ。
イニシャルは、名簿マスターから取得する。各列番号をそのまま利用して、名簿マスターテーブルのイニシャル列からIndex関数を用いて値を取得してみよう。
行番号を「Row()-1」としたのは、印刷用シートが2行目からデータをセットしていて、1行段違いになっているから。
この式を30行目までコピーして、さらにE列にコピーすると、こうなる。
A列とE列が、同じ値になってしまった。当たり前と言えば、当たり前。
そこで数式には、改行するたびに参照先を30行増やすような工夫が必要となる。
- 1列目 ⇒ 0
- 5列目 ⇒ 1
- 9列目 ⇒ 2
- n列目 ⇒ (n-1)÷4
結果、上手く改行することが出来た。
レコード数を超えるとエラーになるので、エラー処理も施しておこう。
次に、名前の列に、上記の式をコピーする。
このとき、以下の二点に注意する。
- 参照先を「イニシャル」から「名前」に変更。
- 列番号は、イニシャル列を参照する。
すると、このように名前が表示される。
携帯電話番号も、同様に数式をセットしてみよう。
注意点は、「名前」の場合と同じだ。
後は、等間隔に列ごとコピーするだけで、人数分の参照が可能となる。
この方式ならば、名簿マスターを更新するだけで、印刷用シートも自動的に更新される。ただしこの方式には、以下の欠点がある。
- 改行数を変更する場合、少し手間がかかる。
- 列数を変更する場合、式の組み直しが必要。
これ以上の汎用性を持たせるには、マクロで名簿マスターを変換して貼り付けた方が手っ取り早いかもしれません。
参考まで。