• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで縦に並んだデータを横に並び替えたい)

エクセルで縦データを横に並び替える方法は?

このQ&Aのポイント
  • エクセルで縦に並んだデータを横に並び替える方法を教えてください。
  • 手作業でデータを一つずつ移動する以外に、エクセルで縦データを横に並び替える方法はありますか?
  • VBAなどのプログラミング言語を使用せずに、エクセルで縦データを横に移動する方法を教えてください。

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

  • ベストアンサー
回答No.3

E列に店名リストを作成する (なければフィルタオプションの設定で重複するレコードを無視するを使うとよい) F1セルに 1 右へ連番 N2セルに =COUNTIF(A:A,E2) 下へオートフィル F2セルに =IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+F$1/2,1)) G2セルに =IF(F$1>$N2*2,"",INDEX($B:$C,MATCH($E2,$A:$A,0)+G$1/2-1,2)) F2:G2セルを選択して、右へオートフィル、そのまま下へオートフィル E:N列を選択して 切り取り 別シートへ貼り付け

puma4646
質問者

お礼

ご回答ありがとうございます。 上記の方法でやりたいことができました!他の方の方法でもできたのだと思いますが、私はこちらの方法が一番最初に成功したので、ベストアンサーに選ばせていただきます。 ありがとうございました!!

その他の回答 (5)

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

こんばんは! すでに回答は出ていますので、参考程度で・・・ 店名を重複なしに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

puma4646
質問者

お礼

ご丁寧に回答いただき、ありがとうございます。 何故か途中からSheet2のデータが「#NUM!」になってしまって、きちんと最後まで処理ができてないようでした。 私の知識が浅く、どこがどうなってエラーが出ているのか検討もつかず、申し訳ありません。。

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

分かり易くしかもデータが多いときに計算に負担を掛けないようにするためには作業列を使って処理することがおすすめです。 元の表がシート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)),"")))))

puma4646
質問者

お礼

ご回答ありがとうございます。 教えて頂いたとおりにやったつもりなのですが、Sheet2のA2に =IF(ROW(A1)>MAX(Sheet1!$E:$E),・・・・・・・・・・・・・ という数式を入れようとすると、「入力した数式は正しくありません。」と出てしまいました。 そのままコピーしてはNGだったでしょうか?

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 仮に元データを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)
回答No.2

すみません質問をよく見ていませんでした 先ほどのやり方では単純に行と列を入れ替えるだけで ご希望の形にはなりません

puma4646
質問者

お礼

回答ありがとうございます。 私も最初これでやろうとしました。。

  • chiizu2
  • ベストアンサー率41% (164/400)
回答No.1

表全体をコピーして 形式を選択して貼り付けで 行列を入れ替えるにチェックをつけて貼り付ける

puma4646
質問者

お礼

回答ありがとうございます。 私も最初これでやろうとしました。。

関連するQ&A

専門家に質問してみよう