- ベストアンサー
UsedRangeを使ってソートすることは可能?
- ExcelのUsedRangeを使用してデータをソートすることが可能ですか?
- VBAでオートフィルタをかけつつ、UsedRangeを使用して昇順にデータを並び替える方法が知りたいです。
- UsedRangeを使ってデータをフィルタリングし、A列で昇順に並び替えるVBAの作成方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 なぜ、UsedRangeを使わなくてはならないのでしょうか? オートフィルタは、一種のデータテーブルが出来ているのですから、そのテーブルの認識には、私は、UsedRangeは使いません。 エラーになるのは、UsedRangeの親オブジェクトがないからです。 >Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)) 列の間がないのなら、このような使い方はしませんが、あえて書くなら、このようになります。 RangeとCellsは、親オブジェクトの関係がないので、2つは繋がっていません。エラーの可能性を含んでいます。 With ActiveSheet '←親オブジェクト .Range("A1", .Cells(1, Columns.Count).End(xlToLeft)).AutoFilter .UsedRange.Sort Key1:=Cells(1, 1), Order1:=xlAscending End With 私なら、このような書き方をします。 Sub Sample1() With ActiveSheet If .AutoFilterMode = False Then .Cells(1, 1).AutoFilter 'データの左端上のセル End If .AutoFilter.Range.Sort Key1:=.Range("A1"), Order1:=xlAscending, _ Header:=xlYes End With End Sub
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
sub macro1() range("A:C").autofilter activesheet.autofilter.range.sort key1:=range("A1"), order1:=xlascending, header:=xlyes end sub みたいな。 #参考 >UsedRangeでコンパイルエラーになるのですが activesheet.usedrange のように使うモノです。
お礼
UsedRange.Sort ではなく ActiveSheet.AutoFilter.Range.Sort とやればよかったのですね。 できました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにしてはどうでしょう。 Sub さんぷる() Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter UsedRange.Sort Key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes End Sub
お礼
やっぱりUsedRangeがエラーになってしまいます。
- n-jun
- ベストアンサー率33% (959/2873)
オートフィルタをかけた状態では 並び替えが出来ないんじゃないかな? ⇒並び替えをしてからフィルタをかけるとかなら いけるんじゃないか?
お礼
並び替えが原因なのですか。
お礼
UsedRangeを使えば列や行が増えても 対応できると思ったからです。 UsedRangeがエラーになるのは親オブジェクトがないからと言う理由なのですね。 スマートなコード、ありがとうございます。