
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
すいかは発酵しても食べられるか。
-
スイカが炭酸の味!
-
今白いちじくを食べようとして2...
-
7文字以上のフルーツをできるだ...
-
スーパーで買った1つ300円の梨...
-
「であり」と「であって」の使...
-
こんなスイカは食べても大丈夫...
-
教えてください!!
-
スイカは腐るとどんな味がしま...
-
中黒「・」か読点「、」か?
-
ラズベリーの種の抜き方を教え...
-
【ぶどう】 友人からデラウェア...
-
北海道では、見かけないもの
-
切ったら梨の真ん中が茶色黒く...
-
何という名前の虫か教えてください
-
ブルーベリージャムに種?
-
サフランの賞味期限
-
インドの国旗とアイルランドの...
-
スポンジケーキってどのくらい...
-
JRE POINTサイトがスイカ登録す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
皆さんはステーキと言えば何を...
-
7文字以上のフルーツをできるだ...
-
「であり」と「であって」の使...
-
ラズベリーの種の抜き方を教え...
-
すいかは発酵しても食べられるか。
-
煮物こんにゃくの冷凍保存について
-
何という名前の虫か教えてください
-
中黒「・」か読点「、」か?
-
スイカが炭酸の味!
-
スーパーで買った1つ300円の梨...
-
【ぶどう】 友人からデラウェア...
-
4歳の子供がさくらんぼを種ご...
-
とうもろこし 粒の根元がオレ...
-
教えてください!!
-
北海道では、見かけないもの
-
こんなスイカは食べても大丈夫...
-
ブルーベリージャムに種?
-
スイカは腐るとどんな味がしま...
-
今白いちじくを食べようとして2...
-
さくらんぼの致死量が2個ってホ...
おすすめ情報