none
vba 実行時エラー<デバッグ>’13’「型が一致しません」 RRS feed

  • 質問

  • デバッグ「型が一致しません」に悪戦苦闘しています。

    Sub Step2_D()

            lRow = Cells(Rows.Count, 1).End(xlUp).Row

            For i = lRow To 2 Step -1

    If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then

    Worksheets("step2").Cells(i, L_COR_G_OV_3).Value = ""

              End If

            Next i

    End Sub

    「If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then」に黄色の塗りつぶしが出て解消できません。定数TYAKUJUN」に「16」、「C_4」に「40」と直接数値を入力したり、また引き算の前後を入れ替えたり、文字を打ち換えたり、勿論再起動もしました。まったく解消方法がわかりません。よろしくお願いします。

    2019年12月15日 11:37

すべての返信

  • Worksheets("step2").Cells(i, TYAKUJUN).Value
    Worksheets("step2").Cells(i, C_4).Value
    は共に variant 型のデーターが返されますが、実際のデータ内容の型が異なっていれば、演算時に「型が一致しません」になるでしょう。

    また Cells で複数セルが返されるのであれば .Value には配列データが入るはずなので、それを数値演算するのもダメでしょうね。

    実際にセルや定数(TYAKUJYUN など)に入っているデータが何であるか示されていませんのでそれ以上は分かりません。


    Hebikuzure aka Murachi Akira


    2019年12月16日 0:58
  • どのシートに Sub Step2_D が記述されているのか分かりませんが、
    その記述部分(先頭)に Option Explicit を追加して、
    Sub Step2_D 内で使われている変数すべてを宣言してはいかがでしょう?

    また、紹介されているコードだけでは、実際のセルの値がわからないので判断できません。
    当該ファイルを OneDrive, Dropbox などでシェアしていただけませんか?


    Ashidacchi -- http://hokusosha.com

    2019年12月16日 4:41
  • デバッグ「型が一致しません」に悪戦苦闘しています。

    Sub Step2_D()

            lRow = Cells(Rows.Count, 1).End(xlUp).Row

            For i = lRow To 2 Step -1

    If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then

    Worksheets("step2").Cells(i, L_COR_G_OV_3).Value = ""

              End If

            Next i

    End Sub

    「If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then」に黄色の塗りつぶしが出て解消できません。定数TYAKUJUN」に「16」、「C_4」に「40」と直接数値を入力したり、また引き算の前後を入れ替えたり、文字を打ち換えたり、勿論再起動もしました。まったく解消方法がわかりません。よろしくお願いします。

    ウォッチリストやイミディエイトウィンドウなどで
    Worksheets("step2").Cells(i, TYAKUJUN).Value と
    Worksheets("step2").Cells(i, C_4).Value の値及び
    型を調べてみてください。

    おそらくどちらかもしくは両方が数値型 (Byte, Integer,
    Long, LongLong, Decimal などの整数型もしくは
    Single, Double などの実数型, Date 型など) でないか
    暗黙的に数値型に変換できない型であると思われます。

    2019年12月24日 6:37
  •  lRow = Cells(Rows.Count, 1).End(xlUp).Row
    この記述が気になります。

    このコードを配置したモジュールが
    Worksheets("step2") であれば、
    このシートの1列目の最終行の行番号になりますが
    標準モジュールなら、
    アクティブなシートの1列目の最終行の行番号になります。

    私だったら
    lRow = Worksheets("step2").Cells(Rows.Count, 1).End(xlUp).Row
    と明示的にシート名を指定します。


    2019年12月25日 9:36
  • ひょっとしたら 括弧 を 忘れられているのでは??

    If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then

    If Worksheets("step2").Cells(i, TYAKUJUN).Value - Worksheets("step2").Cells(i, C_4).Value > 3 Then

    とする必要がありそうですが・・・

    2020年1月2日 7:58