[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『並び換えを繰り返し行う場合のマクロ』(りりこ)
お世話になっています。
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
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
できました!!
ありがとうございます。
昨日は挫折してしまいましたが、本日落ち着いてやってみたところ、列指定ソートでばっちりです。
最初はできなかったのですが、範囲指定を今まで通り行番から選択していたことが原因でした。
うれしいです。これで並び替えが、一回一回選択しなおさなくてよくなります。
本当にありがとうごさいました。
(りりこ) 2014/03/05(水) 12:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.