Excel VBA シートの移動について

このQ&Aのポイント
  • Excel VBAを使用してシートの移動を行う際に、表示されているウィンドウのみが移動する方法を教えてください。
  • シートの構成は1から10までの番号と『メイン』のシートがあり、『メイン』以外は非表示にしています。現在の方法では、ウィンドウが2つに分割され、『メイン』のシートが表示されたまま移動してしまいます。
  • 使用していないシートを非表示にした状態を保ちつつ、実行したウィンドウのみが移動する方法を知りたいです。
回答を見る
  • ベストアンサー

Excel VBA シートの移動について。

シートの構成は順番に『1』~『10』『メイン』となっているとします。 『メイン』以外は非表示にしています。 しかしメインシートで、番号を指定してマクロを実行すると新しいウインドウを開き指定した番号のシートが表示されるようになっています。 例えばメインシートで『1』を指定して実行すると、ウインドウが2つになり、『1』『メイン』のシートが表示されている状態になります。 問題はここからで、1~10のシートにはマクロでシートセレクトできるようにしているのですが、下記載のマクロを実行すると『メイン』を表示しているウインドウも一緒に表示が変ってしまうことです。 Sub 2に移動() Worksheets("2").Visible = True   '非表示のシートを表示 ActiveSheet.Visible = False      'シートを非表示にする。 Sheets("2").Select End Sub 『1』『メイン』が表示されているときに、『1』で上のマクロを実行すると、『メイン』が表示されているウインドウもシート『2』に移動してしまうことなんです。 これをどうにかして、その実行したウインドウだけ移動するようにしたいのですが、何か方法はないでしょうか? 一応シートの1~10を非表示にせず、表示したままならこの現象は起こらないのですが、どうにかして使用していないシートを非表示にした状態を保ったままやりたいのです。

  • mzakom
  • お礼率38% (129/338)

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

  • ベストアンサー
回答No.7

Sub sheet2() Dim window1 As Window Set window1 = ActiveWindow Sheets("1").Visible = False Sheets("2").Visible = True Sheets("3").Visible = False Sheets("4").Visible = False Sheets("5").Visible = False Sheets("6").Visible = False Sheets("7").Visible = False Sheets("8").Visible = False Sheets("9").Visible = False Sheets("10").Visible = False Application.Windows("test.xlsm:1").Activate Sheets("main").Select If window1.Caption <> "test.xlsm:1" Then Application.Windows("test.xlsm:2").Activate Sheets("2").Select Else Sheets("2").Select End If End Sub ごめんなさいこちらでごぜーやす!!

mzakom
質問者

お礼

できました!! 何度も丁寧な回答ありがとうございますm(_ _ )m

その他の回答 (6)

回答No.6

Sub Sheet2に移動() Sheets("1").Visible = False Sheets("2").Visible = True Sheets("3").Visible = False Sheets("4").Visible = False Sheets("5").Visible = False Sheets("6").Visible = False Sheets("7").Visible = False Sheets("8").Visible = False Sheets("9").Visible = False Sheets("10").Visible = False Sheets("main").Select If ActiveWindow.Caption <> "test.xlsm:1" Then Application.Windows("test.xlsm:2").Activate Sheets("2").Select Else Sheets("2").Select End If End Sub 両方とも切り替わっているのですが、Selectれてないだけですね これでいいと思います

回答No.5

Sub 2に移動()   With ActhiveWindow     Worksheets("2").Visible = True     ActiveSheet.Visible = False     Sheets("2").Select   End With End Sub シート分割してアクティブWindowだけを動かしたいということですね? これでどうですかね?

mzakom
質問者

補足

