- ベストアンサー
excelVBAで全てのsheetで同じ範囲を表示
エクセルVBAにて、3つのsheet全てで同じ範囲を表示させるには どう書けば良いのでしょうか? 例えば、ハイパーリンク機能を使ってA100:A150を選択させれば 開いたシート上にA100:*150辺りを表示できますが、マクロでは 選択はされるものの希望に合う表示が成されません(記録マクロ試行) これが可能ならば3つのsheet全てで同じ範囲を表示させたいのです。 (各シートを選択すれば同じ位置が表示されている) お手数おかけしますが、よろしくご教示下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エクセルでは,開いていないシートの「表示範囲」を操作出来ません。 その裏返しとして,どうしても次のような細工が必要になります。 前回回答のマクロを消去し,ふつーに標準モジュールに: sub macro1() dim s0 as worksheet dim s as worksheet set s0 = activesheet ’application.screenupdating = false for each s in worksheets application.goto s.range("A100"), true next ’application.screenupdating = true s0.activate end sub
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
若しくは合わせ技で,ThisWorkbookシートに下記2つを記載します。 private sub workbook_Open() application.goto activesheet.range("A100"), true end sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) application.goto sh.range("A100"), true End Sub
お礼
初心者の私で遊んでいませんか?(笑 これもまたスゴいです! 自己作成ではありませんが、この面白さが次に繋がると思います。 こちらは理解できませんが、今後の参考にさせて頂きます。 ありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
たとえばブックのThisWorkbookシートに,下記をコピー貼り付けてみます。 Dim preS As Worksheet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim s As String On Error Resume Next Application.EnableEvents = False Application.ScreenUpdating = False preS.Activate s = ActiveWindow.VisibleRange.Cells(1).Address Application.Goto Sh.Range(s), True Application.ScreenUpdating = True Application.EnableEvents = True End Sub Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) Set preS = Sh End Sub
お礼
初め、読んでも実行しても意味が解りませんでしたが、、、 なんだか思わず笑ってしまう程の魔法にかけられたような物スゴい 機能で初心者の私には宝物的構文ですが、雲泥レベルで置き去り にされた感が。。。 でもこれはこれで有り難く頂戴いたします。 贅沢ですがもう少し優しい(簡単な)方法はないでしょうか?(汗 実行すれば、各シートで同じ指定範囲が表示(固定)できていば それだけでいいのです。 もしかして書き方が悪かったでしょうか? ス、スミマセン。 理解して次へ進みたいのでもう少し放置してみます。 「おまえにはまだ早い」かも知れませんので明日には閉じます。
お礼
何度も回答ありがとうございます。 待ってました!の回答でした。 しかし、読んで理解はできても自分では書けませんので 今後の教材としても使わせて頂きます。