列Aの順序を維持しながら列Bを並べ替える

列Aの順序を維持しながら列Bを並べ替える

Excel には 2 つの列があります。最初の列の (カスタム) 順序を維持しながら、2 番目の列をアルファベット順に並べ替えたいです (最初の列のみに基づいて等価性が判断される std::stable_sort を考えてください)。例:

dsf   k
www   d
www   a
azd   q
azd   e
azd   b

なるべきです

dsf   k
www   a
www   d
azd   b
azd   e
azd   q

並べ替えウィザードには、「現在の順序を維持する」オプションがないようです。カスタム順序を定義することはできますが、1,000 を超えるさまざまな要素があるため、それを実行するのは非常に面倒です。また、このカスタム順序はいつでも変更される可能性があります。

答え1

データは行2から始まり、列はC「補助列」として使用できると仮定します。

=IF(A1=A2, C1, C1+1)

セル に入力しますC2。(列Cが使用できない場合は、使用できる列を使用します。データが行 1 から始まる場合は、空白行を挿入するか、(引き続き) 上記をセル に入力しますC2が、1セル に入力しますC1。) 下にドラッグ/入力してください。これで、(列C) にカスタム順序が「文書化」されます。たとえば、C2= 1、C3= C4= 2、C5= C6= C7= 3 などです。次に、列Cと 列で並べ替えますB

答え2

簡単に言うと:-

  1. 列 A の内容をメモ帳にコピーし、クリップボードに再度コピーします。
  2. 両方の列を選択します。
  3. 並べ替え機能を選択し、「カスタム リスト」の順序を使用して列 A を並べ替えます。
  4. クリップボードからカスタム リストにデータを入力します。
  5. 並べ替え関数にレベルを追加し、列 B で「最小から最大」の順に並べ替えます。

答え3

FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...一番良い方法は、カスタム オーダーを使用することだと思います。頻繁に更新する必要がない場合は、範囲全体をインポートするだけで済みます。その後、並べ替え時にそれを使用します。

VBAソリューションは次のようになります

サブソート()
Dim iCustListNum を整数として

iCustListNum = アプリケーション.カスタムリスト数 + 1
Application.AddCustomList ListArray:=Range("A2:A100")

エラー時にGoTo err:

リストを並べ替える
Range("A1:B100").sort Key1:=Range("A1"), Order1:=xlAscending, OrderCustom:=iCustListNum, _
    Key2:=Range("B1"), Order2:=xlAscending, Header:=xlYes, _
    MatchCase:=False、方向:=xlTopToBottom

'掃除
エラー:
Application.DeleteCustomList リスト番号:=iCustListNum

終了サブ

関連情報