んー、違うんですよ。 アクティブウインドウにはなっているんですけど、実行したらアクティブじゃない方のウィンドウは再表示したシートに移動しちゃうんですよね。 でもアクティブなウインドウはセレクトしないと移動しないんです。 なんか仕様っぽいですね(・ω・` )

回答No.4

ExcelBook2つ開いて作業しているということですかね? 記述をWorkBook1.WorkSheet("2").Visible = TRUE でも同じ症状出ますかね??

回答No.3

http://officetanaka.net/excel/vba/sheet/sheet06.htm きっとこれの事言っているのですよね?

mzakom
質問者

補足

>マクロのコードで実行するとアクティブになりません。 ウインドウ2でマクロを実行するとウインドウ2では再表示してもアクティブにならないんですが、ウインドウ1ではなぜか再表示したシートがアクティブになるんです。 ブックを2つではなくて、一つのブック内で新しいウインドウを開き、シート別で表示している状態と言う事です。

回答No.2

それでしたら、ステップデバッグしましょ、F8で見ていくか、ブレークポイント置いて走らすかどちらかで、おかしい場所は特定できますので。

mzakom
質問者

補足

回答ありがとうございます。 F8でコードを追ってみたら Worksheets("2").Visible = True   '非表示のシートを表示 のところでなぜか『メイン』シートを表示しているウインドウ1が、『2』に移動します。実行しているのはウインドウ2のシート『1』の場所なのにです・・・ なぜでしょう・・・

回答No.1

原因はSheetが開いた順にシート番号が振られるためです。 この場合、シート名で移動させた方がバグは出にくいですね。 ActiveSheet.Visible = False ここも、メインがアクティブになっているなら、メインが隠れます。 シート名で指定したほうがいいです。

mzakom
質問者

補足

それがシート名で指定しても同じ現象が起こるのです(・ω・` ) あと不明なのですが、ウインドウ2を『メイン』にして、ウインドウ1でシート移動をしたら『メイン』は移動しませんでした。 なぜでしょう・・・・ 原因がさっぱりです

