
特定のセルの色がピンクで同じ行の特定のセルが空欄だった場合に「要確認」と入力されるマクロを作成しているのですが、ある列の処理をしようとするとそこだけオーバーフローになってしまいます。なぜでしょうか?
エラーが出るコードです。↓
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以外全く同じコードを使用している部分ではエラーが起こりません。
よろしくお願いします。
No.6
- 回答日時:
#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 でどうでしょう。
No.5
- 回答日時:
すみません対処方法を書いてませんでした
AF列の書式設定を標準や文字列に変更可能なら、そうしてください
データ上、書式を日付や通貨にしないといけないという制限がある場合、判定にValue2プロパティを使ってみましょう
If .Cells(i, "AF").Value2 = "" Then
それで対応できない場合はまた考えてみます
No.3
- 回答日時:
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)にグラフなどのオブジェクトがあったりしますか?
No.2
- 回答日時:
どの行でオーバーフローになるのでしょう?
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 がベターなのかな
No.1
- 回答日時:
>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になりますね。
ただ、コードを見る限り私には、エラー要因を見つけられませんです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
エクセル 上下で列幅を変えるには
-
特定の文字がある行以外を削除...
-
EXCELで最後の行を固定
-
エクセル マクロで数値が変っ...
-
エクセルのセルに指定画像(.jpg...
-
連続データが入った行の一番右...
-
Excel 時刻の並び替え
-
Excel グラフのプロットからデ...
-
エクセル マクロ オートフィ...
-
A1に入力された文字列と同じ文...
-
エクセル 時間の表示形式AM/PM...
-
Excelで結合されたセルの間に列...
-
excel 小さすぎて見えないセル...
-
Excel ウインドウ枠の固定をす...
-
excel 同じ番号のデーターを横...
-
Excelのフィルター後の一番上の...
-
エクセルのマクロで意図しない...
-
AのセルとB行を比較して、一致...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字がある行以外を削除...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルで特定の文字列が入っ...
-
Excelのフィルター後の一番上の...
-
エクセル 上下で列幅を変えるには
-
エクセル マクロ オートフィ...
-
エクセル マクロで数値が変っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
結合されたセルをプルダウンの...
-
Excel グラフのプロットからデ...
-
excelのデータで色つき行の抽出...
-
excel 小さすぎて見えないセル...
-
A1に入力された文字列と同じ文...
-
EXCELで最後の行を固定
-
Excel ウインドウ枠の固定をす...
-
エクセルVBA 最終行を選んで並...
-
VBAで色の付いているセルの行削除
-
連続データが入った行の一番右...
-
エクセル2016で時間を入力して...
-
チェックボックスをクリックし...
おすすめ情報
回答ありがとうございます!
デバッグでは、
If Cells(i, "A").Interior.Color = pink And _
Cells(i, "AD").Interior.Color = pink And _
Cells(i, "AF") = "" Then
の部分が黄色くなります。
赤色の部分をRGB関数等に書き換えてもダメでした…。
.Interior.Colorで参照先のセルの色がピンクでした!
勉強になります。ありがとうございます。
回答ありがとうございます!
デバッグでは、
If Cells(i, "A").Interior.Color = pink And _
Cells(i, "AD").Interior.Color = pink And _
Cells(i, "AF") = "" Then
のところが黄色くなります。
フォントカラーの指定は、録画機能で記録した値をそのままぶち込んでました…。
完全に独学なのでデータ型の使い分け等も何となくだったので勉強になります。
コードに問題がないとするとどういった状態の場合にオーバーフローが返ってきてしまうのでしょうか?どこに問題があるかおおよその検討の付け方等があれば教えていただきたいです…。