dポイントプレゼントキャンペーン実施中!

下記エクセル画像で検索値を入力したら抽出されたロットNoの中から連番だけに背景色を付けたいと思っています。例) 12.13.14.15.17.18.19 の場合だと12-15、18,19に色を塗りたいです。

最近VBAを勉強し始めたばかりですが自分なりに考え作成してみましたが、
上手くいきません。
なのでお手数をおかけしますが、どこが間違っていてどのように修正したら良いのかご教授ください。

「VBAで連番に色を付けたい」の質問画像

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

  • はい。
    ロットの抽出に関しては完了しています。

    No.2の回答に寄せられた補足コメントです。 補足日時:2022/02/09 18:51

A 回答 (4件)

#3です


コードは良く見えませんが、上からループ条件式が1つだけのような感じでしょうか

上からループする場合(条件をべたに考えると)
書き方は色々ありますが

初めに色を付ける対象の範囲の色をクリアーする
(色を付けるのだから下準備が必要です)

範囲.interior.Colorindex= xlNone (カラーインデックスの場合)
範囲はRange(cells(2, 列), cells(rows.count, 列).end(xlup))などで

対象の範囲をループする(ループカウント変数 i の場合 )

for i= 2 to cells(rows.count, 列).end(xlup).row
セルの値が数字でない場合を想定して
if isNumeric(cells(i,列).value) then 数値になる値のみに対して
if cells(i,列).value=cells(i+1,列).value-1 then 連番ならば色を付ける
*この時に組となるセル両方に色を付ける(ポイント)
cells(i,列).interior.Colorindex =3
cells(i+1,列).interior.Colorindex =3
end if
end if
next 繰り返し

実行を1つ1つ追うと少し問題があるようです。
*ステップ実行などで自身でデバッグすると判ります。
また、1色の場合は、#3でも上げましたが12.13.14.15.17.18.19 の場合、すべてに色が付くと思います。

cells(i,列).interior.Colorindex =3 を考える
cells(i+1,列).interior.Colorindex =3で色を付けているので
繰り返し処理の中で重複して実行されてしまいます。
連番グループの初めだけ実行するようにする
範囲の色をクリアーしているので、色が付いていなかったらと条件設定し
先頭(連番の始まりを示す為、色を変える)
If cells(i,列).interior.Colorindex = xlNone then
cells(i,列).interior.Colorindex = 17
End If

cells(i+1,列).interior.Colorindex =3を考える
ループの最後に範囲の外に色が付く可能性があります。

ループの最後のひとつ前まで実行する条件を付ける
先頭に属する連番を示す為、先頭色と色を変える

If i < cells(rows.count, 列).end(xlup).row then
cells(i,列).interior.Colorindex = 24
End If

条件など参考になりますでしょうか?
    • good
    • 0
この回答へのお礼

丁寧に解説していただきありがとうございます
これを参考にもう一度作成したいと思います

ありがとうがざいました

お礼日時:2022/02/09 18:57

こんにちは


申し訳ないのですが、回答ではありません

ロジックを考えてみましたが、目的を達成できない(判り難い)処理になると思います。(コードが見えないのと、目的を明確に理解していませんが)

一色で色を付ける場合、続いている(連番であるセル)を対象にすると
12.13.14.15.17.18.19 グループは2つですが、すべてに色が付く事になりますね。つまりどこが区切りなのか分かりません。
色を変えるのならわかりますがね。(一色とは書いていませんが)

グループごとに色を変えるか、逆に抜けている番号を書き出すとかにした方が良いのではないかと思いました。
要 考察と思いますよ

ちなみに、コード添削やチェックの場合は図ではなく文字列で投稿するようにしましょう。(出来るだけ環境やバージョンもね)
再現の為のデバッグや回答の為の検証を図を見ながらコードをローカルに打つ人はなかなかいないと思います(面倒でしょう?スマホなら特にね)
ざっくりで回答をしてやり取りを何度かして、、これも面倒ですしね
まぁ、やり取りのタイミングが合えば良いでしょうけれど、なかなかですよね。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
たしかに区切りをつけた方がいい場合もあると思うので
グループごとに色を塗るようにしたいと思います、

お礼日時:2022/02/09 18:50

>検索値を入力したら抽出されたロットNoの中から連番だけに背景色を付けたいと思っています。



検索値を入力して、ロットNoを抽出するのは、既に完了しているのですか。
この回答への補足あり
    • good
    • 0

おはようございます。



すみませんが、コードが見えないのと、下記の理由もよく分かりません。
>例) 12.13.14.15.17.18.19 の場合だと12-15、18,19に色を塗りたいです。
→17もでしょうか? 記載で抜けただけでしょうか?
あと、色を塗るのは、F列になるのでしょうか?
    • good
    • 1

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