回答編集履歴
1
追記
answer
CHANGED
|
@@ -22,4 +22,124 @@
|
|
|
22
22
|
8 5 h
|
|
23
23
|
9 7 i
|
|
24
24
|
というデータであればどう並べ替えたいでしょうか?
|
|
25
|
-
(※B列のみの並べ替えでよい場合、これは無視していただいて結構です)
|
|
25
|
+
(※B列のみの並べ替えでよい場合、これは無視していただいて結構です)
|
|
26
|
+
|
|
27
|
+
**補足をうけて追記**
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
A列にない値がB列にあった場合のアンマッチな値をどうするかによって変わってくると思います。
|
|
31
|
+
|
|
32
|
+
①アンマッチな値を無視してもよい場合
|
|
33
|
+
---
|
|
34
|
+
⇒(A列に紐付くB列を検索)
|
|
35
|
+
例:
|
|
36
|
+
```
|
|
37
|
+
A B C
|
|
38
|
+
===========
|
|
39
|
+
1 1 a
|
|
40
|
+
2 4 b
|
|
41
|
+
3 3 c
|
|
42
|
+
4 9 d
|
|
43
|
+
5 8 e
|
|
44
|
+
6 2 f
|
|
45
|
+
8 5 h
|
|
46
|
+
9 7 i
|
|
47
|
+
===========
|
|
48
|
+
```
|
|
49
|
+
検索値:A列の値
|
|
50
|
+
検索範囲:B列全体
|
|
51
|
+
取得値:B列・C列
|
|
52
|
+
|
|
53
|
+
という元データがあった場合、
|
|
54
|
+
```
|
|
55
|
+
D列:=IF(ISNA(MATCH($A1,$B:$B,0)),"",INDEX($B:$C,MATCH($A1,$B:$B,0),1))
|
|
56
|
+
E列:=IF(ISNA(MATCH($A1,$B:$B,0)),"",INDEX($B:$C,MATCH($A1,$B:$B,0),2))
|
|
57
|
+
```
|
|
58
|
+
とすることでA列に紐付くB列・C列が取得できます。
|
|
59
|
+
|
|
60
|
+
結果:
|
|
61
|
+
```
|
|
62
|
+
A B C D E
|
|
63
|
+
=============
|
|
64
|
+
1 1 a 1 a
|
|
65
|
+
2 4 b 2 f
|
|
66
|
+
3 3 c 3 c
|
|
67
|
+
4 9 d 4 b
|
|
68
|
+
5 8 e 5 h
|
|
69
|
+
6 2 f 6
|
|
70
|
+
8 5 h 8 e
|
|
71
|
+
9 7 i 9 d
|
|
72
|
+
===========
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
②アンマッチの値も残したい場合
|
|
78
|
+
---
|
|
79
|
+
⇒(B列に紐付くA列を検索)
|
|
80
|
+
|
|
81
|
+
例:
|
|
82
|
+
検索値:B列の値
|
|
83
|
+
検索範囲:A列全体
|
|
84
|
+
取得値:A列、A列がない場合はB列の値(ソート順)
|
|
85
|
+
|
|
86
|
+
データは①の例と同じとして、
|
|
87
|
+
```
|
|
88
|
+
D列:=IF(ISNA(MATCH($B1,$A:$A,0)),"",INDEX($A:$A,MATCH($B1,$A:$A,0),1))
|
|
89
|
+
E列:=IF(ISNA(MATCH($B1,$A:$A,0)),$B1,INDEX($A:$A,MATCH($B1,$A:$A,0),1))
|
|
90
|
+
```
|
|
91
|
+
とすることでB列に紐付くA列の値とソート順が取得できます。
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
A B C D E
|
|
95
|
+
=============
|
|
96
|
+
1 1 a 1 1
|
|
97
|
+
2 4 b 4 4
|
|
98
|
+
3 3 c 3 3
|
|
99
|
+
4 9 d 9 9
|
|
100
|
+
5 8 e 8 8
|
|
101
|
+
6 2 f 2 2
|
|
102
|
+
8 5 h 5 5
|
|
103
|
+
9 7 i 7
|
|
104
|
+
===========
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
これをA~E列を選択してE列でソートすると、
|
|
108
|
+
結果:
|
|
109
|
+
```
|
|
110
|
+
A B C D E
|
|
111
|
+
=============
|
|
112
|
+
1 1 a 1 1
|
|
113
|
+
6 2 f 2 2
|
|
114
|
+
3 3 c 3 3
|
|
115
|
+
2 4 b 4 4
|
|
116
|
+
8 5 h 5 5
|
|
117
|
+
9 7 i 7
|
|
118
|
+
5 8 e 8 8
|
|
119
|
+
4 9 d 9 9
|
|
120
|
+
===========
|
|
121
|
+
```
|
|
122
|
+
となります。
|
|
123
|
+
|
|
124
|
+
D列・E列・C列を見ると目的の結果となっていると思います。
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
補足(VLOOKUPの利用について)
|
|
128
|
+
---
|
|
129
|
+
長くなってしまいましたが最後にもう一つ。
|
|
130
|
+
|
|
131
|
+
通常、単一条件でのセル検索にはVLOOKUPを使うことが多いです。
|
|
132
|
+
しかしVLOOKUPを使用するためにはいくつかの条件をクリアする必要がありますので注意が必要です。
|
|
133
|
+
条件としては
|
|
134
|
+
・検索範囲の左端列を検索キーとすること
|
|
135
|
+
・検索キーが重複していないこと
|
|
136
|
+
・検索キーが昇順でソートされていること
|
|
137
|
+
などがあります。
|
|
138
|
+
これらの条件を満たしていない場合、範囲内に存在する値が取得できなかったり、意図しない値を取得してしまったりします。
|
|
139
|
+
|
|
140
|
+
今回提示した方法のうち、②の方法ならVLOOKUPでも実現可能です。
|
|
141
|
+
しかし①の方法の場合、昇順でソートされていないB列が検索キーとなるため、VLOOKUPは正常に機能しません。
|
|
142
|
+
|
|
143
|
+
そのため今回はVLOOKUPより少し複雑ですが、INDEX関数とMATCH関数を利用した方法をご紹介しました。
|
|
144
|
+
|
|
145
|
+
参考になれば幸いです。
|