• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:8方向の数字間差が指定した間差と同じ場合に塗り潰す)

8方向の数字間差が指定した間差と一致する場合に塗り潰す方法は?

このQ&Aのポイント
  • 8方向の数字間差が指定した間差と一致する場合にセルを黄色に塗り潰す方法を知りたいです。
  • 使用するエクセルは2016で、数字間差は1~99まで指定できます。
  • 具体的な例を挙げると、J5のセルが6の場合、I4、J4、K4、I5、I6、J6、K6、K5の8つの隣り合う数字との差が7となり、K5とI6が黄色く塗り潰されます。

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

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

参考に Sub Test()  Dim i As Long, j As Long, c As Range, c2 As Range  Application.ScreenUpdating = False  ActiveSheet.Rows(1).Insert  ActiveSheet.Columns(1).Insert  With Range("B2:H16,J2:P16")   .Interior.Color = xlNone   For Each c In .Cells    For Each c2 In Intersect(c.Offset(-1, -1).Resize(3, 3), .Cells)     If c.Address <> c2.Address And Abs(c.Value - c2.Value) = Range("S2").Value Then      c2.Interior.Color = vbYellow     End If    Next   Next  End With  ActiveSheet.Rows(1).Delete  ActiveSheet.Columns(1).Delete  Application.ScreenUpdating = True End Sub

sazanami0422
質問者

お礼

回答いただきありがとうございます。 早速、ソースを実行したところ、 やりたい通りの塗りつぶしができました。 ついでに添付図のB13が塗り潰しの間違いがわかりました。

その他の回答 (1)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

H列、P列、及び16行目は全数Null:空欄という条件でよければ 次のようなコードで行けると思います。 なお、なにか事情があって 1行目、あるいは1列目からデータを埋めているのかもしれませんが こういった場合、1列目、1行目を空ければ、 余計なエラー処理を施さなくとも済みます。 Option Explicit Sub Sample()    Dim SRow As Long  Dim SCol As Long  Dim ERow As Long  Dim ECol As Long  Dim KeyNum As Long  Dim RowCnt As Long  Dim ColCnt As Long    With ThisWorkbook.Sheets(1)      KeyNum = .Cells(1, 18).Value   SRow = 1    '以下左側ブロック   SCol = 1   ERow = 15   ECol = 7      For RowCnt = SRow To ERow    For ColCnt = SCol To ECol     MySub .Cells(RowCnt, ColCnt), KeyNum    Next ColCnt   Next RowCnt     SRow = 1    '以下右側ブロック   SCol = 9   ERow = 15   ECol = 15      For RowCnt = SRow To ERow    For ColCnt = SCol To ECol     MySub .Cells(RowCnt, ColCnt), KeyNum    Next ColCnt   Next RowCnt    End With   End Sub Sub MySub(adr As Range, KeyNum As Long)  Dim RowCnt As Long  Dim ColCnt As Long  For RowCnt = -1 To 1   For ColCnt = -1 To 1    On Error Resume Next    If (((ColCnt <> 0) Or (RowCnt <> 0)) And _      (adr.Offset(RowCnt, ColCnt).Value <> "") And _      (adr.Offset(RowCnt, ColCnt).Value - adr.Value = KeyNum)) Then     adr.Offset(RowCnt, ColCnt).Interior.Color = rgbYellow    End If    On Error GoTo 0   Next ColCnt  Next RowCnt End Sub

sazanami0422
質問者

補足

早速のご回答ありがとうございます。 教えて頂いて恐縮ですが、説明不足があるので補足します。 数字間差としてR1の数字と同じであれば黄色に塗り潰すと言ってますが、 教えて頂いたVBEを実行しても添付図と同じ数だけ塗り潰しがされないです。 それは、減算をして数字間差が+7の場合のみしか塗り潰さないためかなと思います。 減算して数字間差がー7の場合でも黄色に塗り潰す様にしないと添付図と同じ結果にならないのかと思います。

関連するQ&A