プロが教える店舗&オフィスのセキュリティ対策術

タイトルでは分かりにくいかもしれませんが。
0 10 0 5
1 9 2 4
2 8 4 3
3 7
4 6
こういった表になっているとき。
0 10 0 5
1 9
2 8 2 4
3 7
4 6 4 3
のようにA列とC列を連動させてソートする方法があれば教えてください。マクロになってしまうのならマクロでも結構です。

A 回答 (3件)

質問の内容の特徴を捉えにくい質問表現ですね。


質問において、私は常々、例は絶対必要と、OKWAVE回答で力説してます。
しかし例だけではわかりにくい場合も多い。例は挙げかたによっては
特徴を捨て去る場合もある。本件例などでは、0,1,2・・など1つしかない、続いた例ですが、実際はどうなのか。
重複ありやAB列なしCD列ありなどが例では現れていません。
プログラムを少し経験すると、その条件でプログラムロジックが大きく変わることが経験できます。
ーー
本題は
(1)A列+B列ででソート
(2)C列+D列でソート
(3)C,D列はA,B列に釣り合った場所(行)に持ってくる。
ように見えるが、それで正しいですか。(3)が曲者。
それとCD列ありは、必ずAB列ありよりデータ列が少ないのでしょうか。
0 10 
     1 3
0 8  1 2
2 4
などないのでしょうか。
ーーー
VBA向きの問題だと思いますね。
Sub test02()
d = Range("A65536").End(xlUp).Row
'--A-D列をE-H列にコピー(ソートのため)
Range("a1:D" & d).Copy Range("E1")
'--ソート
Range("E1:F" & d).Sort key1:=Range("E1"), key2:=Range("F1")
Range("G1:H" & d).Sort key1:=Range("G1"), key2:=Range("H1")
'--E-F列をI-J列にコピー
Range("E1:F" & d).Copy Range("I1")
'--G,H列をK、L列に再配置
d1 = Range("G65536").End(xlUp).Row
For i = 1 To d1
r = Range("I1:I" & d).Find(what:=Cells(i, "G")).Row
Cells(r, "K") = Cells(i, "G")
Cells(r, "L") = Cells(i, "H")
Next i
End Sub
質問例で、実行結果はI、J,K,L列で
01005
19
2824
37
4643
ただ上記VBAコードのFindは、必ず見つかるものとの前提で、
1つしかないという仮定で、手抜きしてます。
    • good
    • 0

これを「ソートに関する課題」と認識しているとハマってしまうでしょう。


むしろ、データベースでいうクエリに近いですね。
データそのものを動かすのではなく、「適合するデータを拾ってくる」と考えるべきです。

そこで、B列とC列に新たに2列挿入し、元のC,D列をE,F列とします。
新たなC列には、
=IF(ISNA(VLOOKUP(A1,$E$1:$F$3,1,FALSE)),"",VLOOKUP(A1,$E$1:$F$3,1,FALSE))
D列には
=IF(C1="","",VLOOKUP(A1,$E$1:$F$3,2,FALSE))
でよろしいかと....
    • good
    • 0

こんな方法ではダメでしょうか?


空いている列(E列など)に、VLOOKUP関数で、
=VLOOKUP(A1,$C$1:$C$5,1,FALSE) します。するとA列とC列の同じ数字が同じ行に並びます。
C列に該当数字がないとエラーが返りますが、オートフィルターでその行だけ表示させて削除してしまえば早いと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!