VBAコードで一致しない方にだけ流れる理由を調べる方法は?

このQ&Aのポイント
  • VBAコードで一致しない方にだけ流れる理由を調べる方法について教えてください。
  • 特定の条件で一致しない方にだけ流れるVBAコードの問題を解決したいです。
  • VBAコードで一致しない方にだけ流れる理由を調査するための手順を教えてください。
回答を見る
  • ベストアンサー

一致するように思えるのですが。

不思議でなりません。 以下のようなコードを書いていますが、 間違いなく一致するはずなのに一致しない方にのみ流れます。 (atariのメッセージが出ません) If Cells(n, 4) = Cells(8, 12) Then msgbox "atari" Else MsgBox Cells(n, 4) MsgBox Cells(8, 12) End If ということで、elseに比較する両方を表示してみましたが、 チャンと同じ数字(実際は194)が表示されます。 1ステップずつのトレースでもマウスを宛てると194と表示されます。 どのように調べればよいでしょうか。 考えられるポイントを教えてください。

  • to87
  • お礼率95% (337/354)

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

Cells(n, 4)、Cells(8, 12) どちらにも194が入ってはいるものの、片方は数値、片方は文字列なんて事はないですか? If Cells(n, 4) = Cells(8, 12) Then ↓ If Int(Cells(n, 4)) = Int(Cells(8, 12)) Then これだとどうでしょう。

to87
質問者

お礼

有り難うございます。 定義上は完璧に同じになっていますが。 不思議です。 intがありましたね、 これでやってみます。 多分これなら一致するでしょう。 原因は分かりませんが、結果は一致できそうです。

その他の回答 (2)

回答No.3

見かけ同じでもタイプが違う? 数値の194(右詰)と文字列の194(左詰)??

to87
質問者

お礼

有り難うございます。 定義上も違っていないのですが、 結果だけが一致しないのですよね。 何かしらが違うのでしょうが、 原因がつかめません。

回答No.1

そのコードだけでは、双方のセルの内容が一致する場合、atari としか出ません。 .Value つけたらどうなります? 省略可能だったとは思いますが。 If Cells(n,4).Value = Cells(8,12).Value たぶん関係ないかも。 その質問のコードは、実際とは違うんですよね? 他の箇所がおかしいということもありえます。 判定分が複雑な場合、分解してデバッグするという方法もあります。 b = (Cells(n, 4) = Cells(8, 12)) if b then まあ、あたり前だけど。 今回は1つだけかもしれないけど。 論理式が複数ある場合、それぞれにブレークポイントが設定できるようになるというメリットぐらいしかありませんが。 あとは、Cells に指定している、行と列が逆になっているとか。

to87
質問者

お礼

有り難うございました。 valueを付けたり、書式で表示形式を変えたり、 一通りやりました。 兎に角書いたとおり、1ステップ毎のトレースではチャンと194と 表示されているのですが。

