• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAについて質問です)

VBAで0で除算する際のエラーを回避する方法

このQ&Aのポイント
  • VBAで0で除算しようとすると「0で除算しました」というエラーが発生します。このエラーを回避するために、除算の前に割り切れるかを判定する必要があります。
  • 割り切れるかを判定するために、cdbl関数を使用して除算前の値を小数値に変換し、mod演算子を使って割り切れるかを判定します。割り切れない場合は「割り切れない」というメッセージを表示し、割り切れる場合は「割り切れる」というメッセージを表示します。
  • ただし、dblwaruの小数点以下の桁数がわからないため、単純にcdbl関数を使って割り切れるかを判定することができません。解決策としては、事前にdblwaruの小数点以下の桁数を確定させるか、別の方法で割り切れるかを判定する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

mod演算って、整数しか使えないんじゃないですか? 暗黙で整数に型変換されたから 0.0005 → 0 となり、0の除算でエラーになってるんだと思います。

kapibaraPG
質問者

お礼

素早いお答えありがとうございます mod は勝手にVB.NETのCINTみたいな形に変換されてしまうんですね; 割られる数 - ((割られる数 \ 割る数) * 割る数) という式で考えていきます 本当にありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBA の if elseについて

     以下は与えられた自然数が素数であるかどうかを判定する、Excel VBA による素朴なコードです。  自然数が2 とそれ以上の場合で処理を分けていますが、5 行目のelseで   対応するifがないという というコンパイルエラーが出ます。私はプログラミング言語は、Pascal しか経験がなく、Pascal の場合 5 行目の else から後の処理したい複数の構文を begin end で囲めば問題なく動きます。  Excel VBA で同じ処理をさせるにはどうしたらいいのでしょうか?  Worksheets("素数").Activate  '"素数"シートをアクティブにする  Flg = 0  Target = Range("D5").Value  if Target = 2 then MsgBox ("2 は素数です。")  else  'else 対応するifがないというエラーが出る  'begin ・・・・・ Pascalの場合    K = Int(Target / 2)    ' 2 以外の素数は奇数なので偶数で割ることを確認する必要はない。    For I = 3 To K Step 2     If Target Mod I = 0 Then      Flg = 1      Exit For     End If    Next I       Snum = Format(Target)    If Flg = 0 Then     MsgBox (Snum + " は素数です。")    Else     MsgBox (Snum + " は素数ではありません。")    End If  'end ・・・・・ Pascalの場合  End If

  • エクセル・時刻に関する質問

    添付画像のようなエクセルで以下の標準モジュールを作っています。 Sub test001() If Cells(2, 2) = TimeValue("9:00:00") Then MsgBox ("9:00:00認識しました") Else MsgBox ("9:00:00認識しませんでした。") End If If Cells(3, 2) = TimeValue("9:05:00") Then MsgBox ("9:05:00認識しました") Else MsgBox ("9:05:00認識しませんでした。") End If If Cells(3, 2) = 0.378472222222222 Then MsgBox ("2回目9:05:00認識しました") Else MsgBox ("2回目9:05:00認識しませんでした。") End If If Cells(4, 2) = TimeValue("9:10:00") Then MsgBox ("9:10:00認識しました") Else MsgBox ("9:10:00認識しませんでした。") End If If Cells(5, 2) = TimeValue("9:15:00") Then MsgBox ("9:15:00認識しました") Else MsgBox ("9:15:00認識しませんでした。") End If If Cells(6, 2) = TimeValue("9:20:00") Then MsgBox ("9:20:00認識しました") Else MsgBox ("9:20:00認識しませんでした。") End If End Sub 実行すると、9:05:00 だけが、「9:05:00認識しませんでした。」となります。 時刻以外は同じ内容のはずですが 9:05:00 だけ認識されません。 解決策をお願いします。

  • エクセルVBAで

    お世話になります。 エクセルVBAで簡易プログラムを作成しています。 その中でユーザーフォームを作り、チェックボックスで 6項目からどれか一つ選択する様な仕組みを作っています。 利用者が二つ以上選択(チェック)出来ない様にしたいの ですが、どの様にすれば良いでしょうか。 ちなみに今の記述は下記の様になります。 ご教授下さいます様、宜しくお願い致します。         記 If CheckBox1 = False Then If CheckBox2 = False Then If CheckBox3 = False Then If CheckBox4 = False Then If CheckBox5 = False Then If CheckBox6 = False Then MsgBox "どれか選択して下さい!" GoTo err_jmp Else: mytoki = "3年前から" End If Else: mytoki = "2年前から" End If Else: mytoki = "1年前から" End If Else: mytoki = "半年前から" End If Else: mytoki = "1週間前から" End If Else: mytoki = "昨日から" End If

  • たびたびすいません。VBAです。

    たびたびすいません。VBAです。 EXCEL2002の、SP-2です。 さきほど、MOD 関数で、0.5で割ると「0除算」エラーが出ると質問して、「MODは整数しか使えない」と回答を頂ました。 なので、 「割られる数 - (割られる数 ¥ 割る数) * 割る数)」 とすればあまりが戻ってくると思ったのですが、「¥」関数も整数しか使えないみたいです。 「/」だとあまりが出ない為(完全に割り切ってしまう為)使えません。 ・小数点以下の入力を制限して、「*1000」をする ・FOR文で、ひたすら「割られる数-割る数」をして、マイナス値になったらそこで判定 しかないのでしょうか・・・ もしいい方法があったら宜しくお願いします

  • VBAの時間入力について

    先日、時間を文字列で、HH:mmのフォーマット入力するPGを教えて頂き、 内容理解をしているのですがわからない部分があります。 ★の部分の条件で、00:00も入力したいです。 ご存知か方がおられましたら教えてください。 よろしくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から 'Intersect:http://officetanaka.net/excel/vba/tips/tips118.htm 'Is Nothing:nullではない 'Selection.Count <> 1:選択数が1以下ではない(<> :等しくない) ' Not IsNumeric(Target):数値ではない If Intersect(Target, Columns(12)) Is Nothing Or Selection.Count <> 1 _ Or Not IsNumeric(Target) Then Exit Sub ' 'Target:セルの値は24:00以下 '2つの数値の除算を行いし,その剰余を返す 'Mod:2つの数値の除算を行いし,その剰余を返す '★ここで00:00時も入力したい。 If Target <= 2400 And Target Mod 100 < 60 Then ' Application.EnableEvents = False ' With Target ' If Len(Target) = 3 Then .Value = 0 & ":" & Right(Target, 2) ElseIf Len(Target) = 3 Then .Value = Left(Target, 1) & ":" & Right(Target, 2) Else .Value = Left(Target, 2) & ":" & Right(Target, 2) End If .NumberFormatLocal = "hh:mm" ' End With ' Application.EnableEvents = True ' Else MsgBox "入力値が不正です。" ' With Target ' .Value = "" .Select End With Exit Sub ' End If End Sub 'この行まで

  • 初心者です。エクセルVBAの質問なのですが・・・

    エクセルのVBAで 例えば・・・IF関数を使いたい時に Public Sub 練習() 年齢 = InputBox("あなたは何歳ですか。数字だけを入力して下さい。") If 年齢 < 20 Then MsgBox "未成年ですね" ElseIf 年齢 < 30 Then MsgBox "20代ですね。" Else MsgBox "その他の年代ですね" End If End Sub                            のようなものを作って、実行をしたときに、数字を入れてOKボタンではなく、ダイアログボックスのキャンセルや閉じるボタンを押したときに、「その他の年代ですね」が出てきますが、それを出てこないようにすることはできますか?(例えば、キャンセルボタンのような役割をさせるなど・・・)  結構難しいですかね? 教えて下さい。お願いします。

  • 少数部の判定

    整数部2桁、小数部1桁まで入力可能なテキストの入力チェックは以下で正しいでしょうか。 コンパイラ環境は現在ないので確認お願いします。 ・以下でコンパイルエラーは発生しませんか ・入力チェックの方法として正しいでしょうか 間違いやまたよりよい方法がある場合はアドバイスください。 Dim a() as string a=Split(Text, ".") 'Textは入力値 If(UBound(0) = 1) Then '小数点が入力されたときはa=1となる If(length(a(0)) < 2) Then エラー Else If(length(a(1)) < 1) Then エラー End if Else If If(length(a(0)) < 2) Then エラー End If End If

  • 簡単な事だと思うのですが vba での質問です。

    Private Sub 処理名()  Dim a as Byte vbOK = MsgBox ("OK? or Cancel?",vbOKCancel,"確認")  If vbOK = 1 Then   MsgBox "OKが押されました"  else if   MsgBox "キャンセルが押されました"  End if  ~以下長々と処理~     長々と処理の最後~ End Sub 例えば上記のような、vbaマクロがあったとします。 もし、キャンセルを押した場合、有無を言わさず全ての処理を終了したい場合どのように記述をすれば宜しいのでしょうか? キャンセルを押した場合後続の長々と処理部分は全てキャンセルしたいのです。 私はその方法が分からないために分岐がある度にif分のネストが深くなってしまって困っています。 どなたかご教授下さい。 よろしくお願い致します。

  • Excel VBA For Each~Next構文についての質問

    こんにちは。 VBA初心者のものですが教えてください。 ※Excel2003です 「Sheet2のC29:U29のセルについて 1より小さければ小数第2位まで表示 1以上であれば小数第1位まで表示」 の構文を作りたいのですが、 「実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」 のエラーが出てしまい、実行できません。 作成した構文は以下の通りですが、どのように訂正すればよいか、 ご教示いただけますでしょうか。 よろしくお願いいたします。 Sub ケタ() ' Dim rngCell As Range For Each rngCell In Worksheets("Sheet2").Range("C29:U29") If rngCell.Value < 1 Then rngCell.Selection.NumberFormatLocal = "0.00" Else rngCell.Selection.NumberFormatLocal = "0.0" End If Next rngCell End Sub

  • エクセルVBAでファイル操作

    既出でしたら、すみません。 VBAでコードを書いているのですが、試行錯誤したうえで質問させていただきます。 以下、自分で書いたエラーになるコードです。(実行時エラー 424) If Dir("C:\業務\データ蓄積\ zaiko" & Format(Date, "yyyymmdd").xls) = "" Then MsgBox "該当なし" Else MsgBox "該当あり" End If データ蓄積にzaiko+"今日の日付"の.xlsが存在しなければ MsgBox "該当なし" 存在するなら MsgBox "該当あり" と、したいのですが どうにか、お力添えください。 宜しくお願いします。