- ベストアンサー
エクセルで縦データを横に並び替える方法は?
- エクセルで縦に並んだデータを横に並び替える方法を教えてください。
- 手作業でデータを一つずつ移動する以外に、エクセルで縦データを横に並び替える方法はありますか?
- VBAなどのプログラミング言語を使用せずに、エクセルで縦データを横に移動する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (5)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! すでに回答は出ていますので、参考程度で・・・ 店名を重複なしにSheet2に表示するようにしてみました。 ↓の画像でSheet1に作業用の列を設けています。 作業列D2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(),"") という数式を入れ、オートフィルでずぃ~~~!っと下へコピーしておきます。 そしてSheet2のA2セルは =IF(COUNT(Sheet1!D:D)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!D:D,ROW(A1)))) としてオートフィルで下へコピーすると店名が表示されます。 次にB2セルに =IF(OR($A2="",COUNTIF(Sheet1!$A:$A,$A2)<COLUMN(B1)/2),"",INDEX(Sheet1!$B$1:$B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),COLUMN(B1)/2))) これは配列数式になってしまいますので、この画面からコピー&ペーストしただけではちゃんと表示されません。 貼り付け後、F2キーを押し編集可能にします。 Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 同様にC2セル(これも配列数式です)に =IF(OR($A2="",B2=""),"",INDEX(Sheet1!$C$1:$C$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$A2,ROW($A$1:$A$1000)),COLUMN(B1)/2))) としShift+Ctrlキー+Enterキーで確定! B2。C2セルを範囲指定し、2列ずつ列方向へオートフィルでコピー! そのまま下へコピーすると画像のような感じになります。 尚、Sheet1の店名と品名の行は重複しないものとしています。 (例 → A店・りんご という行が複数あることはない!) 長々と失礼しました。m(__)m
お礼
ご丁寧に回答いただき、ありがとうございます。 何故か途中からSheet2のデータが「#NUM!」になってしまって、きちんと最後まで処理ができてないようでした。 私の知識が浅く、どこがどうなってエラーが出ているのか検討もつかず、申し訳ありません。。
- KURUMITO
- ベストアンサー率42% (1835/4283)
分かり易くしかもデータが多いときに計算に負担を掛けないようにするためには作業列を使って処理することがおすすめです。 元の表がシート1のA,B,C列の2行目から下方に入力されているとします。 作業列としてD2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,MAX(D$1:D1)+1,D1)) E2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(D2="","",D2+COUNTIF(A$2:A2,A2)/1000) そこでシート2の2行目から下方にデータを表示させるとしたらシート2のA2セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet1!$E:$E),"",IF(COLUMN(A1)=1,INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$D:$D,0)),IF(COUNTIF(Sheet1!$E:$E,ROW(A1)+ROUNDUP((COLUMN(A1)-1)/2,0)*0.001)=0,"",IF(MOD(COLUMN(A1),2)+1=1,INDEX(Sheet1!$B:$B,MATCH(ROW(A1)+ROUNDUP(((COLUMN(A1)-1)/2),0)*0.001,Sheet1!$E:$E,0)),IF(MOD(COLUMN(A1),2)+1=2,INDEX(Sheet1!$C:$C,MATCH(ROW(A1)+ROUNDUP(((COLUMN(A1)-1)/2),0)*0.001,Sheet1!$E:$E,0)),"")))))
お礼
ご回答ありがとうございます。 教えて頂いたとおりにやったつもりなのですが、Sheet2のA2に =IF(ROW(A1)>MAX(Sheet1!$E:$E),・・・・・・・・・・・・・ という数式を入れようとすると、「入力した数式は正しくありません。」と出てしまいました。 そのままコピーしてはNGだったでしょうか?
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 仮に元データをsheet1、sheet2のA列に店名を入力される事として抽出します。 (1)sheet2のB1に以下の配列数式(入力完了時にshift+ctrl+enterキーを同時押下)を入力 =IF(COUNTIF(Sheet1!$A:$A,$A1)>=ROUND(COLUMN(A1)/2,0),INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A$1:$A$200=$A1,ROW(Sheet1!$A$1:$A$200),999),ROUND(COLUMN(A1)/2,0))),"") (2)sheet2のC1に以下の配列数式(入力完了時にshift+ctrl+enterキーを同時押下)を入力 =IF(COUNTIF(Sheet1!$A:$A,$A1)>=ROUND(COLUMN(A1)/2,0),INDEX(Sheet1!$C:$C,SMALL(IF(Sheet1!$A$1:$A$200=$A1,ROW(Sheet1!$A$1:$A$200),999),ROUND(COLUMN(A1)/2,0))),"") (3)上記のB1:C1を選択して縦横に必要分コピー
- chiizu2
- ベストアンサー率41% (164/400)
すみません質問をよく見ていませんでした 先ほどのやり方では単純に行と列を入れ替えるだけで ご希望の形にはなりません
お礼
回答ありがとうございます。 私も最初これでやろうとしました。。
- chiizu2
- ベストアンサー率41% (164/400)
お礼
ご回答ありがとうございます。 上記の方法でやりたいことができました!他の方の方法でもできたのだと思いますが、私はこちらの方法が一番最初に成功したので、ベストアンサーに選ばせていただきます。 ありがとうございました!!