関連するQ&A

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

    添付画像のようなエクセルで以下の標準モジュールを作っています。 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 だけ認識されません。 解決策をお願いします。

  • vbsのFolderExistsで部分一致をさせたい

    VBSで以下のコードを作成しましたが動作しません。 ********動作しない************************** if (objFileSys.FolderExists("200810*")= True) then  msgbox "yes" else  msgbox "no" end if ********動作する************************** if (objFileSys.FolderExists("200810")= True) then  msgbox "yes" else  msgbox "no" end if 部分一致でフォルダが存在するかをしたいのですが、 どうしたらいいのでしょうか。 よろしくお願いします。

  • 比較したいセルの文字列が一致したら"一致"

    いい案が思い浮かばないため皆さんのお知恵をお貸しください。 下はエクセルと思ってください    A列             B列 1  2009/01/07/22:55   2009/01/07/22:56 2  テスト1           テスト1 3  テスト2           テスト2 4  テスト3            テスト3 5  テスト4           テスト6 とこのようなシートがあります。 セルA1とB1は時間のため可変で比較対照としたくありません それ以外のA列とB列がすべて一致したとき一致 不一致があればセルA5が不一致とmsgboxで出したいと考えております。 まだ思案中で途中なのですが Sub test() Dim i As Integer i = 1 Do While Cells(i, 1) <> "" If Cells(i, 1) = Cells(i, 2) Then MsgBox "一致" i = i + 1 ElseIf Cells(i, 1) <> Cells(i, 2) Then MsgBox "不一致" i = i + 1 End If Loop End Sub いまはまだこの程度のレベルです 宜しくお願いします。

  • VBAにて、セルの内容と一致しない場合の処理

    VBAを独学で学んでいる者です。 実力・知識がないながらも検索エンジンなどを頼りに頑張っています。 しかしながらどうしてもわからない事があり、煮詰まってしまいましたので、質問させていただきました。 当方、VBAにてIEを操作し、セルの内容を自動入力していくプログラムを書いています。 以下に記述しているものや、「document.body.innertext」で取得したIEの情報と書き込みたいセルの内容が一致しない場合にエラーメッセージを表示したいのですが、どうもうまくいきません。 If~Thenなどを使うことで条件分岐できるのだとはおもうのですが、当方の記述ですと条件を無視(?)してElseに飛んでしまいます。 当方が記述している内容は以下です。 (Cells(1, 1)には文字列を入力しています。) ~ここから~ 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objIE.document.Links.Length - 1 'リンク数分まわす Debug.Print objIE.document.Links(n).innertext 'デバックで表示する 'リンク先(.text)をチェックする(文字列比較する) If objIE.document.Links(n).innertext = ActiveSheet.Cells(1, 1).Text Then objIE.document.Links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける Else MsgBox "NG!!", vbExclamation Exit Sub End If Next ~ここまで~ Else MsgBox "NG!!", vbExclamation Exit Sub を消すと、「For n = 0 To objIE.document.Links.Length - 1 」がinnertextを取得し、Cells(1, 1)の内容を読み取りクリックを実行してくれるのですが、Elseを入れると、Cells(1, 1)の内容と一致しているにも関わらず、Elseへ移行し、NGのメッセージボックスが出てきます。 記述が間違っているのでしょうか? 何か他の記述がございますようでしたらご教授願えますでしょうか? 宜しくお願い致します。

  • 実行時エラー13 型が一致しません。エラー2029

    エクセルです。 A1に「=a」と文字が入っていて、 #NAME? となります。 その状態でvbaで セルA1に「=a」が入っているのなら としたい為、 Sub test() If Cells(1, 1) = "=a" Then End If End Sub こうしたのですが、 実行時エラー13 型が一致しません。 になります。 vba中断中に、Cells(1, 1)の部分にマウスカーソルを当ててみると エラー 2029 となっています。 If Cells(1, 1) = "=a" Then が無理なら、 If Cells(1, 1) = "#NAME?" Then なら行けるかな?と思いましたが、 全く同じエラーになります。 最終的に何がやりたいかと言うと、 Sub test() If Cells(1, 1) = "=a" Then Rows(1).delele End If End Sub のように、#NAME?の場合は、その行を削除したいです。

  • 実行時エラー’13’ 型が一致しません VBA

    セルに以下の文字列が入っています。 A1=10(451 A2=452 そしてVBAにて、以下のプログラムを実行すると、「実行時エラー’13’ 型が一致しません」というエラーになってしまいました。 原因はA1に「( 」があるので文字列だからだと思うのですが、「IF 条件文」が成立しないことは満たすのでElse以下を実行されるのを期待していたのですが。 アドバイスをお願いします。 また、そもそも変数を宣言してないので「型が一致しない」というエラーの意味がわからないのですが。 If Cells(1, 1) - Cells(2, 1) = 1 Then Cells(3, 1) = 1 Else Cells(3, 1)="c" End If

  • EXCEL2007 VBA IF文について

    プログラム If Sheets("sheet1").Cells(85, 1).Value = Cells(13, 1).Value Then msgBox "true" Else msgBox"false" End If 値 Sheets("sheet1").Cells(85, 1).Value ← 0.38125 Cells(13, 1).Value ← 0.38125 上記のプログラムと値のとき、結果はtrueが表示されると思うのですが、なぜかfalseが表示されてしまいます。なぜ、falseが表示されるのか解りましたら教えてください。 値はウォッチで確認しています。

  • エクセルマクロで数値の一致ができない

    マクロで以下のコードを作成しましたが、うまくいきません。 If Left(Cells(3, 2).Value, 5) = Cells(3, 6).Value Then ……………………… End if Cells(3, 2),Cells(3, 6)の値が数値だと見かけでは一致していますが、 一致していないとされています。 ■うまくいかない Cells(3, 2)…123456789 Cells(3, 6)…12345 Cells(3, 2),Cells(3, 6)を文字に変えると問題なく動作します。 ■うまくいく Cells(3, 2)…abcdefgh Cells(3, 6)…abcde Cells(3, 2),Cells(3, 6)を数値でもうまくいくにはどうしたらいいのでしょうか。 よろしくお願いします。

  • VBA 時間の抜き出しが上手く処理できない

    時間の抜き出しをするのに下記のコードを候補に挙げましたが、 「'コロンが2個の場合 (時:分:秒)」の場合は上手く処理できますが 「'コロンが1個の場合 (分:秒)」の数値が上手く処理できません。 ’----------------------------------------------------------------------- Option Explicit Sub コロンの数を数える() Dim i As Long, cnt As Long, n As Variant For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row cnt = 0 '←cntをリセット Do n = InStr(n + 1, Cells(i, "A"), ":") If n = 0 Then Exit Do Else cnt = cnt + 1 End If Loop If cnt < 1 Then MsgBox "[:]がありません。" '←cntが1未満のときにメッセージを発出します。 End Else Cells(i, "B").Value = cnt End If Next End Sub Sub 時間抜き出し() Dim i As Long, cnt As Long Dim n As Single For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row n = InStr(n + 1, Cells(i, "A"), ":") 'コロン「:」の位置を特定する If Cells(i, "B") = 1 Then 'コロンが1個の場合 (分:秒) Cells(i, "C").NumberFormatLocal = "h:mm:ss" If Mid(Cells(i, "A"), n - 2, 1) = " " Or Mid(Cells(i, "A"), n - 2, 1) = "(" Then '10分以下の場合 Cells(i, "C") = Mid(Cells(i, "A"), n - 1, 4) Cells(i, "C") = "0:" & Cells(i, "C") Else '10分以上 Cells(i, "C") = Mid(Cells(i, "A"), n - 2, 5) Cells(i, "C") = "0:" & Cells(i, "C") End If Else 'コロンが2個の場合 (時:分:秒) Cells(i, "C").NumberFormatLocal = "h:mm:ss" Cells(i, "c") = Mid(Cells(i, "A"), n - 1, 7) End If n = 0 Next End Sub

  • 型が一致しません

    下記はセルが0の時、行全体を表示しないにするようにするVBAですが、型が一致しませんとエラーになります、どこを直せばいいのですか。 Dim I As Integer Sub Macro4() For I = 4 To 76 If Cells(I, 8) = 0 Then Rows("I:I").Select Selection.EntireRow.Hidden = True End If Next I End Sub

専門家に質問してみよう