関連するQ&A

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • Excel(エクセル)で非表示シートをVBAで計算するには?

    よろしくお願いします。 エクセルで1つのブックにAシート~Fシートまであるとします。 再計算させると、すべてのシートを再計算してしまうため時間がかかるので、マクロの自動記録を利用して「Aシート→Bシート→Cシート→Dシート→Eシート」と、必要なシートだけを順番に計算させる事で、処理時間短縮をさせる事をする事ができました。 EシートとFシートは表示させておいて、その他のA~Dシートは非表示にしました。 Eシートには、A~Dシートで計算した結果が表示されるようになっています。 ですが、A~Dシートを非表示にして作成したマクロを実行すると、エラーが出てしまい上手くできません。 A~Dシートを非表示にしていても、ブック全体を再計算させる事はできます。 非表示にしたシートをマクロで計算させるには、どのようにしたら良いでしょか? アドバイスをお願い致します。 登録したマクロは下記のようになっています。 Sub 計算() Sheets("Aシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Bシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Cシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Dシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select ActiveWorkbook.PrecisionAsDisplayed = False ActiveSheet.Calculate Sheets("Eシート").Select End Sub

  • エクセルの図形移動で困っています。

    エクセルの図形移動で困っています。 シート2にある図形をシート1にマクロを使って移動(コピー&貼り付け)をしようとしています。 マクロの記録でやった所、以下のような感じになりました。 Sub Macro4() ' ' Macro4 Macro ' ' Sheets("sheet2").Select Selection.Copy Sheets("sheet1").Select Range("N16").Select ActiveSheet.Paste End Sub しかし、なぜか3回程つかうとシート1に貼り付けされなくなります。 原因はシート2の図形をコピーする時に選択されるところがないからではないか?と思い 色々ネットで調べてみたのですが、まだまだ結論が出ていない状態です。 皆様のお力を貸して頂ければと思います。 Sub Macro4() ' ' Macro4 Macro ' ' Sheets("sheet2").Select (たぶんここに"図形1)とか入るのでは??と思っています Selection.Copy Sheets("sheet1").Select Range("N16").Select ActiveSheet.Paste End Sub

  • マクロ実行時、非表示シートを表示させたくない

    ファイル[testBOOK]の中に(sheet1)(sheet2)があり (sheet2)は非表示,ブック保護されています。 (sheet1)にあるマクロAAボタンで ・[図A]を非表示 ・[図B]を表示 ・マクロBBを実行 するようになっています。 --------------------------------------- Sub AA() '≪非表示≫ ActiveSheet.Shapes("図A").Visible = False '≪表示≫ ActiveSheet.Shapes("図B").Visible = True 'ブック保護解除 ActiveWorkbook.Unprotect 'マクロBB実行 Sheets("sheet2").Visible = True Sheets("sheet2").Select Application.Run "testBook.xlsm!BB" ActiveWindow.SelectedSheets.Visible = False 'ブック保護 ActiveWorkbook.Protect End Sub ---------------------------------------- マクロBBとは[sheet2]の中にある ・[図A]を非表示 ・[図B]を表示 です。 上記のマクロを実行させると(sheet2)が瞬間的に表示されてしまうのですが、 これを表示させないようにすることはできないでしょうか?

  • VBAで全シートを一括選択したい

    VBAを勉強し始めたばかりの初心者です。 エクセルで非表示に切り替えられているシートを 一括で表示に切り替えできるマクロを作成しているのですが 「全シートの選択」方法がわかりません。 ひとつずつのシートなら 下記のマクロでうまくいくのですが・・・ 2行目の「("Sheet3")」を全シートに切り替えれば うまくいくかなって思っているのですけど 方法がわかりません。 よい方法をご存知の方、よろしくご教授願います。 Sub Macro1() Sheets("Sheet3").Visible = True Sheets("Sheet1").Select End Sub

  • 別なシートを開いている状態で、セル移動を移動したい

    エクセルのマクロについて sheet1を開いている状態で、sheet2でセルの移動がしたいのですが。 現在下記コードを入れいています。 ----------------------------------------- Private Sub CommandButton1_Click() Application.ScreenUpdating = False Sheets("Sheet2").Select Cells(ActiveCell.Row + 1, "a").Select Sheets("Sheet1").Select Application.ScreenUpdating = True End Sub ----------------------------------------- Sheet2を開いている状態だと、思った通りセルを移動してくれますが、 Sheet1を開いている状態ですと、Sheet1上で動いているのですが。 このような事はマクロでは無理でしょうか? どなたか、教えて頂けますか?

  • エクセル VBA SHeetの隠し

    エクセルマクロでThisWorkbookの 記述に下記のようにしました! つまりSheet2を隠す為にしました! Sheet2はマスターなのでそこを使用者に 触らせないように!と思いしましたが・・・ いざ、ファイルを開くと{マクロを有効にする} をクリックしすと{編集の為にロックされています} と表示され読み取り専用になってしまいます! 記述が間違っているのでしょうか? しかもファイルを閉じるとエラー表示され エラーを報告を送信しますか?と必ず表示されます! 他のファイルは問題なく開いたり閉じたり出来ます。 やはり、記述の問題なのでしょうか? 教えて下さい! Private Sub Workbook_Activate() Dim Msg As String, Sn As Variant Sheets("入力").Visible = True Sheets("Sheet2").Visible = False Sheets("グラフ").Visible = True Sheets("入力").Activate UserForm1.Hide End Sub

  • エクセルのマクロの記述について

    VBA初心者ですのでどうか詳しく教えてください。下記のマクロをエクセルで組んだのですが・・・ -------------------------------------------------------------------- Sub hideworksheets() Worksheets("sheet1").Visible = False End Sub Sub ボタン_Click() ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub ------------------------------------------------------------ 1.上記設定で"sheet5"という別シートにボタンを設置した場合、このボタンを実行すると、シート1~4のほかにシート5まで印刷されてしまいます。シート5を印刷したくない場合のVBAの記述について教えてください。 2.「Sub hideworksheets()  Worksheets("sheet1").Visible = False    End Sub」    の箇所で、シート1を非表示にしたいのですが、このマクロを実行時、「Sub ボタン_Click()」以下のマクロを実行しようとすると、「実行時エラー1004 worksheeクラスのselectメソッドが失敗しました」のエラーがでてしまいます。シート1を非表示にし、無事印刷のマクロを実行する為の記述を教えてください。

  • エクセル・マクロでグラフを最背面に移動させたい

    エクセルのグラフを3つピッタリと重ねて表示しています 後ろのグラフを選択する時「最背面に移動」させてますが これをマクロにしたいです とりあえずマクロの記録でしてみたら Sub Macro1() ActiveSheet.ChartObjects("グラフ 7").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 5").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.ChartArea.Select Selection.ShapeRange.ZOrder msoSendToBack ActiveWindow.Visible = False Windows("Book1.xls").Activate Range("A1").Select End Sub と出来たのですが、マクロの実行そしてみると3列目の Selection.ShapeRange.ZOrder msoSendToBack の所で、 「実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしてません」 となってしまいます、どうすればよいのでしょう ボタンを押したら最前面のグラフが最背面に移動するようにしたいのですが難しいのでしょうか

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

専門家に質問してみよう