![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
テキストボックスを利用して計算する時に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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 【VBA】先月分の取得ができない理由が分かりません。 2 2022/04/24 11:16
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) ExcelのVBAコードについて教えて下さい。 2 2022/06/25 14:04
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
札幌(中島公園)のお祭り
-
白血球が多いとどんな心配があ...
-
腕を見たら黄色くなってる部分...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
これって喉仏ですか? 私は女性...
-
口の中に黒い血の塊
-
筋トレするとチンコが縮んじゃ...
-
風俗店へ行く前のご飯
-
甲状腺が腫れているが血液検査...
-
精子に血が・・・
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
2つの数値のうち、数値が小さい...
-
ミルクティーが好きなのに気持...
-
ワードのページ番号をもっと下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
2つの数値のうち、数値が小さい...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
おすすめ情報