• ベストアンサー

エクセルVBAで表示倍率の変更

ワークシート上の所定の位置に、拡大・縮小のコマンドボタンを作って、押すごと、25倍、50倍、100倍・・・(その逆)という風に表示倍率を変えたいのですが、 Dim Zm As Integer Zm = 25 Private Sub ZoomButton_Click() Zm = Zm * 2 ActiveWindow.Zoom = Zm End Sub と、こんなふうにやってみたんですが、最初値25倍のInitializeが分かりません。どうしたら良いのでしょうか? VBAど素人なので、よろしくお願いします

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

  • ベストアンサー
noname#29107
noname#29107
回答No.5

#4です。 >後半のものはうまくいきませんでした。 現象は、ボタンを押すと25%になって、何回押しても変化しないということでしょうか? それでしたら、「ZmをPublic変数にして」とだけ書いて、ソースに明示しなかった部分の不足だと思います。 Public Zm As Integer 'これを追加 Private Sub CommandButton1_Click() If Zm = 0 Then   Zm = 25 Else   Zm = Zm * 2 End If ActiveWindow.Zoom = Zm End Sub これで動作すると思います。

kamoshika333
質問者

お礼

できました! すみません、きわめて初歩的なミスで。おそらく他に出来なかったものも同じようなミスなんでしょうね。 もしよろしかったら、時間がある時で構わないのですが、DimとStaticとPublicと、違いを教えて頂けないでしょうか? 私が使っている参考書には、Dimでの定義のやり方しか載っていません。Publicは、全てのモジュールで使える変数ということでしょうか?

その他の回答 (5)

noname#29107
noname#29107
回答No.6

#4です。 >DimとStaticとPublicと、違いを教えて頂けないでしょうか? まずは、ヘルプを確認して頂いて、その上で不明点は別途質問していただいた方が適切な回答が得られると思います。 >Publicは、全てのモジュールで使える変数ということでしょうか? (Option Private Module を使用しない場合、)その理解でよろしいと思います。 Dimで宣言された変数は、(Dim文が)呼び出されるたびに初期化されますが、Staticで宣言された変数は、一旦セットされた値を保持します。 Sub testst() Static x As Long x = x + 5 Debug.Print x End Sub Sub testdim() Dim x As Long x = x + 5 Debug.Print x End Sub イミディエイトウィンドウで、teststとtestdimを何回か実行してみて下さい。

kamoshika333
質問者

お礼

かさねがさね、ありがとうございます。 おっしゃられる通り、もう少し自分で勉強しないとダメですね。 あまりに便利なサイトを見つけたものですから、ついつい甘えてしまいました。DimとStatic、なんとなく判ったような気がします。

noname#29107
noname#29107
回答No.4

初期値を25にする意味がよく理解できません。 普通現在の値を拡大ボタンを押したらその2倍、縮小ボタンを押したらその半分という風に設定すると思いますが、どうでしょうか? Private Sub CommandButton1_Click() Zm = ActiveWindow.Zoom Zm = Zm * 2 ActiveWindow.Zoom = Zm End Sub この場合、ZmをPublic変数にする必要はありません。 勿論、ZmをPublic変数にして、最初の値を25にすることも出来ます。 すでに回答されている以外に、例えば、 Private Sub CommandButton1_Click() If Zm = 0 Then   Zm = 25 Else   Zm = Zm * 2 End If ActiveWindow.Zoom = Zm End Sub

kamoshika333
質問者

お礼

ありがとうございます。 これが一番シンプルで、素人にも大変判りやすいです。後半のものはうまくいきませんでした。 Zm=ActiveWindow.Zmという逆の式が成り立つとは思いもよりませんでした。いい勉強になりました。 マクロって面白いですね。皆さんからご意見いただきましたが、「へぇええ~」の連発です。

回答No.3

標準モジュールを挿入して、Module1 で、 Public Zm As Integer ThisWorkbook で、 Private Sub Workbook_Open()  Zm = 25  ActiveWindow.Zoom = Zm End Sub コマンドボタンを作ったsheet で、 Private Sub CommandButton1_Click() '拡大ボタン  Zm = Zm * 2  ActiveWindow.Zoom = Zm End Sub Private Sub CommandButton2_Click() '縮小ボタン  Zm = Zm / 2  ActiveWindow.Zoom = Zm End Sub で、うまく行くと思います。 一度保存して、立ち上げ直してテストして下さい。 ボタンの位置は、#1の方も言っているように、拡大して行くと、ボタンの位置がズレて行きますので、出来るだけA1に小さく置くと良いです。

kamoshika333
質問者

お礼

ありがとうございます。 何度試してみても、 WindowクラスのZoomプロパティを設定できません。 と言われてしまいます。 どうしてなのでしょう?

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

「小さくなり切れば、次は大きくなり、大きくなり切れば、次は小さくなる」と いうことですね。 こんな感じで如何でしょうか。 Private Sub ZoomButton_Click() Static UpDn As Boolean Dim Zm As Single If UpDn = False Then   Zm = ActiveWindow.Zoom * 2   If Zm = 400 Then     Zm = Zm / 4     UpDn = True   End If Else   Zm = ActiveWindow.Zoom / 2   If Zm = 12.5 Then     Zm = Zm * 4     UpDn = False   End If End If ActiveWindow.Zoom = Zm End Sub

kamoshika333
質問者

お礼

すみません、質問の言葉が悪かったです。 拡大→拡大→縮小→縮小という折り返しが必要なわけではないんです。両方のボタンを作るという意味でした。 ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

(1)Zmをシートのセルの値として持たせる方法。 (2)ZmをPublic変数とし、先だってZm=25を実行する方法 (3)ZmをStatic変数にし、初回に0にしてくれるのを利用する方法 (2) Sub test01() zm = 25 End Sub Private Sub CommandButton1_Click()   zm = zm + 25 ActiveWindow.Zoom = zm CommandButton1.Caption = zm End Sub (3) Private Sub CommandButton1_Click() Static zm zm = zm + 25 ActiveWindow.Zoom = zm CommandButton1.Caption = zm End Sub (1) Private Sub CommandButton1_Click() zm = Cells(1, 3) zm = zm + 25 ActiveWindow.Zoom = zm CommandButton1.Caption = zm Cells(1, 3) = zm End Sub しかし (1)倍率減少のボタンも必要でしょう (2)倍率が上がると画面からボタンが消えて、使い難い です。 と言うことで総合的にみて現実的ではないですね。

kamoshika333
質問者

お礼

ありがとうございます。 (2)だけが、どうしても実行できません。 (3)と(1)は出来ました。Static変数というものを知らないので、(1)が単純でいいですね。セルに入れてしまうというのは気が付きませんでした。 ただ、両方とも、+25ならいけるのですが、*2では駄目なようです。なぜんでしょう。 画面からボタンが消えてしまうのは、問題ですね。拡大した後に、毎回ボタンだけ縮小・位置修正しなければならないという、致命的な構成ミスです。

関連するQ&A