重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

今朝、コマンドボタンについて質問をして、
ボタンを押すごとに、特定のセルに1とブランク(=0)を
交互に入力する方法を教えてもらったのですが、その中で
新しい、トグルボタンという機能を教えてもらい、
本などを見て自分なりにやってみたのですが、
回答が見つからず、またまた書き込んでしまいました;;

先ほどは、ABS()の絶対値を使って、0と1を繰り返す方法と
下記のプログラムを教えて頂いたのですが、

Private Sub CommandButton1_Click()
If Range("D1").Value <> "" Then
  Range("D1").Value = ""
Else
   Range("D1").Value = 1
End If
End Sub

作りたい書類には1を入力したときに凹ませたいのですが、
教えてもらった回答では
どうしても、0の時に凹んで 1のときに凸るんです。
内容を色々変えてやってみたものの成功には至らず、
本を見ても回答に見合った例がなく、うまく出来ません。
っというか、コマンドボタンと同様の式では、
凹んだときにTrueを返して、凸ったときにFalseを返すという
折角のトグルボタンの意味が無いですよね?

とどのつまりが、お知恵をお貸し頂きたいということで、
毎度ながら申し訳ないのですが
何卒宜しくお願いします。

A 回答 (1件)

こんにちは。



最初に、前回の私の書いたトグルボタンのコードの内容は、以下のようなものです。

Private Sub ToggleButton1_Click()
 If ToggleButton1.Value Then
   Range("D1").Value = 1
 Else
   Range("D1").Value = ""
 End If
End Sub

ボタンをクリックすると、1が入り、もう一度押すと、数字は消えます。

>1を入力したときに凹ませたいのですが、教えてもらった回答では
>どうしても、0の時に凹んで 1のときに凸るんです。

1を入力した時に凹ませるというのは、かなり意味が違ってきます。あくまでも、ボタンを押して変化するというものですから、入力では、直接の変化はありません。

ワークシートのD1 に、1を入力した時に、凹ませるのは、
ボタンのプロシージャと同じ場所の、シートモジュールに、

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$D$1" Then Exit Sub
ToggleButton1.Value = (Range("D1").Value <> 0)
End Sub


なお、(Range("D1").Value <> 0) のカッコは、意味がありません。慣例で、見かけのために、そのような書き方をすると思ってください。その部分は、0以外は、True を返すというような仕組みになっています。
    • good
    • 0
この回答へのお礼

Wendy02さん、いつもご回答ありがとうございます。
自分なりに色々と勉強を続けていて、
関数に関しては結構覚えたつもりなのですが、
プログラムには公式がないというか、
関数のような特定の決まり事がないので
(あるけど幅が広くて覚え切れないのかな?;;)
中々難しいです。
以前教えて頂いたダイアログに関しては、
本のお陰もあってかなりいい具合に仕上がりましたよ。

今回の内容で If ~ Then ~ Else ~
で、関数IFと同じような意味のものが作れる事がわかりました。
どうもありがとうございました。

あと、質問の文章に誤りがありました。
”1を入力した時に凹ませたい~”じゃなくて、
凹ませた時に1が入るようにしたい。でした;;
すいません。

では、これに懲りずにまた宜しくお願いします。

お礼日時:2007/09/08 17:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!