• 締切済み

エクセル重複を横に配置し横列を連動し並び替え

A B C 1 5 □ 2 7 ○ 3 1 △ 4 2 @ 5 6 7 ↓ A B C 1 1 △ 2 2 @ 3 4 5 5 □ 6 7 7 ○ A列に合わせ重複したB列を並び替える。 C列以降はB列に連動して並び替えたいです。 ご解答いただけたら大変助かります。 どうぞ宜しくお願いいたします。

みんなの回答

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.6

B,C列の内容をE,F列に並び替えて表示しています。 E1セルに↓の式を入れてE1:F7にコピーしてみてください。 =IFERROR(VLOOKUP($A1,$B:$C,COLUMN(A1),FALSE),"")

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

#3です。 VBAでやると簡単にならないかと、趣味でやってみました。 コメント(注釈)、見てみてくだされば、何をやるのかわかるでしょう。 VBAと言っても、あくまで我流の1方法です(Findを利用法)が。 全体では、あまり簡単にならなかったという、感想ですが。「見つかった時の処理」の2行がポイントです。 Sub test01() Set sh1 = Worksheets("Sheet1") 'シート1を捉える Set sh2 = Worksheets("Sheet2") 'シート2を捉える lr = sh1.Range("A100000").End(xlUp).Row 'データ最終行を捉える 'MsgBox lr '--各行の処理の繰り返し For i = 2 To lr '--順序数セット sh2.Cells(i, "A") = sh1.Cells(i, "A") '--探す数は x = sh1.Cells(i, "A") '--その数をシート1のB列で探す Set r1 = sh1.Range("B1:B100000").Find(x) If r1 Is Nothing Then '--見つからない時は、何もせず次行処理へ Else '--見つかった時の処理 ' MsgBox r1.Row '--見つかった数をシート2のB列にセット sh2.Cells(i, "B") = sh1.Cells(r1.Row, "B") '--その右隣C列の記号をシート2にセット sh2.Cells(i, "C") = sh1.Cells(r1.Row, "C") End If '--- Next i End Sub ’--- Sheet2の結果 1 1 △ 2 2 @ 3 4 5 5 □ 6 7 7 ○ 「並べ替える」というよりも、該当のものを見つけて、しかるべき、セルに代入する、という考えです。 ーー こういうロジック(考え方)が、どちらがよいか、経験を積んで、見極めるのが、データ処理の肝心な点だと思います。

回答No.4

【参考までに】  これって、一種の左外部結合ってやつだから、SQL文で書けば次のようになります。 SELECT A.F1, BC.F1, BC.F2   FROM [Sheet7$A1:A10] AS A   LEFT JOIN [Sheet7$B1:C10] AS BC   ON A.F1 = BC.F1  で、実際にイミディエイトウインドウで上記SQL文を実行すれば、以下のような結論を得ます。 [イミディエイトウインドウ] ?DSelect("SELECT A.F1, BC.F1, BC.F2 FROM [Sheet7$A1:A10] AS A LEFT JOIN [Sheet7$B1:C10] AS BC ON A.F1 = BC.F1;",,Chr(13),,False) 1;1;△ 2;2;@ 3;; 4;; 5;5;□ 6;; 7;7;〇  まあ、式が簡単なのか?それとも、SQL文が簡単なのかは、見解の分かれるところですが・・・。一応、目的を達成する方法は、色々あるってことです。  参考までに・・・

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

何処に結果を出すかが、質問に書いてない。 E,F,G列に出すとして E2は =A2 下方向に式を複写する。 F2は =INDEX(B$2:B$7,MATCH(A2,B$2:B$7,0),1) と、入れて、その式を下方向に式を複写する。 G2は =INDEX(C$2:C$7,MATCH(A2,B$2:B$7,0),1) と、入れて、その式を下方向に式を複写する。 ーー 結果 E2:G8 1 1 △ 2 2 @ 3 #N/A #N/A 4 #N/A #N/A 5 5 □ 6 #N/A #N/A 7 7 ○ となる。このエラーはjy間なので、 式の先頭に、エラーチェック式を加えて、F2では =IF(ISNA(MATCH(A2,B$2:B$7,0)),"",INDEX(B$2:B$7,MATCH(A2,B$2:B$7,0),1)) G2では =IF(ISNA(MATCH(A2,B$2:B$7,0)),"",INDEX(C$2:C$7,MATCH(A2,B$2:B$7,0),1)) のようにすればよい。 結果 F,G列は 1 △ 2 @ 5 □ 7 ○

  • msMike
  • ベストアンサー率20% (368/1813)
回答No.2

添付図参照 1.次の各セルにそれぞれ右側の式を入力  ̄ ̄C9: =IF(MAX((B$1:B$7=A9)*(ROW(A$1:A$7))),INDEX(C$1:C$7,MAX((B$1:B$7=A9)*(ROW(A$1:A$7)))),"")  ̄ ̄ ̄ ̄【お断り】上式は必ず配列数式として入力のこと  ̄ ̄B9: =IF(C9<>"",A9,"") 2.範囲 B9:C9 のフィルハンドルを「エイヤッ!」とダブクリ!

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

期待の並び替えを行った結果を、 同じシートのD,E,F列に出力してよければ D1=A1 E1=IF(ISNA(MATCH(A1,B:B,0)),"",A1) F1=IFNA(INDEX(C:C,MATCH(E1,B:B,0)),"") 別シートのA,B,C列に出力したい場合は A1=Sheet1!A1 B1=IF(ISNA(MATCH(Sheet1!A1,Sheet1!B:B,0)),"",Sheet1!A1) C1=IFNA(INDEX(Sheet1!C:C,MATCH(Sheet1!E1,Sheet1!B:B,0)),"") とし、必要数下方向に複写する関数はいかがでしょうか?

関連するQ&A