• 締切済み

エクセルで離れた行同士をソートする方法

タイトルでは分かりにくいかもしれませんが。 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列を連動させてソートする方法があれば教えてください。マクロになってしまうのならマクロでも結構です。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.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列で 0 10 0 5 1 9 2 8 2 4 3 7 4 6 4 3 ただ上記VBAコードのFindは、必ず見つかるものとの前提で、 1つしかないという仮定で、手抜きしてます。

noname#79209
noname#79209
回答No.2

これを「ソートに関する課題」と認識しているとハマってしまうでしょう。 むしろ、データベースでいうクエリに近いですね。 データそのものを動かすのではなく、「適合するデータを拾ってくる」と考えるべきです。 そこで、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)) でよろしいかと....

  • qno
  • ベストアンサー率44% (4/9)
回答No.1

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

関連するQ&A

専門家に質問してみよう