Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10790 / 13644 ツリー ←次へ | 前へ→

【19848】非アクティブなシートでのソート mickeypapa 04/11/17(水) 22:26 質問[未読]
【19852】Re:非アクティブなシートでのソート kazu 04/11/17(水) 23:10 回答[未読]
【19853】Re:非アクティブなシートでのソート [名前なし] 04/11/17(水) 23:28 発言[未読]
【19878】Re:非アクティブなシートでのソート mickeypapa 04/11/18(木) 13:06 お礼[未読]
【19877】Re:非アクティブなシートでのソート mickeypapa 04/11/18(木) 13:04 お礼[未読]

【19848】非アクティブなシートでのソート
質問  mickeypapa WEB  - 04/11/17(水) 22:26 -

引用なし
パスワード
   ユーザーフォームのコマンドボタンを押すと
非アクティブなシートにデータを書き込むように
していますが、(メインのデータを書き込むシートがアクティブになっている)
With Worksheets("Sheet2")
  .Range("A65536").End(xlUp).Offset(1, 0)=・・・・・・
  .・・・・・・・
End With
と非アクティブなシートに書き込んだ後に、フリガナでソートをしておりますが、
ソートのコードがマクロの記録で生成されたものを使っているので、
Worksheets("Sheet2").Range("F2", Range("J65536").End(xlUp)).Select
(上のセル範囲指定のコードは自分で変更してます。)
Selection.Sort Key1:=Range("H2"), Order1:=xlAscending, Key2:=Range("J2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
xlSortNormal, DataOption2:=xlSortNormal
(Key2 は1234などの数字です。)
ソートする為にそのシートを選択しなければならず、
Application.ScreenUpdating = False
Application.ScreenUpdating = True でソートする間と、元のシートに
戻るまで、画面の更新を停止しております。
このようなことをせずに、非アクティブなシートをソートする方法は
あるのでしょうか?別なシートをアクティブにして、処理をして、また元のシートに戻るというのは、どうにも無駄な動作のように思われるので、アドバイスを
宜しくお願い致します。

【19852】Re:非アクティブなシートでのソート
回答  kazu  - 04/11/17(水) 23:10 -

引用なし
パスワード
   まず、Rangeの範囲指定はSheetを指定しない限りはActivesheetを対象に行われると言う事ですね。

ですので、どのシートを対象にソート処理を行うかを明確にすれば可能です。


以下は参考程度にどうぞ。

Set Obj_Sht = Worksheets("Sheet2")
Obj_Sht.Range("F2",Obj_Sht.Range("J65536").End(xlUp)) _
.Sort Key1:=Obj_Sht.Range("H2"), Order1:=xlAscending, Key2:=Obj_Sht.Range("J2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
xlSortNormal, DataOption2:=xlSortNormal


間違ってたらすみません。

【19853】Re:非アクティブなシートでのソート
発言  [名前なし]  - 04/11/17(水) 23:28 -

引用なし
パスワード
   さらにこうしてみてはいかがかと。
ちなみに規定値は省略しちゃったけど。

With Worksheets("Sheet2")
  .Range("F2", .Range("J65536").End(xlUp)).Sort _
  Key1:=.Range("H2"), Key2:=.Range("J2"), Header:=xlGuess, _
  OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With

※Rangeの前に「 . 」をつけるのを忘れないこと。

【19877】Re:非アクティブなシートでのソート
お礼  mickeypapa WEB  - 04/11/18(木) 13:04 -

引用なし
パスワード
   ▼kazu さん:
有り難うございます。
シートをSelectさえしなければ、可能かと思いつつ
Worksheets("***").Rangeと書くとエラーが起きてしまい、
困っておりましたが、何とか思った通りの動作をするので
これで良いかと妥協しておりました。お陰で動作が変わりました。

【19878】Re:非アクティブなシートでのソート
お礼  mickeypapa WEB  - 04/11/18(木) 13:06 -

引用なし
パスワード
   ▼[名前なし] さん:
有り難うございます。Withステートメントで
まとめることが出来ました。
今後とも宜しくお願い致します。

10790 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free