プロが教えるわが家の防犯対策術!

シートの最終行を取得し、5行目から最終行まで『C列の表示文字が「0」の時「M列のセル内容をクリア」する』というマクロを作成しているのですが、そう複雑ではないマクロのはずなのに動きません。
C列には別シートの特定セルの計算内容を=で持ってきており、表示としては「0」になるセルがあります。
例)
=シート2!A3 ←このような式が入っており、別シートの計算結果を引っ張ってきている
原因がお解りになる方いらっしゃいましたら、ぜひご教授頂ければありがたいです。

Sub テスト()

Dim i As Long
With ActiveSheet

For i = 5 To Cells(.Rows.Count, "O").End(xlUp).Row
If .Cells(i, 3).Value = 0 Then
.Cells(i, 13).Clear
End If
Next i

End With
End Sub

A 回答 (3件)

No.1 の追補



どこを直したか?判りにくかったですよね!(赤字の所が修正箇所です)
※「O」⇒「C」最終行を検出する列が違っていました。
※「Value = 0」⇒「Text = "0"」表示文字が…なので忠実にコード化しました。
「C列の表示文字が「0」の時「M列のセル内」の回答画像3
    • good
    • 0
この回答へのお礼

長らくログインできず、ベストアンサーを選べなくなっていました。。。申し訳ありません!
詳しい解説までありがとうございます!ValueではなくText、目からウロコでした。。。

お礼日時:2017/12/07 22:47

既に回答は出てますが。


別方法として、参照元の結果で判断するというのもありかなと。

Sub テスト()

Dim i As Long
With ActiveSheet

For i = 5 To Cells(.Rows.Count, "O").End(xlUp).Row
If Evaluate(.Cells(i, 3).Formula) = 0 Then
.Cells(i, 13).Clear
End If
Next i

End With
End Sub
    • good
    • 0
この回答へのお礼

長らくログインできずお礼ができておりませんでした、
計算結果がゼロ、という指定方法もあるのですね。
別解をありがとうございました!勉強になりました!

お礼日時:2017/12/07 22:49

こんな感じでしょうか?


-----------------------------------------------------------------------------------------
Sub テスト()

Dim i As Long
With ActiveSheet
For i = 5 To Cells(.Rows.Count, "C").End(xlUp).Row
If .Cells(i, 3).Text = "0" Then
.Cells(i, 13).Clear
End If
Next i
End With

End Sub
-----------------------------------------------------------------------------------------
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!