• ベストアンサー

ExcelのVBマクロを、バックグラウンドで動かしたいのです。

ExcelのVBマクロを、バックグラウンドで動かしたいのです。 sheet1のセルに対して操作を行うマクロをMaacroAとします。このマクロをsheet2やsheet3など複数のsheetから呼び出してsheet1を操作したいのですが、どうしても画面がsheet1に移ってしまいます。 Application.ScreenUpdating を使ってもマクロ終了時にsheet1の画面になってしまいます。 どのようにしたらいいのでしょうか?

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

>Worksheets("sheet1").Range("A4:W144").Select 上記、補足で提示したコードの直前には、 Worksheets("Sheett1").Select(Activate)がありますよね。 そうでないと Worksheets("sheet1").Range("A4:W144").Select こんなことはできませんから。 で、回答。 Worksheets("Sheet1").Select  Worksheets("sheet1").Range("A4:W144").Select の2行を削除して以下のようにSortだけにする '---------------------------------------------------- Worksheets("sheet1").Range("A4:W144").Sort _   Key1:=Worksheets("sheet1").Range("a4"), _   Order1:=xlAscending, Header:=xlGuess, _   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _   SortMethod:=xlPinYin, DataOption1:=xlSortNormal '----------------------------------------------------- ●点要点● 1.Sortの範囲をシートを明示して直接指定 2.Keyもどのシートのセルなのか分かるようにシート名を付加する ソートに限らず他のシートから、Sheet1を扱う場合は、 Selectはしないで、シート名を付加すればいいということです。 以上です。

ryou4649
質問者

お礼

動きました。ありがとうございます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>どうしても画面がsheet1に移ってしまいます sheets("sheet1").select sheets("sheet1").activae というようなコードがあれば確実にアクティブになります。 どのようなコードで何をあいているのかわかりませんが、 Sheets("sheet2").Range("A1").Copy Sheets("sheet1").Range("A1") activesheet.Range("A1").Copy Sheets("sheet1").Range("A1") With Sheets("sheet1") Sheets("sheet2").Range("A1").Copy .Range("A1").Paste activesheet.Range("A1").Copy .Range("A1").Paste End With など、構文で実行シートを指定して、active / select などのコードを含まないコードを書くことでです。 >Application.ScreenUpdating を使ってもマクロ終了時にsheet1の画面になってしまいます。 これは、実行中のシート更新をしないためのオプションですから、構文中でどこかのシートをアクティブにしていれば、処理終了後に最後にアクティブにしたシートが表示されるのは当然の処理です。

ryou4649
質問者

補足

>Sheets("sheet2").Range("A1").Copy >など、構文で実行シートを指定して 実はソートのマクロなんですが… Worksheets("sheet1").Range("A4:W144").Select Selection.Sort Key1:=Range("a4"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal では、だめでした。

関連するQ&A