こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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列に連動して並び替えたいです。
ご解答いただけたら大変助かります。
どうぞ宜しくお願いいたします。

投稿日時 - 2019-03-16 16:50:19

QNo.9597427

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

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

投稿日時 - 2019-03-18 10:35:59

ANo.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の結果
11△
22@
3
4
55□
6
77○
「並べ替える」というよりも、該当のものを見つけて、しかるべき、セルに代入する、という考えです。
ーー
こういうロジック(考え方)が、どちらがよいか、経験を積んで、見極めるのが、データ処理の肝心な点だと思います。

投稿日時 - 2019-03-17 10:52:27

ANo.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文が簡単なのかは、見解の分かれるところですが・・・。一応、目的を達成する方法は、色々あるってことです。

 参考までに・・・

投稿日時 - 2019-03-16 23:53:16

ANo.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
11△
22@
3#N/A#N/A
4#N/A#N/A
55□
6#N/A#N/A
77○
となる。このエラーは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○

投稿日時 - 2019-03-16 22:16:12

ANo.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 のフィルハンドルを「エイヤッ!」とダブクリ!

投稿日時 - 2019-03-16 21:04:35

ANo.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)),"")

とし、必要数下方向に複写する関数はいかがでしょうか?

投稿日時 - 2019-03-16 20:43:26

あなたにオススメの質問