• ベストアンサー

VBAの本を複数読んで見たけど解りません!!

現在、画面に表示されているセル範囲の取得って出来るのですか?選択されているセル範囲は解るのですが?また、選択せずに、表示される範囲を変更するってことは出来るのでしょうか? やりたいことは、 1)現在画面に表示されているセル範囲を記憶する 2)現在選択されているセル範囲を記憶する 3)任意のセル範囲が画面に収まるようにzoom設定する 4)シートの表示範囲を任意のセル範囲が画面の中心に来るように移動させる 5)範囲の確認が完了したらエンターキーを押し、元の状態に戻す 復帰のイベントは、エンターキーでなくてもスペースキーもしくは、何かキーが押されたでもいいです。(何か?キーが押されたのを検知するには、キーボードからの割り込み処理をフックしないと駄目なので、エクセルでは無理なのでしょうか?) どなたか?詳しいかた教えて頂けないでしょうか?

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

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.1

こんちは~ なんか面白そうなテーマだったので勉強がてらつくってみました Proc_mainを呼び出したあとenterキーでもどります Dim ra1 As Range '最初に表示されている範囲 Dim ra2 As Range '最初に選択されている範囲 Dim ra3 As Range '最初にアクティブなセル Dim ra4 As Range '任意のセル範囲 Dim zm As Integer '最初に表示されているzoom率 Public Sub Proc_modoru() Application.OnKey "{RETURN}" ActiveWindow.Zoom = zm ra2.Select ra3.Activate ActiveWindow.ScrollRow = ra1.Row ActiveWindow.ScrollColumn = ra1.Column End Sub Sub Proc_main() Application.OnKey "{RETURN}" Const w = 1 '中央に持ってきたときのセル範囲の左右のセルの数 Const h = 1 '中央に持ってきたときのセル範囲の上下のセルの数 Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Set ra1 = ActiveWindow.VisibleRange zm = ActiveWindow.Zoom Set ra2 = ActiveWindow.RangeSelection Set ra3 = ActiveWindow.ActiveCell Set ra4 = Range("g68:h70") '任意のセル範囲を設定 r1 = ra4.Row c1 = ra4.Column r2 = r1 + ra4.Rows.Count - 1 c2 = c1 + ra4.Columns.Count - 1 r1 = WorksheetFunction.Max(1, r1 - h) c1 = WorksheetFunction.Max(1, c1 - w) r2 = WorksheetFunction.Min(65536, r2 + h) c2 = WorksheetFunction.Min(256, c2 + w) ActiveWindow.ActiveSheet.Range(Cells(r1, c1), Cells(r2, c2)).Select ActiveWindow.Zoom = True ra4.Item(1).Select Application.OnKey "{RETURN}", "Proc_modoru" End Sub

vba_minarai
質問者

お礼

早速のご指導有難うございます 単純に、コピーして実行するだけで、本当に希望のものが実現しました。しかも、勉強がてらっで、サクサクっと作ってしまうなんて、moon_piyo様って凄いですね!助かりました。今後ともご指導のほど、よろしくお願いいたします。 本当に有難うございました。

関連するQ&A