- 締切済み
Excelで行方向に並んだデータを列に
こんばんは。 質問タイトルをどう書いていいのかわからず、わかりにくくてすみません。 こういうExcelの表があります。 A表 A列 B列 No code 1 10 1 11 1 12 2 10 3 14 4 14 4 15 それを次のようにしたいと思ってます。 B表 A列 B列 C列 D列 No code1 code2 code3 1 10 11 12 2 10 3 14 4 14 15 A列にあるのがサンプルNoで、それぞれに対応するコードが縦に並んでいる(A表)のを、サンプルNoを重複させずにコードを横に展開(B表)したいのです。 今は各サンプルで重複しているコード数を出して、2以上だったらif関数で横に持っていくという非常に面倒な方法を取っています。 他によい方法はないでしょうか。なお、マクロは嫌がられるので使えません。 データ数よりもシート数(1シートに1つの表)が多く、できるだけ簡単な方法があれば教えていただけますでしょうか。 以上よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
No.2のCorlTarです >あ、そうか、それだとcolum関数は使えないんだ・・・と今気づきました。 A表A列が昇順(降順)に並んでいれば使えます >実際はA列は連番とは限りません。B列に入れているのは連番とはならないことが多いです。 使えないのはROW関数でしょう。 ●B表のA列の出し方 1. データ - フィルタ - フィルタオプションの設定 2. 抽出先 ●指定した範囲 3. リスト範囲 : $A$1:$A$7 (A表のA列の範囲でタイトル含める) 4. 検索条件範囲 : (空欄のまま) 5. 抽出範囲 : $A$10 (仮です) 6. [レ]重複するレコードは無視する にチェック 7. [OK] 後は当方が示した数式を放り込めば出てきます
- imogasi
- ベストアンサー率27% (4737/17069)
持って回った質問の書き方だが、良く見ると、A列に何行目に来るかの数字が出ているのかな。 例データ Sheet1 1 10 1 11 1 12 2 10 3 14 4 14 4 15 Sheet2のA1に =IF(COUNTIF(Sheet1!$A$1:$A$10,ROW())>=COLUMN(),INDEX(Sheet1!$B$1:$B$100,MATCH(ROW(),Sheet1!$A$1:$A$10,0)+COLUMN()-1),"") これを右方向に式を複写。最高3列の場合 A1:C1の式を下方向に複写。 結果 10 11 12 10 14 14 15 ーー #1のご回答と同じになった。こちらはSheet2に結果を出しているのだが(不思議)。 ーー もしA列がなくて関数で出すなら 例データ A列 B列 1<-- 行挿入してA1に1を入れる 1 10 1 11 1 12 2 10 2 14 3 14 3 15 A2の式は =IF(B2>B1,A1,MAX($A$1:A1)+1) を下方向に式を複写する。質問と10->14のところが違うが。 こちらは等しいか 小ならA列番号を+1するというルールで良いなら、このように(A列データを手作業で入力しなくても、B列から関数で)出来る(出せる)。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- koko88okok
- ベストアンサー率58% (3839/6543)
私なら、Web検索して見付からなければ、D&Dで並べ替えますが、・・・ (大変な思いをすれば、次回から後々のことを考えて安易な表を作ることをしなくなるでしょうから) 何か事情がおありなんでしょうね。
お礼
早速のご回答ありがとうございます。 実は私が請け負っている仕事に絡むことで、私にはいかんともしがたいんです。
お礼
すみません、持って回った質問の仕方で・・・。 あ、そうか、それだとcolum関数は使えないんだ・・・と今気づきました。 実際はA列は連番とは限りません。B列に入れているのは連番とはならないことが多いです。 A列 B列 101 5 101 8 103 12 104 5 106 1 106 98 ↓ A列 B列 C列 101 5 8 103 12 104 5 106 1 98 こっちの方がわかりやすかったですね、すみません。