• ベストアンサー

各行をソートするVBAについて

図のようにランダムに数値が並んでいるデータが約600行くらいあります。その各行にA列を除く列で、数値の小さい順に並べるVBAのようなものがあればと思って質問させていただきました。 詳しい方からのアドバイスをいただけますと幸いです。よろしくお願いします。

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

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

こんにちは! 一例です。 Sub 並び替え() Dim i As Long, j As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row j = Cells(i, Columns.Count).End(xlToLeft).Column If j > 1 Then Cells(i, 2).Resize(i, j - 1).Sort key1:=Cells(i, 1), order1:=xlAscending, _ Header:=xlYes, Orientation:=xlLeftToRight End If Next i End Sub こんな感じではどうでしょうか?m(_ _)m

jugyou1
質問者

お礼

ご回答ありがとうございます。これはExcel2007以降で作動するでしょうか?よく分からず申し訳ありません。

jugyou1
質問者

補足

excel2003でプログラム動きました。失礼しました。ありがとうございました。大変参考になりました。2回答ともとても参考になり甲乙つけがたいですので最初に回答を下さりましたところでベストアンサーにさせていただきます。

その他の回答 (1)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.2

シートタブを右クリックして、コードの表示を選びます。 そこに、以下のコードを貼り付けてください。 マクロを動かすときは、B列,C列などををセレクトとしてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim t_Row As Long, t_Column As Long Dim 最終行 As Long If Target.Count <> Rows.Count Then Exit Sub If Target.Columns.Count > 1 Then Exit Sub t_Column = Target.Column If t_Column = 1 Then Exit Sub If t_Column > 14 Then Exit Sub 最終行 = Cells(Rows.Count, 1).End(xlUp).Row Application.EnableEvents = False If Cells(1, t_Column).Value < Cells(最終行, t_Column).Value Then Range("A1:N" & 最終行).Sort Key1:=Cells(1, t_Column), Order1:=xlDescending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Else Range("A1:N" & 最終行).Sort Key1:=Cells(1, t_Column), Order1:=xlAscending, Header:=xlNo, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin End If Cells(1, t_Column).Select Application.EnableEvents = True End Sub

jugyou1
質問者

お礼

ありがとうございました。大変参考になりました。また分からないことがありましたらアドバイスをいただけますと幸いです。よろしくお願いします。