• ベストアンサー

EXCELVBAで同じフォームボタンで表示のON/OFFをする。

EXCELVBA初心者です。 図形描写の”表示”、”非表示”はできたのですが 同じボタンをクリックしてON/OFFする方法を教えてください。 ボタンが2個だといまいちなので、よろしくお願いします。 Sub 図形_del() ActiveSheet.Shapes("daily7").Visible = False End Sub Sub 図形_add() ActiveSheet.Shapes("daily7").Visible = True End Sub

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

  • ベストアンサー
  • rukuku
  • ベストアンサー率42% (401/933)
回答No.3

はじめまして #1の回答も#2の回答も、「書き方」が違うだけで、基本的な考え方は全く同じです。 と言っただけでは伝わらないと思いますので、補足します。 まず、 「= (先の構文と後ろの構文を比較して)」 との部分をnabepapaさんは誤解されています。 同じ書式ですが、使われる場面によって意味が異なります。 ※1 例えば i = 2 と単独で使えば「左辺の変数の値を右辺の値にしなさい」という命令です。正式には Let i = 2 と記述します。(Letは省略できます) ※2 一方で、If ~ Then ~ Elseの構文の中で If i = 2 Then … と使ったときにはi=2という「条件」を表します。このときに「Let」をつけるとエラーになります。 ActiveSheet.Shapes("daily7").Visible = Not ActiveSheet.Shapes("daily7").Visible は※1のケースです。 i = i + 1 と書いたときには、「“新しいi”は“今のi”に1を足したものにしなさい」という命令になります。 左辺のiは「新しいi」で、右辺のiは「今のi」です。従って同じiを使っていても「中身」が違います。 同じように、 ActiveSheet.Shapes("daily7").Visible = Not ActiveSheet.Shapes("daily7").Visible の場合には、 「“新しい”ActiveSheet.Shapes("daily7").Visible」の値を「Not “今の”ActiveSheet.Shapes("daily7").Visible」にしなさいという命令になります。 ------------------------ 次に、Notですが、 Not xは x=True ならば False x=False ならば True となります。 ------------------------ なんか、#1の回答に似てきたと思いません? tohru999さんは、nabepapaさんの質問に合うようにプログラムを作ってくれましたが、実際には If ActiveSheet.Shapes("daily7").Visible = True Then ActiveSheet.Shapes("daily7").Visible = False Else ActiveSheet.Shapes("daily7").Visible = True End If でも同じ結果になります。 このプログラムを日本語化すると もし“今の”ActiveSheet.Shapes("daily7").VisibleがTrueだったら“新しい”ActiveSheet.Shapes("daily7").VisibleをFalseにしなさい そうでなければ、“新しい”ActiveSheet.Shapes("daily7").VisibleをTrueにしなさい となります。 (注) 「ActiveSheet.Shapes("daily7").Visible」は「True」か「False」のどちらかになります。「True」でなければ「False」、「False」でなければ「True」です。

nabepapa
質問者

お礼

長文の説明、ありがとうございます。 なんとなく、イメージがつかめてきました。 あとは実際に色々試してみたいと思います。

その他の回答 (2)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

ActiveSheet.Shapes("daily7").Visible = Not ActiveSheet.Shapes("daily7").Visible では?

nabepapa
質問者

補足

ご回答、ありがとうごあざいます。 とても短い構文なので、動作する理論がわかりません。(動作は確認できました。)私が無知なのは承知していますが…(笑) 考え方としては ActiveSheet.Shapes("daily7").Visible(現在の状況、真or偽) = (先の構文と後ろの構文を比較して) Not ActiveSheet.Shapes("daily7").Visible(現在の状況の値(真Or偽)の反転値(NOT)) がいっしょ(違う)ならば…、この先の理論がわかりません。 お手数ですが、ご教授願います。

  • tohru999
  • ベストアンサー率49% (76/154)
回答No.1

If ActiveSheet.Shapes("daily7").Visible = True Then Call 図形_del() Else Call 図形_add() End If ということなのかな?

nabepapa
質問者

補足

ご回答、ありがとうごあざいます。 初心者にもわかりやすい構文で動作することが確認できました。 No2のの方が構文が短いのですっきりしますが、理論がいまいちわからないので、初心者にはこちらの方がわかりやすそうです。

関連するQ&A