- ベストアンサー
Excel VBAでのデータ並び替えの問題について
- Excel 2003のVBAのsort機能を使用して、名前、品質、値段の順にデータを並び替えたいがうまくいかない。
- 最初に記録されたVBAコードではうまくいかないため、オブジェクトのマクロで修正したが、それでもうまくいかない。
- いくつかの方法を試してみたが、どれもうまくいかなかった。他のサイトを調べても解決策が見つからない。
- みんなの回答 (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 でもよいのですがムダに選択しないようにしました。
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
とりあえず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の指定などで、マクロ記録と食い違う点や、 うまくいかない点の修正でだいぶ、詰まっています。
お礼
ありがとうございました。 思い通りの操作ができるようになりました。 With Worksheets(1) .Cells(1, 1).CurrentRegion.Select の)「CurrentRegion」が肝ですね。 .Cells(1, 1).CurrentRegion.AutoFilter これも、便利ですね。 どこかのHPで、オートフィルタを掛けたい範囲を選択して、 並び替えるという記述があり、色々と試行錯誤していたのですが、 このような記述も発見し Excel 2003のヘルプにはアクティブセル領域について、 「選択しているセルまたはセル範囲から、すべての方向の最初の空白行または空白列までの領域が、アクティブ セル領域になります。」 という記述があります。 オートフィルタの範囲指定を簡潔にできるようになりました。 ありがとうございました。 アクティブセル領域がこのような働きを持つことはとても勉強になりました。ありがとうございました。