[[20140304143816]] 『並び換えを繰り返し行う場合のマクロ』(りりこ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『並び換えを繰り返し行う場合のマクロ』(りりこ)

お世話になっています。
EXCELが2010から2013になり、今まで並び替えを繰り返す場合はF4キーを使っていたのですが、2013は使えなくなりました。
それでマクロを組もうとしたのですが、「範囲指定をしたところ」をというのがわかりません。

("F3:F9")が指定したところなのですが、ここを今指定しているところという風にするにはどうすればよいのか教えてください。
よろしくお願いします。

Sub Macro1()
'
' Macro1 Macro
'

'

    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Add Key:=Range("F3:F9"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet5").Sort.SortFields.Add Key:=Range("I3:I9"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet5").Sort
        .SetRange Range("A3:P9")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 この影響でしょうか。
http://support.microsoft.com/kb/2761244/ja

 単純に選択セル範囲をあらわすオブジェクトは Selection ですが
 キー以外のソート範囲は固定でよいのですか?

(Mook) 2014/03/04(火) 15:07


ありがとうございます。
調べたときにそこが出ましたのでF4キーを使うのはあきらめてマクロでと考えました。

1 A得意先 
2 日付 コード番号 品名 ・・・・
3 日付 コード番号 品名 ・・・・
4 B得意先 
5 日付 コード番号 品名 ・・・・
6 日付 コード番号 品名 ・・・・
7 日付 コード番号 品名 ・・・・
8 日付 コード番号 品名 ・・・・
という風に行はランダムになっているので必要行を先に範囲指定してマクロボタンクリックと考えています。
ソート範囲はその都度固定?となります。

(りりこ) 2014/03/04(火) 15:39


 ソートキーが一つなら選択範囲をキーにして、選択した範囲の行を並べ替えられる
 気がしますが、サンプル提示のコードにはキーが二つ指定されています。
 そこはどうするのでしょうか。

 とりあえず、キーが一つのサンプルです。

 Sub Sample()
    ActiveSheet.Sort.SortFields.Clear

    ActiveSheet.Sort.SortFields.Add Key:=Selection, _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Selection.EntireRow
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 End Sub

(Mook) 2014/03/04(火) 16:05


私のやり方が間違っていると思いますが、このまま貼り付けて試したら並べ替えの参照が正しくありませんとでました。

後出しばかりですが、F列に品番I列に色番があるのでキーが二つ?になるのですが、2個マクロを作ってもいいかな。F用とI用でと考えています。
なんだか前のより、難しくなっていますね。

(りりこ) 2014/03/04(火) 16:35


 まずエラーの原因を解析する必要がありますが、

 複数キー対応の例です。
 F3:F9 を選択後、Ctl キーを押しながら I列のセル(行はどこでも可:例えばI2)
 をおして(3列以上の指定も可)、マクロを実行してください。

 こちらではこれでF列とI列をキーにして、3〜9行をソートしています。
 最初に選んだ範囲の行範囲がソート範囲です。

 Sub 列指定ソート()
    ActiveSheet.Sort.SortFields.Clear

    Dim addressArray
    Dim strAddress
    Dim selectRange As Range

    Dim baseRange As Range
    If InStr(Selection.AddressLocal, ",") > 0 Then
        addressArray = Split(Selection.AddressLocal, ",")
        Set baseRange = Range(addressArray(0))
        For Each strAddress In addressArray
            Set selectRange = Range(strAddress)
            ActiveSheet.Sort.SortFields.Add Key:=Intersect(baseRange.EntireRow, selectRange.EntireColumn), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        Next
    Else
        Set baseRange = Selection
        ActiveSheet.Sort.SortFields.Add Key:=Selection, _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End If

    With ActiveSheet.Sort
        .SetRange baseRange.EntireRow
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 End Sub
(Mook) 2014/03/04(火) 17:49

Mookさん

できました!!
ありがとうございます。
昨日は挫折してしまいましたが、本日落ち着いてやってみたところ、列指定ソートでばっちりです。
最初はできなかったのですが、範囲指定を今まで通り行番から選択していたことが原因でした。
うれしいです。これで並び替えが、一回一回選択しなおさなくてよくなります。
本当にありがとうごさいました。
(りりこ) 2014/03/05(水) 12:00


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.