• ベストアンサー

エクセルのデータから三列の名簿をつくりたい。

エクセルのデータを基に名簿をつくりたいと思っています。 データは一行に一人ずつ名前が並んでいます。 最終的には、A41ページに縦に三列(一行に三人)ならぶように作らなくてはいけませんが、ページがとても多いので1ページ1ページ切り取りして貼り付けしていられません。 A4に収まるように区切って3列に並べてくれるような機能はありますか?説明がしずらくて伝わりにくいと思いますがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

こんにちは! No.4です。 そうですかぁ~! 縦が埋まれば右の列に移動して、それぞれのデータを3列のまとまりで表示したいということなのですね? それは失礼しました。 無理矢理って方法になりますが、 ↓の画像のように表を作ってみました。 単純にオートフィルで数式をコピーとはいかないと思います。 とりあえず、縦のデータは10行まで表示としての数式にしています。 尚、データ内で重複がないものといえば「氏名」が一番可能性が高いので 氏名を表示させ、その氏名に基づき、部署と役職を表示させるようにしています。 (同姓同名がある場合は別の方法が必要になります。) Sheet2のC2セルに =IF(ROW()>10,"",INDEX(Sheet1!$C$2:$C$100,ROW(A1))) F2セルに =IF(ROW()>10,"",INDEX(Sheet1!$C$2:$C$100,ROW(A1)+10)) I2セルに =IF(ROW()>10,"",INDEX(Sheet1!$C$2:$C$100,ROW(A1)+20)) という数式を入れます (数式の最後の+○というのは表示させる行数によって変わってきます) A2セルに =IF($C2="","",INDEX(Sheet1!$A$2:$B$100,MATCH($C2,Sheet1!$C$2:$C$100,0),COLUMN(A1))) として、B2セルまでオートフィルでコピー D2セルに =IF($F2="","",INDEX(Sheet1!$A$2:$B$100,MATCH($F2,Sheet1!$C$2:$C$100,0),COLUMN(A1))) として同じく、E2セルまでオートフィルでコピー G2セルにも =IF($I2="","",INDEX(Sheet1!$A$2:$B$100,MATCH($I2,Sheet1!$C$2:$C$100,0),COLUMN(A1))) とし、オートフィルでH2セルまでコピー 最後にA2~I2セルを範囲指定し、I2セルのオートフィルハンドルで下へコピーすると 画像のような感じの表になります。 また、エラー処理はしていませんので データ量によっては「0」になったりエラーになったりします。 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m

e0513106
質問者

お礼

ありがとうございます!試してみます。

その他の回答 (7)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.8

No.4・7です! たびたびごめんなさい。 先ほどの数式に間違いがありました。 row()>10 というところをすべて row()>11 に変更してください。 前回の数式では元データの 11・21・31行目が抜けてしまいます。 どうも何度もごめんなさい。m(__)m

e0513106
質問者

お礼

いえいえ!ありがとうございます。

回答No.6

