- ベストアンサー
Excelで並べ替え
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関数なら、D列をワークエリアに使います。 D2: =INT(IFERROR(INDEX(D$1:D1,MATCH(B2,B$1:B2,0)),ROW()))+ROW()/1000 下へコピペ。 G2: =INDEX(B:B,MATCH(SMALL($D:$D,ROW()-1),$D:$D,0)) 右下へコピペ。 VBA でもD列をワークエリアに使います。 Option Explicit ' Sub Macro1() Dim RInp As Long Dim What As String ' Application.ScreenUpdating = False ' For RInp = 2 To Cells(Rows.Count, "B").End(xlUp).Row What = Cells(RInp, "B") Cells(RInp, "D") = Application.Match(What, [B:B], 0) Next RInp Range("B2:D" & RInp - 1).Sort Key1:=[D2] [D:D].ClearContents End Sub
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
データ例 B1:C12 質問画像の通り。 種類 データ 東京01 E 東京01 A 神奈川01 B 神奈川01 I 東京02 C 東京03 D 千葉AA F 千葉AA H 千葉BB G 千葉BB J 千葉BB K ーー B1:B12範囲指定して、 データーフィルターー詳細設定ー指定した範囲ー抽出する範囲ーF1:F12ー重複するレコードは無視する。 F列に 種類 東京 01 神奈川 01 東京 02 東京 03 千葉 AA 千葉 BB B列の出現順を保存しつつ、ユニークなデータを出す ーー B2セルに 関数 =VLOOKUP(B2,$F$2:$G$7,2,FALSE) を入れて、下方向に式複写。 結果 種類 データ インデックス 東京01 E 1 東京01 A 1 神奈川01 B 2 神奈川01 I 2 東京02 C 3 東京03 D 4 千葉AA F 5 千葉AA H 5 千葉BB G 6 千葉BB J 6 千葉BB K 6 並び替えで範囲はB2:C12 キーは 第Ⅰが「インデックス」、第2キーが「種類」 結果 種類 データ インデックス ー>B,C,D列 東京01 E 1 東京01 A 1 神奈川01 B 2 神奈川01 I 2 東京02 C 3 東京03 D 4 千葉AA F 5 千葉AA H 5 千葉BB G 6 千葉BB J 6 千葉BB K 6 D列は不要だろうから、D列削除。 上記をVBA化も易しいが、関数を得意な人は、関数でもできると思う
お礼
ありがとうございます。 リストの作業列に=MATCH(B2,B:B,0)+COUNTIF(B$2:B2,B2)/100 と入れて、昇順で並び替えできました。
- msMike
- ベストアンサー率20% (364/1804)
お礼
ありがとうございました。とても勉強になりました。