
テキストボックスを利用して計算する時にIF文を利用しているのですが、以下の条件での計算が上手くいきません。
・テキストボックスは3つ。オブジェクト名はD1、D2、D
・D1とD2に数値が入力されると同時に計算する(Changeイベント)
・D1は正の値のみを持つ
・D2は正、0、負の値を持つ
上手くいかない部分
・条件:D2が負の値を取る時、絶対値がD1より大きい場合は計算する。
D1より小さい場合は計算しない。
構文は下記の通りです。
Private Sub D1_Change()
Dim R1 As Single
Dim R2 As Single
Dim R As Single
If IsNumeric(D1) And D1 > 0 And D1 <> "" Then
R1 = D1 / 2
Else
D = ""
Exit Sub
End If
If IsNumeric(D2) Then
Else
D = ""
Exit Sub
End If
If D2 = 0 Then
R = R1
ElseIf D2 > 0 Then
R2 = D2 / 2
R = 1 / (1 / R1 + 1 / R2)
ElseIf D2 < 0 Then
If Abs(D2) > D1 Then
R2 = D2 / 2
R = 1 / (1 / R1 + 1 / R2)
Else
D = ""
Exit Sub
End If
Else
D = ""
Exit Sub
End If
D = Format(R * 2, "##.###")
End Sub
これで計算すると、D2が負の値で且つ絶対値がD1より大きい時、
If Abs(D2) > D1 Then
R2 = D2 / 2
R = 1 / (1 / R1 + 1 / R2)
Else
D = ""
Exit Sub
End If
の部分でElseの方で計算が進んでしまいます。
(Abs(D2)>D1でなく、D2>D1として計算している?)
何かよい構文はありませんでしょうか?
No.1ベストアンサー
- 回答日時:
ryo_ky さん、こんばんわ
Abs(D2)は、正負が分からない変数に対して確実に正の値を取りたい時に利用すると便利です。
今回はD2が負であることが分かっているので(というかそのように条件分岐をしているので)、「-D2」と表記するか、「D2 * (-1)」と表記すれば良いですね。
ただし、そのように書いても問題は解決しないかもしれません。
私が同様な条件にて試してみたところ、問題なく条件分岐に成功しましたので、むしろ実際にD1、D2にどのような値が代入されているか、リアルタイムで確認する必要があるのではないでしょうか。
ソースの If Abs(D2) > D1 Then の行にカーソルを合わせ、F9キーを押してください。その行が茶色に着色されると共に、行頭に茶色の●が表示されるはずです。
この状態でプログラムを実行させると、その位置で実行が一時停止されます。
その状態で、Abs(D2) にカーソルを合わせてみてください。現在のAbs(D2)の値が表示されます。また、D1にもカーソルを合わせてみてください。D1の値が表示されます。この2つの値を実際に見比べてみてください。ひょっとしたらD1とD2の大小関係について、ryo_kyさんが想定していた値とは別の値が入っているかもしれませんよ。
途中で止めることができない場合(このソースでは無いとは思いますが)、「Debug.print」を利用します。
If Abs(D2) > D1 Then の上の行に、以下の2行を追加します。
Debug.Print "D1=" & D1
Debug.Print "Abs(D2)=" & Abs(D2)
その上で、Visual Basic Editor から、「表示(V)」-「イミディエイト ウィンドウ」を選んでもらうか、Ctrlキーを押しながらGを押して、イミディエイトウィンドウを開きます。
その状態で実行すれば、D1とAbs(D2)の結果がイミディエイトウィンドウに表示されます。
それで一度値を確認してみてください。
ご回答有難うございます。返事が遅くなりまして申し訳ございません。
値を確認しましたところ、
D1="5"
D2="-10"
Abs(D2)=10
となりまして、10と"5"の比較になった事が問題の様です。
"数値"と数値での違いについては、まだ調べていませんので、良く分かりませんが、
構文を
If Abs(D2) > Abs(D1) Then
(両方とも絶対値)にする事で解決致しました。
F9で○が付く事は知っていましたが、これが式を途中で止める事とは知りませんでした。
重ねて御礼を申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
検便についてです。 便は取れた...
-
2つの数値のうち、数値が小さい...
-
風俗店へ行く前のご飯
-
血液検査の結果が悪くefgrの値...
-
小数点以下を繰り上げたものを...
-
リンク先のファイルを開かなく...
-
透亮像について。 先日会社の健...
-
excelでsin二乗のやり方を教え...
-
excel関数で TRUEやFALSEについて
-
イタリアから帰国する際、肉製...
-
【エクセル】0以外が入力され...
-
MIN関数で空白セルを無視したい...
-
Excel 0目標に対して数字があ...
-
「内数」という言葉の意味がよ...
-
ワードのページ番号をもっと下...
-
値が入っているときだけ計算結...
-
Excel 数値の前の「 ' 」を一括...
-
WORDで複数語句を検索するには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
アトピー性皮膚炎
-
コロナになるのが死ぬほど怖い...
-
検便についてです。 便は取れた...
-
24歳、女性です。性欲が強すぎ...
-
未成年の従姉妹が自分の真似絵...
-
頭痛に関する質問です。現在高...
-
血液検査の結果が悪くefgrの値...
-
肝臓がんになりたいです。肝機...
-
何故 削除され続けるか、
-
◎敢えてノンジャンルカテゴリー...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
風俗店へ行く前のご飯
-
2つの数値のうち、数値が小さい...
-
病院側から早く来てくださいと...
-
EXCELで条件付き書式で空白セル...
-
Excel 数値の前の「 ' 」を一括...
-
リンク先のファイルを開かなく...
-
値が入っているときだけ計算結...
おすすめ情報