>A4に収まるように区切って に関してはA4用紙に何人分表示できるかを人間が判断する必要があります。数えるだけですが(^^; で いまいちやりたいことが見えてこない。 なんでサンプルを提示しないのか その例に沿った説明文なら、多少の説明不足は補えます。 とりあえず、添付図の右表のような形にしたいのでしょうか? 1ページ分は2行3列としています

e0513106
質問者

お礼

画像を添付する技術がなく分かりにくくなってすみません。 tom04さんが最後の回答で載せて下さった画像のようにしたいのです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

VBAを使うと簡単な考え方でプログラムが組めるタイプです。 標準モジュールに貼り付け実行 Sub test03() d = Range("a65536").End(xlUp).Row 'データ最下行 MsgBox d k = 2 '第2行目からスタートポイント l = 10 ' J列から右に3塊の例。 For i = 1 To d Cells(k, l) = Cells(i, "A") Cells(k, l + 1) = Cells(i, "B") Cells(k, l + 2) = Cells(i, "C") l = l + 4 '4列分左をポイント=3列データ+空き1列 If l > 10 + 4 * 3 Then '3塊分の列より右に超えてポイントしたら l = 10 'J列に戻る k = k + 1 '直下行をポイント End If Next i End Sub ー>ー>->↩ ー>->ー>  のイメージ 元データセルの値を入れるべきセルに彫り投げているイメージ。 ーーーー 関数では 上例のJ2は1行目 j3は4行目 J5は7行目 ・・ になる式を計算して作らないとならない。 J2は=INDEX($A$2:$C$100,(ROW()-2)*3+1,1) K2は =INDEX($A$2:$C$100,(ROW()-2)*3+1,2) L2は= =INDEX($A$2:$C$100,(ROW()-2)*3+1,3) N,O,P列は例えば、N2は=INDEX($A$2:$C$100,(ROW()-2)*3+2,1)以下略 関数はデータを持ってくるセルでどのセルを持ってくるか計算して 表現しなくてはならない。

e0513106
質問者

お礼

ありがとうございます! 難しそうですが、試してみます。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますが・・・ Sheet1のA列に氏名があり それを別SheetのA~C列に横に順番に氏名だけが並ぶようにすればいいのでしょうか? そういうことだと解釈させていただいて 一例を書かせていただきます。 ↓の画像の左側の氏名を右側の上から3列に順番に並べるようにしています。 Sheet2のA2セルに =IF(COLUMN()>3,"",INDEX(Sheet1!$A$2:$A$500,(ROW(A1)-1)*3+COLUMN(A1))) という数式をいれて 列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 尚、Sheet1のデータは500行までの数式ですので データ量によって範囲指定をアレンジしてみてください。 以上、参考になれば幸いですが、 的外れの回答なら読み流してくださいね。m(__)m

e0513106
質問者

補足

説明が足りず申し訳ありません。 項目は部署、役職、氏名とあります。その3列を1セットとして縦に3つ並べたいのです。(部署 役職 氏名 部署 役職 氏名 部署 役職 氏名) それで順番は、教えて頂いたものは左→右、端までいったら下の行の左→右となっていますが、 本当は、左の列の上↓下、下の端までいったら、右の列の上↓下というようにしたいのですが… 拙い説明で申し訳ありません。

回答No.3

#2です 括弧の位置が間違ってました m(_ _)m =INDEX(名簿,MOD((ROW(A1)-1),20)+1+(COLUMN(A1)-1)*20+INT((ROW(A1)-1)/20)*20*3)

回答No.2

印刷用の型を作ってはどうでしょうか? 1ページが20行(60人分)だったら =INDEX(名簿,MOD((ROW(A1)-1),20)+1+(COLUMN(A1)-1)*20)+INT((ROW(A1)-1)/20)*20*3 上記数式の20を1ページ分の行数に適宜、変更してください

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

質問文が抽象的なので、回答も抽象的になってしまいますが、要は縦に1列に並んでいるデータが、縦3列になればよいのですよね? (違う意味だったら失礼) >A41ページ~~ とあるので、印刷に利用するイメージなのかと想像しますが… 例として元のデータがA1からA列に並んでいると仮定するとして、 印刷用のシートを別に作成し、(タイトル行を2行くらいに仮定して)  C1に元のA1、 C2に元のA2、 C3に元のA3  D1に元のA4、 D2に元のA5 ・・・・ みたいな参照式が作れればいいのでしょうから、 C1は元シートの"A" & (ROW()-3)*3+COLUMN() のセルを参照するようにして、あとはオートフィルで埋めれば、データが3列に並びます。 タイトルを各ページにつけるのなら、「行のタイトル」を設定してあげればよろしいかと… 参照の位置関係が違っていたり、横に順番でなく縦に順番だったりする場合でも、要領は同じなので同様にして(式を少し変えれば)できるでしょう。 意味が全然違っている場合は、無視してください。

関連するQ&A