- ベストアンサー
エクセル特定セルの表示拡大マクロ
- エクセル2010のマクロについて質問させていただきます。特定セルが選択された場合のみ表示を140%に拡大し、そのほかを選択した場合は100%に戻すマクロをご教授願います。
- 具体的な例としてはエクセル A1~E4 で表を作成しています。入力セルは A2,B2,C2,D2,E2,A4,B4,C4,D4,E4 の10カ所に数値を入力します。上記10カ所を毎回選択するのか面倒なので「名前の管理」で10カ所を選択しています。エクセルファイルを開くと10カ所を選択するマクロを実行しています。その10カ所を範囲指定した中で選択セルを「Enter」で送っていき、「D2」もしくは「D4」セルを選択した場合のみ、表示倍率を上げそのほかのセルを選択した場合は表示倍率を戻すマクロをご教授願います。
- 名前の管理(範囲指定)を実行せずに、単にセルだけを選択した場合のマクロは作成できたのですが、範囲指定した中でのセル選択ではマクロが実行されませんでした。単にセルだけを選択した場合拡大するマクロを記述しますので、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
uchinryoさん > E4→E2→D2→C2→B2→A2→A4→B4→C4→D4 ちょっと特殊な動きですね。 多少無理があるかも知れませんが、次のようにすれば可能かと思います。 検討してみてください。 ※標準モジュールで… Sub 入力域設定() Application.EnableEvents = False ActiveSheet.Unprotect Cells.Locked = True Range("A2:E2,A4:E4").Locked = False ActiveSheet.EnableSelection = xlUnlockedCells ActiveSheet.Protect Application.OnKey "~", "ENTER_IN" Application.OnKey "{ENTER}", "ENTER_IN" Range("E4").Select Application.EnableEvents = True End Sub 'E4→E2→D2→C2→B2→A2→A4→B4→C4→D4 Sub ENTER_IN() Select Case ActiveCell.Address(False, False) Case "E4" SendKeys "{UP}" Case "E2", "D2", "C2", "B2" SendKeys "{LEFT}" Case "A2" SendKeys "{DOWN}" Case "A4", "B4", "C4", "D4" SendKeys "{RIGHT}" End Select End Sub ※シートで Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("D2,D4")) Is Nothing Then ActiveWindow.Zoom = 100 Else ActiveWindow.Zoom = 140 End If End Sub 注)OnKeyを元に戻すには Application.OnKey "~" Application.OnKey "{ENTER}" を実行してください。
その他の回答 (3)
- mu2011
- ベストアンサー率38% (1910/4994)
NO1です。 的外れな回答をしました、読み飛ばし下さい。
- jcctaira
- ベストアンサー率58% (119/204)
uchinryoさん はじめまして。 セルを選択し入力すると「Worksheet_SelectionChange」「Worksheet_Change」イベント等は 発生しないようですね。 アプローチ方法を変えた方が良いかと思います。 入力セルを保護・非保護に設定し、シートを保護すれば良いかと思います。 その時、保護が掛かっていないセルだけ移動できるように「EnableSelection」のプロパティを 下記のように設定すれば良いかと思います。 ご検討ください。 Sub 入力域設定() ActiveSheet.Unprotect Cells.Locked = True Range("A2,B2,C2,D2,E2,A4,B4,C4,D4,E4").Locked = False ActiveSheet.EnableSelection = xlUnlockedCells ActiveSheet.Protect End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("D2,D4")) Is Nothing Then ActiveWindow.Zoom = 100 Else ActiveWindow.Zoom = 140 End If End Sub
補足
jcctairaさん はじめまして。 早速回答ありがとうございました。 おっしゃるとおり保護設定で選択セルを限定すれば、特定セル選択で拡大できました。 ありがとうございました。 しかしながら、「名前の管理」で選択範囲のセルの移動順序を設定していることもあって 希望のセル移動順序があります。 入力域設定マクロで保護をかけた上でセルの選択範囲(順序)を呼び出しても、その順序を無視してエクセル通りの移動をしてしまします。 現状では下記のような移動順序です。(Enterキーで移動) A2→A4→B2→B4→C2→C4→D2→D4→E2→E4 希望としては下記のような移動順序です。(Enterキーで移動) E4→E2→D2→C2→B2→A2→A4→B4→C4→D4 当方でも、セルの移動順を決めるマクロを模索してみます。 勝手なことばかり言って申し訳ありませんが、よろしくお願いします。
- mu2011
- ベストアンサー率38% (1910/4994)
イベントプロシージャですので、標準モジュールに登録されていると動作しませんので、 ご該当ワークシートで登録して下さい。 因みにTarget.Address()の括弧はなくても問題ありません。
お礼
jcctaira さん ご回答ありがとうございました。 セルの動きが特殊で申し訳ありません。 ですがそれを完璧に対応していただき感謝します。私のやりたかったことが完璧にできています。非常に助かりました。ありがとうございました。