重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

特定のセルの色がピンクで同じ行の特定のセルが空欄だった場合に「要確認」と入力されるマクロを作成しているのですが、ある列の処理をしようとするとそこだけオーバーフローになってしまいます。なぜでしょうか?

エラーが出るコードです。↓

Sub ピンク()

Dim pink As Long, i As Long
pink = Sheets(1).Range("E3").Interior.Color

Sheets(2).Select

For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row

If Cells(i, "A").Interior.Color = pink And _
Cells(i, "AD").Interior.Color = pink And _
Cells(i, "AF") = "" Then
Cells(i, "AF") = "要確認"
Cells(i, "AF").Font.Color = -16776961
End If

Next

End Sub

↑以上です。
AF以外全く同じコードを使用している部分ではエラーが起こりません。
よろしくお願いします。

質問者からの補足コメント

  • 回答ありがとうございます!
    デバッグでは、
    If Cells(i, "A").Interior.Color = pink And _
    Cells(i, "AD").Interior.Color = pink And _
    Cells(i, "AF") = "" Then
    の部分が黄色くなります。
    赤色の部分をRGB関数等に書き換えてもダメでした…。
    .Interior.Colorで参照先のセルの色がピンクでした!
    勉強になります。ありがとうございます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/03/29 15:33
  • 回答ありがとうございます!
    デバッグでは、
    If Cells(i, "A").Interior.Color = pink And _
    Cells(i, "AD").Interior.Color = pink And _
    Cells(i, "AF") = "" Then
    のところが黄色くなります。
    フォントカラーの指定は、録画機能で記録した値をそのままぶち込んでました…。
    完全に独学なのでデータ型の使い分け等も何となくだったので勉強になります。
    コードに問題がないとするとどういった状態の場合にオーバーフローが返ってきてしまうのでしょうか?どこに問題があるかおおよその検討の付け方等があれば教えていただきたいです…。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/29 15:39

A 回答 (7件)

あ、test1でも多分


> If .Cells(i, "AF").Value = "" Then
この行でエラーになるでしょうね
エラー発生時のAF列のデータを見てください
日付形式に設定されたセルに"99999999"とか入ってませんか?
    • good
    • 0
この回答へのお礼

> 日付形式に設定されたセルに"99999999"とか入ってませんか?
これでした!なので処理の前に別の文字列に置き換えて処理後に元に戻すようにしたらオーバーフローを回避することが出来ました!ありがとうございました!

お礼日時:2020/03/31 20:38

end-uさんすみません。

投稿前に確認せず
色々確認している中にかぶりました。。
勉強になります。。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!無事解決できました!

お礼日時:2020/03/31 20:39

#1です。


昔の記憶で、もやもや、同じような事が、、
確認しましたが、原因が思い出せず、、再現も出来ない為、回答をやめようと思いましたが
該当せずともヒントになればと、、的(思い)違いなら忘れてください。
Windows10 Excel2013、2016 共に再現できませんでした。

end-uさんの回答にあるように
pink As Longは、Variant もしくはDoubleに変更した方が良いかも知れません。

If Cells(i, "A").Interior.Color = pink And Cells(i, "AD").Interior.Color = pink And Cells(i, "AF") = "" Then ’オーバーフロー

=で結ぶ左辺と右辺は、右辺に影響されると記憶しています。
完全にあてずっぽうですが、Cells(i, "AF") = "" が影響している?
なので、Cells(i, "AF") = "" を And でつながず、別に If Cells(i, "AF") = "" Then でどうでしょう。
    • good
    • 0

すみません対処方法を書いてませんでした


AF列の書式設定を標準や文字列に変更可能なら、そうしてください

データ上、書式を日付や通貨にしないといけないという制限がある場合、判定にValue2プロパティを使ってみましょう
If .Cells(i, "AF").Value2 = "" Then

それで対応できない場合はまた考えてみます
    • good
    • 1

re:補足


なるほどその行ですか
こちらで再現しないので正解はこれ、とはいかないんですが
できるだけ紛れの無いコードに修正して、試してみてもらっていいでしょうか

判定をAnd条件ではなく分割判定にしてみる
Sub test1()
  Dim pink As Variant
  Dim i  As Long

  pink = Sheets(1).Range("E3").Interior.Color
  With Sheets(2)
    For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Cells(i, "A").Interior.Color = pink Then
        If .Cells(i, "AD").Interior.Color = pink Then
          If .Cells(i, "AF").Value = "" Then
            .Cells(i, "AF").Value = "要確認"
            .Cells(i, "AF").Font.Color = 255
          End If
        End If
      End If
    Next
  End With
End Sub

Cellsプロパティの列判定を変更してみる
Sub test2()
  Dim pink As Variant
  Dim i  As Long

  pink = Sheets(1).Range("E3").Interior.Color
  With Sheets(2)
    For i = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Cells(i, 1).Interior.Color = pink Then
        If .Cells(i, 30).Interior.Color = pink Then
          If .Cells(i, 32).Value = "" Then
            .Cells(i, 32).Value = "要確認"
            .Cells(i, 32).Font.Color = 255
          End If
        End If
      End If
    Next
  End With
End Sub

Sheets(2)にグラフなどのオブジェクトがあったりしますか?
    • good
    • 0

どの行でオーバーフローになるのでしょう?


Qchan1962さんも書かれてますが、そのコード自体には問題なさそうなんですよね
エラーが出たり出なかったり、という場合はシートやセルの状態に原因があったりするような気もします
または他のプロシージャが関係してたりとか、参照設定が問題だったりとか。

で、...Font.Color = -16776961 ってあまり見ない指定ですが何か理由ありますか?
RGB関数の戻り値って0~16777215 の範囲なので、16777216-16776961=255、を指定してるのと同じですよね
定数vbRedでもいいですし

あと関係ないと思いますが
> Dim pink As Long
RGB関数の戻り値がLong型なので全然問題ないのですが
オブジェクトブラウザで見ると実はInterior.ColorプロパティってVariant型なんですね
ただし
Dim pink As Variant で受けてみると Variant/Double、内部処理形式DoubleのVariant型ってやつですね
この辺りはあまり気にしなくていいですがColorプロパティに合わせるんだったら
Dim pink As Variant がベターなのかな
この回答への補足あり
    • good
    • 0

>AF以外全く同じコードを使用している部分ではエラーが起こりません。


つまり、Cells(i, "AF").Font.Color = -16776961 ここがオーバーフローするのですか?

-16776961これ赤だったかと思いますが、
当てずっぽで申し訳ありませんが、RGB関数やColorIndexなどを使用してもダメでしょうか?
Cells(i, "AF").Font.Color =RGB(255, 0, 0)
Cells(i, "AF").Font.ColorIndex = 3

また、.Interior.Colorですが、条件書式などで色付けされたセルの色では?
その場合、.DisplayFormat.Interior.Colorになりますね。

ただ、コードを見る限り私には、エラー要因を見つけられませんです。
この回答への補足あり
    • good
    • 0

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