• ベストアンサー

Excel VBAのソートについて

Excel2003です。 現在、A列に1~5の数字がランダムで200行ほど入力されています。 このA列をキーとして A:1 1 A:2 2 A:3 3 A:4 4 A:5 5 A:6 1 ・ ・ ・ のようにソートすることは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 横からお邪魔します。 データは1行目からあるとします。 No.1さんと全く同じやり方になりますが・・・ Sub Sample1() Dim endRow As Long Application.ScreenUpdating = False Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlNo endRow = Cells(Rows.Count, 1).End(xlUp).Row Range("A:A").Insert With Range(Cells(1, 1), Cells(endRow, 1)) .Formula = "=COUNTIF(B$1:B1,B1)" .Value = .Value End With Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlNo Range("A:A").Delete Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

その他の回答 (2)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.2

> >同じ数字に順番を振る > のコードを教えて頂けると助かります・・・ VBA使わずに手作業なら、B列の式を、 B1は1 B2以降の式は、左上のセル(A1)の数+1=左のセル(A2)ならば、上のセル(B1)の数+1、そうでなければ1 とかの、 B2:=IF(A1+1=A2, B1+1, 1) を下向きにコピー。 このまま並べ替えすると式の条件(1つ上とか)が変わってしまうので、B列をコピー、値として貼り付け。 で以降の操作とか。 -- そういう事を何千回も繰り返すのなら、VBAにするか、アルゴリズムなんかを見直す必要はありますが、1回とか数回程度しか操作しないのなら、こういう方法で十分だと思います。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

小さい順のソートでなくて、1234512345123…の順序に並べ替えたいって事でしょうか? 3 5 2 4 4 1 2 1 だったとして、 ・一度小さい順にする 1 1 2 3 4 4 5 ・同じ数字に順番を振る 1 1 1 2 2 1 3 1 4 1 4 2 5 1 ・2つの条件で並べ替え 1 1 2 1 3 1 4 1 5 1 1 2 4 2 とかでは?

karubi_syogun
質問者

補足

そうです!そんな感じです。 >同じ数字に順番を振る のコードを教えて頂けると助かります・・・

関連するQ&A

専門家に質問してみよう