![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
EXCEL 2003 のVBAのsortにおいて、解決できなくて困って
おります。
名前,色,産地,品質,味,値段,重さ,
りんご,赤,青森,10,10,500,100
みかん,黄,和歌山,10,10,300,50
すいか,緑,群馬,10,8,2000,1000
メロン,黄緑,青森,10,8,2500,500
いちじく,赤,鹿児島,8,8,200,100
名前、品質、値段の順に並びかえたいと思い、
excelのVBAの記録でオートフィルタ後に
並び替えを行ったところ下記のコードが記録されました。
Sub Macro28()
Cells.Select
Selection.AutoFilter
Selection.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("D2"), Order2:=xlAscending, _
Key3:=Range("F2"), Order3:=xlAscending, _
Header:=xlYes, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, _
DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
end sub
ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い
たいように訂正)みると作動しません。
Private Sub CommandButton1_Click()
worksheets(1).Select
Selection.AutoFilter
Selection.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("D2"), Order2:=xlAscending, _
Key3:=Range("F2"), Order3:=xlAscending, _
Header:=xlYes, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
End Sub
watch 式では 3行目までは
worksheets(1).Select = TRUE ですし
Selection.AutoFilter = TRUE となっているのですが、
sortの反応が分からない状況です。
Selection.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("D2"), Order2:=xlAscending, _
Key3:=Range("F2"), Order3:=xlAscending, _
Header:=xlYes, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
この部分が問題なのかと考えております。
ネットで調べて
worksheets(1).RANGE("A1:G6").Select
Selection.sort……
とか
worksheets(1).RANGE("A1:G6").sort
とかも試してみたのですが、だめでした。
sort を使用するときにselectionとの相性や、
rangeとの兼ね合いで決まり等があるのでしょうか。
色々なサイトを回ってはいるのですが、ちょっと解決
にいたることができません。
どなたか、ご教授いただけると幸いです。
No.2ベストアンサー
- 回答日時:
#01です。
読み直したら別シートに配置したボタンから起動しているようですね。すると>Key1:=Range("A2"),
は起動元のシートを指してしまっています。だからエラーになっているのではないかと思います。以下ではどうでしょう。
Private Sub CommandButton1_Click()
With Worksheets(1)
.Cells(1, 1).CurrentRegion.AutoFilter
.Cells(1, 1).CurrentRegion.Sort _
Key1:=.Range("A2"), Order1:=xlAscending, _
Key2:=.Range("D2"), Order2:=xlAscending, _
Key3:=.Range("F2"), Order3:=xlAscending, _
Header:=xlYes
End With
End Sub
.Cells(1, 1).CurrentRegion は .Cells でもよいのですがムダに選択しないようにしました。
ありがとうございました。
思い通りの操作ができるようになりました。
With Worksheets(1)
.Cells(1, 1).CurrentRegion.Select
の)「CurrentRegion」が肝ですね。
.Cells(1, 1).CurrentRegion.AutoFilter
これも、便利ですね。
どこかのHPで、オートフィルタを掛けたい範囲を選択して、
並び替えるという記述があり、色々と試行錯誤していたのですが、
このような記述も発見し
Excel 2003のヘルプにはアクティブセル領域について、
「選択しているセルまたはセル範囲から、すべての方向の最初の空白行または空白列までの領域が、アクティブ セル領域になります。」
という記述があります。
オートフィルタの範囲指定を簡潔にできるようになりました。
ありがとうございました。
アクティブセル領域がこのような働きを持つことはとても勉強になりました。ありがとうございました。
No.1
- 回答日時:
とりあえず2行目の
>worksheets(1).Select
を
Worksheets(1).Cells.Select
にしたらどうでしょう。
マクロ記録で作成したコードは無駄なSelectが多く含まれるので、それを見直す方がよいのですが、それは挑戦してみてください。
ご返信ありがとうございます。
>とりあえず2行目の
>>worksheets(1).Select
>を
>Worksheets(1).Cells.Select
>にしたらどうでしょう。
やはりwatch式ではWorksheets(1).Cells.Select = TRUE
となっておりまして、画面でも全セル選択状態になっております。
ので、問題ないと思われますが、その後のソート指定がよくないのか
ソートが行われません。
>マクロ記録で作成したコードは無駄なSelectが多く含まれるので、それを?>見直す方がよいのですが、それは挑戦してみてください。
RANGEの指定や、selectの指定などで、マクロ記録と食い違う点や、
うまくいかない点の修正でだいぶ、詰まっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) Excel_マクロ_現在開いているシートにマクロを実行したいです 1 2023/02/14 23:54
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) ローマ字、ハイフン付きの並び替え ローマ字抽出方法 Excelマクロ 4 2022/04/01 14:10
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハーブソルトを代用できるもの...
-
7文字以上のフルーツをできるだ...
-
何という名前の虫か教えてください
-
エクセル 同名の場合はB列にC...
-
Excel MATCH関数で検索範囲内...
-
中黒「・」か読点「、」か?
-
とうもろこし 粒の根元がオレ...
-
Excelでの全通りの組み合わせ出...
-
4歳の子供がさくらんぼを種ご...
-
煮物こんにゃくの冷凍保存について
-
ラズベリーの種の抜き方を教え...
-
パイナップルにたかる虫
-
ブルーベリージャムに種?
-
教えてください!!
-
スイカは腐るとどんな味がしま...
-
梶井基次郎の檸檬
-
スイカが炭酸の味!
-
さくらんぼに似ているが、さく...
-
国産ブルーベリーのほうがいい?
-
スーパーで買った1つ300円の梨...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
7文字以上のフルーツをできるだ...
-
ハーブソルトを代用できるもの...
-
4歳の子供がさくらんぼを種ご...
-
教えてください!!
-
筍の上の部分が緑色になってい...
-
ラズベリーの種の抜き方を教え...
-
中黒「・」か読点「、」か?
-
さくらんぼを塩水で洗うのは?
-
Excelでの全通りの組み合わせ出...
-
Excel MATCH関数で検索範囲内...
-
スポンジケーキってどのくらい...
-
煮物こんにゃくの冷凍保存について
-
梶井基次郎の檸檬
-
メロンとヨーグルトは合わない...
-
パイナップルにたかる虫
-
さくらんぼに似ているが、さく...
-
ふにゃふにゃになったキウイっ...
-
パイナップル果汁はなぜ泡立ち...
-
「であり」と「であって」の使...
-
エクセルで数字を入力したら文...
おすすめ情報