🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

688閲覧

vbs 値が「""」時の計算

hj_zebra

総合スコア10

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/11/27 00:45

編集2019/11/27 00:55

タイトルの件について質問です。

変数aに以下コードの計算結果などを格納したいと思っています。
""の時は0として計算したいです。
計算に使われる変数(今回は変数b)に「""」などが入っていた場合どのようにすればエラーなく計算できますでしょうか。

b = ""の場合は変数bはどのような状態になるのでしょうか。

VBScript

1Dim a 2Dim b 3Dim c 4a="100" 5b="" 6 7IF b <> "" Then 8 a = a - 60 9ELSE 10 a = a - b - 60 11END IF

試したソース1

VBScript

1a = CInt(a) - CInt(b) - 60

試したソース2

VBScript

1a = CInt(a) - 60 2a = CInt(a) - CInt(b)

試したソース3

VBScript

1IF b <> "" Then 2 a = a - 60 3ELSE 4 b = 0 5 a = a - b - 60 6END IF

格納したい内容

a = 40

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2019/11/27 00:49

bが""の時にa-bと計算していますが、どのような結果を望んでいるのですか?
hj_zebra

2019/11/27 00:52

>YAmaGNZさん 内容がきちんと記述されていませんでした。申し訳ないです。 ""の時は0として計算したいです。
y_waiwai

2019/11/27 01:05

ソース3でいいように思いますが、なにかエラーが出るんでしょうか
hj_zebra

2019/11/27 01:10

>y_waiwaiさん たしかにソース3で実行するとできました。 元ソースでは実行できなかったと感じていたので記述したのですが差異があるようなのですこし検証してからまた編集や回答させていただきます。ご協力ありがとうございます。
hj_zebra

2019/11/27 01:22

>y_waiwaiさん 下記のように記述していたためエラーが他ソース同様のエラーが発生しておりました。 IF文の処理中にb=0を格納しておかないとエラーになる理由はなぜでしょうか。 IF b <> "" Then b = 0 END IF IF b <> "" Then a = a - 60 ELSE a = a - b - 60 END IF
y_waiwai

2019/11/27 01:28

よく見たら論理が逆ですねw IF b == "" Then a = CInt(a) - 60 ELSE a = CInt(a) -CInt(b) - 60 END IF 回答の方法がスマートですがw
YAmaGNZ

2019/11/27 01:33

VBAなんで、 If b = "" Then で大丈夫です。
hj_zebra

2019/11/27 01:33

>y_waiwaiさん シンプルに間違えてましたw 教えていただきありがとうございました。
guest

回答2

0

ベストアンサー

CIntは引数をintに変換できない場合にエラーとなります。
また、a - b - 60と書いた場合、内部で型変換が行われます。
この時に""はintに変換できないのでエラーとなります。

また、If文の条件指定を理解されていないように感じます。

VBA

1If b <> "" Then 2 'bが""ではない場合 3Else 4 'bが""の場合 5End If

となります。

IsNumeric関数にて数字かどうか判断できます。
ですから、数字として変換できる時と変換できない時で場合分けして計算すればよろしいかと思います。
(""の時だけではなく数値として認識できない時としました。""の時だけであれば、そのようにIf文の条件を変更してください)

VBA

1'IsNumeric関数を使って数値に変換できるのか判断する 2If 数字として変換できるか? Then 3 '数字として変換できる場合 4 a = CInt(a) - CInt(b) - 60 5Else 6 '数字として変換できない場合 7 a = CInt(a) - 60 8End If 9 10'bを恒久的に変更していいのであれば次の方法でもいいかもしれません。 11If 数字として変換できないか? Then 12 '数字として変換できない場合 13 b = "0" 14End If 15a = CInt(a) - CInt(b) - 60 16

といった感じですかね

投稿2019/11/27 01:31

YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数abも文字列で数字のみで構成されていることが前提ですが、
一番手っ取り早いのがCInt()する際に"0"対象変数の左に0を付加する方法かな。

a="100" b="" a = CInt("0" & a) - CInt("0" & b) - 60

投稿2019/11/27 01:06

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問