![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
支払金額TextBoxAがあり、
控除金額用TextBox1~10に金額を入力してその控除合計をTextBoxSumに反映させ、
TextBoxBにはA-Sumの金額が返って来ます。
TextBoxBがマイナスの値になる場合もあり、
それはきちんとマイナスの値が返ってきますが、
TextBox1~10にマイナスの”-”を入力すると添付画像のように
”実行時エラー 13 型が一致しません”と表示され、
Public Function CCurEx(ByVal strText As String) As Currency
strText = Trim(strText)
If Len(strText) = 0 Then
CCurEx = 0
Else
CCurEx = CCur(strText)
End If
End Function
コード内のCCurEx = CCur(strText)の部分が黄色く反転します。
このエラーが出ないようにするにはどのようにすれば修正出来ますでしょうか?
よろしくお願いいたします。
![「【エクセル】TextBoxにマイナスの値」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/2/542453123_58788310750ea/M.png)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.7ベストアンサー
- 回答日時:
No5です。
すみません。全体像が把握できない為、想像になります。
入力された金額をカンマ","を付けて編集しているため、それでエラーになっているように見えます。
以下のようにかえてみてはいかがでしょうか。
---------------------------------------------------------
Public Function CCurEx(ByVal strtext As String) As Currency
strtext = Trim(strtext)
If IsNumeric(strtext) = True Then
CCurEx = CCur(strtext)
Else
CCurEx = 0
End If
End Function
こんにちは。
ありがとうございました。
上記に書き換えることで”-”も入力出来るようになりました。
数字の表示をカンマ付きで表示することにこだわりがありました。
助かりました。
No.6
- 回答日時:
#1の回答者ですが、IMEMode プロパティの方は試されなかったのですね。
最近、私の書いている内容が良く分からないという理由から、ここではボツされることが多くなってきました。ただ、今、VBAは、変わる可能性もあるのではないかと思いますから、なるべく、それなりの変化には敏感になりながら、VBAの勉強するのがよいのではないかと思います。
本題に入りますが、そもそもの原因が分からないので、そういう方法を取ったのですが、入力値の数値を検査するだけなら、IsNumeric という関数もあるし、Val関数もありますが、どうも私の出る幕ではなさそうな気がしてきます。符号を正規のものにするなら、Replace関数などもありますが、元に何を入れたか分からない状態では、難しいです。Replace メソッド側には、曖昧変換があるはずですが、それを利用するのもややこしいです。単に、入力する側で統一させればよいだけなのですから。もしも、正規表現でヒットするなら、符号は適当に判定させて、その次の値をそのまま数値を取り出せばよいと思います。
それはともかく、一応、こちらの全体的な考えだけを提示しておきます。
>青枠(TextBoxB)と赤枠(TextBoxSum)のところに数値が返って来なくなりました。
「マイナス(-)」が正しい符号で入力されていないから、解決をしていないのではないでしょうか。一番濃厚なのは、全角のマイナスです。それは入力している当人しか分かりませんが、だから、TextBox で、入力制限でIME を起動させずに、入力を半角英数のみにさせようと考えたのですが、そういう考え方は、なぜダメなのか、私には、良く分かりませんね。
Replace関数を使うことは可能ですが、その前にすることがあります。
それと、小数点を扱うことはあるのでしょうか。
整数だけなら、CCur は不要ですが、一応残しました。こちらは、見ることはないのかもしれませんが、残しておきます。
>Me.TextBoxB.Value = CCurEx(Me.TextBoxA.Value) - (CCurEx(Me.TextBox1.Value) + ’(中略) + CCurEx(Me.TextBox10.Value))
例えば、TextBox10 まで入れたら、起動するという方法もあると思いますね。
Private Sub TextBox10_AfterUpdate()
Dim i As Long, Total As Long
For i = 1 To 10
If Me.Controls("TextBox" & i).Value <> "" Then
Total = Total + CCur(Me.Controls("TextBox" & i).Value)
End If
Next i
If TextBoxA.Value <> "" Then
TextBoxB.Text = Format$(CCur(TextBoxA.Value) - Total, "#,##0")
End If
End Sub
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.5
- 回答日時:
補足ありがとうございました。
補足をみると、
①TextBoxSum_Change()とありますが、
TextBoxSumに金額を直接入力することはないように思われます。
同様に、②TextBoxB_AfterUpdate()とありますが、
TextBoxBに金額を直接入力することはないように思われます。
金額を直接入力するのは、
TextBoxAとTextBox1~TextBox10なので、それらに入力されたとき、上記の①②のプロシージャ
を呼び出しているようにこちらからはみえます。(想像ですが)
確認のために、TextBoxAとTextBox1に金額を入力した時に動作するプロシージャ(TextBoxA_Change()等)があれば
それを提示していただけませんでしょうか。
若しくは、他に①②を呼び出している箇所があればそれを提示していただけませんでしょうか。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.4
- 回答日時:
>マイナスを入力してもエラーは出なくなりましたが、
>添付画像の青枠(TextBoxB)と赤枠(TextBoxSum)のところに数値が返って来なくなりました。
>恐れ入りますが、その対処方法もご教授いただけませんでしょうか?
添付画像の青枠(TextBoxB)と赤枠(TextBoxSum)のところに数値を設定している箇所のソースを提示していただけませんでしょうか。こちらからは、その箇所が見えないので、現状では、何とも申し上げられません。
又、CCurExを呼び出している箇所も、ご提示ください。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.3
- 回答日時:
以下のようにに変えてください。
strtextが数値に変換できない場合は0を設定します。(当然ですが全角の文字はエラーです)
-------------------------------------------
Public Function CCurEx(ByVal strText As String) As Currency
Dim regExp As Object '正規表現オブジェクト
Set regExp = CreateObject("VBScript.RegExp")
regExp.Pattern = "^(\+|\-)?\d+\.?\d*$"
strText = Trim(strText)
If regExp.Test(strText) = True Then
CCurEx = CCur(strText)
Else
CCurEx = 0
End If
End Function
No.2
- 回答日時:
>このエラーが出ないようにするにはどのようにすれば修正出来ますでしょうか?
"-"だけでは数値変換出来ませんからねぇ。
>If Len(strText) = 0 Then
の判定にもうちょい足して"-"の時はElse側に流れないようにする…ってところでしょう。
真面目にやると結構大変ですけど。
'-'以外の文字が入っていたら?
とか。
「VBA 例外処理」とかで見つかる方法で、エラー対処する。
という方法もありますが。
No.1
- 回答日時:
こんにちは。
>エラーが出ないようにするには
TextBox に全角などの文字が入らないようにすることでしょうね。
Replace関数や想定しうる文字を正規表現で置換してもよいけれども、
TextBox そのものを英数しか入らないようにしたほうが楽でしょう。
まだ、アルファベットが入りますが、このようにすれば、多少は防げるはずです。手動でプロパティを変更したら、以下コードは不要です。
Private Sub UserForm_Initialize()
Dim i As Long
For i = 1 To 10
Me.Controls("TextBox" & i).IMEMode = fmIMEModeOff
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) エクセルのマクロとシートの保護について教えてください。 1 2022/10/18 08:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) Excelマクロでセルに値が入力されたら実行する 5 2023/08/06 11:03
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
至急!尿検査前日にオナニーし...
-
EXCELで条件付き書式で空白セル...
-
甲状腺が腫れているが血液検査...
-
勃起する時って痛いんですか? ...
-
尿検査前日に自慰行為した時の...
-
値が入っているときだけ計算結...
-
2つの数値のうち、数値が小さい...
-
小数点以下を繰り上げたものを...
-
MIN関数で空白セルを無視したい...
-
中出しをするとお腹が痛い・・・。
-
EXCELで式からグラフを描くには?
-
【Excelで「正弦波」のグラフを...
-
ある範囲のセルから任意の値を...
-
エクセルのグラフで、値0のとき...
-
リンク先のファイルを開かなく...
-
これって喉仏ですか? 私は女性...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
白血球が多いとどんな心配があ...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
尿検査の前日は自慰控えたほう...
-
精子が黄色?
-
中出しをするとお腹が痛い・・・。
-
EXCELで条件付き書式で空白セル...
-
口の中に黒い血の塊
-
これって喉仏ですか? 私は女性...
-
2つの数値のうち、数値が小さい...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
おすすめ情報
こんばんは、いつもありがとうございます。
ご提案の通りに書き直してみました。
マイナスを入力してもエラーは出なくなりましたが、
添付画像の青枠(TextBoxB)と赤枠(TextBoxSum)のところに数値が返って来なくなりました。
恐れ入りますが、その対処方法もご教授いただけませんでしょうか?
よろしくお願いいたします。
このように書いてます。
Private Sub TextBoxSum_Change()
TextBoxSum.Value = Format(TextBoxSum.Value, "#,###")
TextBox1 = Format(TextBox1, "#,###")
’(省略、以下10まで)
End If
Private Sub TextBoxB_AfterUpdate()
If TextBoxB.Value = "" Then Exit Sub
Me.TextBoxB.Value = CCurEx(Me.TextBoxA.Value) - (CCurEx(Me.TextBox1.Value) + ’(中略) + CCurEx(Me.TextBox10.Value))
TextBoxA.Value = Format(TextBoxA, "#,###")
End Sub
①②のご指摘仰るとおりです
Me.TextKingakuSum.Value = CCurEx(Me.TextKingaku1.Value) + (中略) + CCurEx(Me.TextKingaku10.Value)
Me.TextSoukin.Value = CCurEx(Me.TextYachin2.Value) - (CCurEx(Me.TextKingaku1.Value)+ (中略) + CCurEx(Me.TextKingaku10.Value))
Me.TextKingakuSum.Value = Format(TextKingakuSum, "#,###")
Me.TextSoukin.Value = Format(TextSoukin, "#,###")
(中略) 部には2~9が入り、
Box1がKingaku1、Yachin2がA、SoukinがBに該当します