• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UsedRangeを使ってソートすることは可能?)

UsedRangeを使ってソートすることは可能?

このQ&Aのポイント
  • ExcelのUsedRangeを使用してデータをソートすることが可能ですか?
  • VBAでオートフィルタをかけつつ、UsedRangeを使用して昇順にデータを並び替える方法が知りたいです。
  • UsedRangeを使ってデータをフィルタリングし、A列で昇順に並び替えるVBAの作成方法を教えてください。

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

  • ベストアンサー
回答No.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

xmwksmyick2
質問者

お礼

UsedRangeを使えば列や行が増えても 対応できると思ったからです。 UsedRangeがエラーになるのは親オブジェクトがないからと言う理由なのですね。 スマートなコード、ありがとうございます。

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

sub macro1() range("A:C").autofilter activesheet.autofilter.range.sort key1:=range("A1"), order1:=xlascending, header:=xlyes end sub みたいな。 #参考 >UsedRangeでコンパイルエラーになるのですが activesheet.usedrange のように使うモノです。

xmwksmyick2
質問者

お礼

UsedRange.Sort ではなく ActiveSheet.AutoFilter.Range.Sort とやればよかったのですね。 できました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のようにしてはどうでしょう。 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

xmwksmyick2
質問者

お礼

やっぱりUsedRangeがエラーになってしまいます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

オートフィルタをかけた状態では 並び替えが出来ないんじゃないかな? ⇒並び替えをしてからフィルタをかけるとかなら いけるんじゃないか?

xmwksmyick2
質問者

お礼

並び替えが原因なのですか。

関連するQ&A