• 締切済み

エクセル 縦列に並ぶデータを横に並べる

いつもお世話になります。下のような既存の表があります。IDがあり各IDごとにデータが入っています。各IDにあるデータの数は不規則です。(多くても10個くらいまでです。)簡単に書くとこんな感じです。  |A |B |C |D |E | 1|ID|No. |  |←タイトル行 2|T1|11|  | 3|T1|15|  | 4|T1|17|  | 5|T2|13|  | 6|T2|16|  | 7|T3|14|  | ・ ・ ・ これをそれぞれのIDにあわせて横に並べ,これに枠をつけて印刷したいと思います。  |A |B |C |D | 1|ID|No. |  |  | 2|T1|11|15|17| 3|T2|13|16|  | 4|T3|14|  |  | ・ ・ ・ この並べ替えを,作業列や作業用シートは作ってもいいので,関数で実現したいと思います。良い知恵をお借りできたら幸いです。よろしくお願いします。

みんなの回答

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

No.4です! たびたびごめんなさい。 前回の数式で間違いがありました。 Sheet2のA2セルの数式を =IF(COUNT(Sheet1!$A$2:$A$1000)>=ROW(A1),INDEX(Sheet1!$B$2:$B$1000,SMALL(Sheet1!$A$2:$A$1000,ROW(A1))),"") に訂正してください。 (配列数式ではありません!) 他のセルは大丈夫だと思います。 どうも何度も失礼しました。m(__)m

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

こんばんは! 参考になるかどうか判りませんが・・・ 一例ですが、 ↓の画像のように表を作ってみました。 元データはSheet1にあり、それをSheet2に並び替える方法です。 Sheet1のA列を作業用の列とさせていただいています。 Sheet1のA2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(A1),"") という数式をいれオートフィルで下へコピーします (Sheet2の数式は1000行まで対応できるようにしていますので、1000行くらいまでコピーしても構いません) Sheet2のA2セルに =IF(COUNTIF($B$2:B2,B2)=1,ROW(A1),"") としてオートフィルでずぃ~~!と下へコピーします。 そして、B2セル(配列数式になってしまいますので、もしこの画面からセルにコピー&ペーストする場合は、 単に貼り付けただけではエラーになるとおもいます。 貼り付け後、F2キーを押すか、数式バー内で一度クリックすると、編集可能になりますので Shift+Ctrl+Enterキーで確定してください。) B2セルは =IF($A2="","",IF(COUNTIF(Sheet1!$B$2:$B$1000,$A2)>=COLUMN(A1),INDEX(Sheet1!$C$2:$C$1000,SMALL(IF(Sheet1!$B$2:$B$1000=Sheet2!$A2,ROW($A$1:$A$999)),COLUMN(A1))),"")) として、Shift+Ctrl+Enter 最後にB2セルのフィルハンドルで列方向と行方向にコピーすると 画像のような感じになります。 以上、長々と書きましたが、 参考になれば幸いです。m(__)m

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

シート1に元のデータがあるとします。 A列を重点として昇順で並べ替えなどでデータが順序よく並んでいるとします。 C列は作業列としてC2に次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(ROW(A2)=2,"1/1",IF(COUNTIF(A$2:A2,A2)=1,LEFT(C1,FIND("/",C1)-1)+1,LEFT(C1,FIND("/",C1)-1))&"/"&COUNTIF(A$2:A2,A2))) 次にまとめのための表をシート2に作るとしてA1セルにはID、B1セルにはNoと文字を入力します。 A2セルには次の式を入力し右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(COLUMN(A1)=1,IF(COUNTIF(Sheet1!$C:$C,ROW(A1)&"/1")=0,"",INDIRECT("Sheet1!A"&MATCH(ROW(A1)&"/1",Sheet1!$C:$C,0))),IF(COUNTIF(Sheet1!$C:$C,ROW(A1)&"/"&(COLUMN(A1)-1))=0,"",INDIRECT("Sheet1!B"&MATCH(ROW(A1)&"/"&(COLUMN(A1)-1),Sheet1!$C:$C,0)))) これでシート1で新たなIDが追加されても自動的にそのIDやNoが追加され表示されます。

kaniebi
質問者

お礼

ありがとうございます。 追加が反映されるのはとても使いやすいので助かります。これを作業シートにして印刷用シートから参照させて出したい結果を出すことができました。ありがとうございました。

  • soixante
  • ベストアンサー率32% (401/1245)
回答No.2

#1です。 すみません書き忘れました。 最後に右、下に引っ張ったあと、データがなくて、#N/Aになってしまうセルが出ると思います。 たぶんそのままではイヤだと思いますので、消しておいたほうが良いかもしれません。 念のため書いときます。 1)右、下に引っ張った範囲を指定 2)Ctrl +G 、Alt+S 、Alt+F 、Alt押しっぱなしで、U、X、G 3)それで 「OK」。そしたらエラーのセルだけ選択されますから、Deleteすれば一気に消せます。 ご承知のことでしたらお節介すみません。

kaniebi
質問者

お礼

ご回答いただきありがとうございます。 さっそく試してみました。確かに#N/Aを表示するセルができますね。ご丁寧に教えていただき本当にありがとうございました。

  • soixante
  • ベストアンサー率32% (401/1245)
回答No.1

以下でやってみました。 説明の都合上、元データは2行から100行まであるとします。 また、IDの種類は、T1~T20まであるとします。 1)E1セルに、”ID”と記入し、E2セル以降、”T1”~”T20”を書く。E21セルまで。 2)C2セルに、 =MATCH(A2,$E$2:$E$21,0)&"-"&COUNTIF($A$2:$A2,A2) として、100行まで下に引っ張る 3)F2セルに、 =INDEX($B$2:$B$100,MATCH(ROW(A1)&"-"&COLUMN(A1),$C$2:$C$100,0),1) として、後は右、下に引っ張る C列は作業列です。 たぶんもっとお詳しい方から、さらにスマートな方法も出ると思いますけどご参考までお願いします。

関連するQ&A