• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:検索値と同じ値か、左右の数字と連続数字なら塗潰す。)

Excelでのセル塗りつぶしに関する質問

このQ&Aのポイント
  • Excelでのセル塗りつぶしに関する質問について解説します。
  • 質問文章では、5x6マスの中に数字が入っており、検索値と一致するセルを塗りつぶす方法について説明されています。
  • 使用するエクセルのバージョンや注意事項も記載されています。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

修正 Sub Test3() Dim i As Long, myArea As Range Dim myRang As Range, c As Range Range("A12:M521").Clear For i = 1 To Range("O1").Value Range("A1:M11").Copy Cells(i * 12 + 1, "A") Set myArea = Cells(i * 12 + 1, "A").Resize(11, 13).SpecialCells(2) Cells(2, i + 14).Copy Cells(i * 12, "A") For Each myRang In myArea.Areas For Each c In myRang.Cells If Val(c.Value) = Val(Cells(i * 12, "A").Value) Then c.Interior.Color = vbYellow If c.Column = myRang.Column Then If Val(c.Value) + 1 = Val(c.Offset(, 1).Value) And _ Val(c.Offset(, 1).Value) + 1 = Val(c.Offset(, 2).Value) Then c.Resize(, 3).Interior.Color = vbRed ElseIf Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Resize(, 2).Interior.Color = vbRed End If Else If Val(c.Offset(, -1).Value) + 1 = Val(c.Value) Then c.Offset(, -1).Resize(, 2).Interior.Color = vbRed ElseIf Val(c.Value) + 1 = Val(c.Offset(, 1).Value) And _ Val(c.Value) + 2 = Val(c.Offset(, 2).Value) Then c.Resize(, 3).Interior.Color = vbRed ElseIf Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Resize(, 2).Interior.Color = vbRed End If End If End If Next Next Next End Sub

moguo4649
質問者

お礼

素早い修正ありがとうございました。 またよろしくお願いします。

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>01、11といった、一番左端にある数字の検索結果では、 >01と02が赤くならず、01だけが黄色。 >11、12が赤くならず、11だけが黄色。 修正しました。 Sub Test2() Dim i As Long, myArea As Range Dim myRang As Range, c As Range Range("A12:M521").Clear For i = 1 To Range("O1").Value Range("A1:M11").Copy Cells(i * 12 + 1, "A") Set myArea = Cells(i * 12 + 1, "A").Resize(11, 13).SpecialCells(2) Cells(2, i + 14).Copy Cells(i * 12, "A") For Each myRang In myArea.Areas For Each c In myRang.Cells If Val(c.Value) = Val(Cells(i * 12, "A").Value) Then c.Interior.Color = vbYellow If c.Column = myRang.Column Then If Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Resize(, 2).Interior.Color = vbRed End If Else If Val(c.Offset(, -1).Value) + 1 = Val(c.Value) And _ Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Offset(, -1).Resize(, 3).Interior.Color = vbRed ElseIf Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Resize(, 2).Interior.Color = vbRed End If End If End If Next Next Next End Sub

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

質問とありますが、結局あなたこの問題のどこが解らないのでしょうか? 単にマクロを作ってくれと言っているようにしか見えません。 逆に仕様が良くわからないのでこちらから質問します。 ・「検索値欄の検索値も1つコピーする。」と、ありますがどこにコピーするのでしょうか。 ・塗りつぶすのは「複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピー」した方?大元のA1:M11のセル?  #例題の結果を見る限りではA1:M11のセルの方を塗りつぶしているようですが。 ・例題の結果で、E7:F7が赤で塗りつぶされずにF7だけが黄色で塗りつぶされるは何故? ・検索値が41だとして、マスの中に39,40,41,42,43,44と数値があった場合、黄色く塗りつぶすのは40,41,42だけ?それとも39~44全て? ・もしかして何かの問題集の問題ではないですよね?  #もし、問題集の問題だとしたら、私なら「(2)複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピーする」と「(3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。」を別問題として出題すると思います。

moguo4649
質問者

お礼

ご質問ありがとうございます。 >単にマクロを作ってくれと言っているようにしか見えません。  例題として挙げた処理をマクロでどうやって作ればいいのかわからないので質問させてもらっています。 >「検索値欄の検索値も1つコピーする。」と、ありますがどこにコピーするのでしょうか。   直下です。複写数の数だけ。 >・塗りつぶすのは「複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピー」した方?大元のA1:M11のセル?  コピーした方です。 >・例題の結果で、E7:F7が赤で塗りつぶされずにF7だけが黄色で塗りつぶされるは何故?   回答の間違いです。赤く塗り潰しが正しいです。 >・検索値が41だとして、マスの中に39,40,41,42,43,44と数値があった場合、黄色く塗りつぶすのは40,41,42だけ?それとも39~44全て?   検索値が41なら、黄色は無しです。赤色は40、41、42です。 >もしかして何かの問題集の問題ではないですよね?  そのような事はありません。完全オリジナルです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>(2)検索値の左右が検索値との連続数字なら、検索値とその左右のセルを赤色で塗潰す。 >E10、F10:連続数字(41、42)が赤色で塗潰される。 検索値を含む2連続も含むのですね Sub Test() Dim i As Long, myArea As Range Dim myRang As Range, c As Range Range("A12:M521").Clear For i = 1 To Range("O1").Value Range("A1:M11").Copy Cells(i * 12 + 1, "A") Set myArea = Cells(i * 12 + 1, "A").Resize(11, 13).SpecialCells(2) Cells(2, i + 14).Copy Cells(i * 12, "A") For Each myRang In myArea.Areas For Each c In myRang.Cells If Val(c.Value) = Val(Cells(i * 12, "A").Value) Then c.Interior.Color = vbYellow If c.Column > myRang.Column Then If Val(c.Offset(, -1)) + 1 = Val(c.Value) And _ Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Offset(, -1).Resize(, 3).Interior.Color = vbRed ElseIf Val(c.Offset(, -1).Value) + 1 = Val(c.Value) Then c.Offset(, -1).Resize(, 2).Interior.Color = vbRed ElseIf Val(c.Value) + 1 = Val(c.Offset(, 1).Value) Then c.Resize(, 2).Interior.Color = vbRed End If End If End If Next Next Next End Sub

moguo4649
質問者

補足

いつも大変お世話になっています。 質問の例題とは別に下記を検索対象として、 複写数:43、検索値:1~43にして 教えて頂いたソースを貼りつけて実行したところ、 01、11といった、一番左端にある数字の検索結果では、 01と02が赤くならず、01だけが黄色。 11、12が赤くならず、11だけが黄色。 どこが悪いのでしょうか? 〇検索対象 06 11 23 27 32 42  04 09 20 24 38 39 08 16 19 31 35 42  11 12 13 21 23 38 01 03 10 21 26 34  07 17 22 25 36 40 05 13 29 35 37 41  04 10 22 29 30 32 07 14 15 18 33 39  02 15 17 20 30 34 06 24 26 35 37 41  08 18 23 27 42 43 01 02 09 14 31 41  07 08 17 19 40 41 03 12 16 18 23 30  05 06 12 13 33 37 03 10 24 29 30 40  08 13 18 24 30 32 01 02 09 19 22 42  03 34 37 38 41 43 〇複写数:43 〇検索値:1~43

関連するQ&A