- ベストアンサー
8方向との数字の差が0か1の場合にセルを塗潰す方法
- 質問文章から8方向との数字の差が0か1の場合にセルを塗潰す方法を知りたいです。
- 6×6のセルがあり、1~99までの数字がランダムに重複ありで入っています。
- 左上から右下へセルの数字を見て、8方向の数字との差が0か1の場合にセルを塗潰したいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
全プログラムに獏がありました。B2とA1のような左斜めは無視されます。差し替えです。 ' Sub Macro1() ' Dim Cell1 As Range Dim Cell2 As Range Dim RowF As Boolean Dim ColF As Boolean [A1:M6].Interior.Pattern = xlNone ' For Each Cell1 In [A1:M6] RowF = Cell1.Row > 1 ColF = Cell1.Column > 1 ' For Each Cell2 In Cell1.Offset(RowF, ColF).Resize(2 - RowF, 2 - ColF) ' If Cell1 < "01" Or Cell2 < "01" Then ElseIf Cell1.Address <> Cell2.Address And Abs(Cell2 - Cell1) < 2 Then Cell1.Interior.Color = vbYellow Exit For End If Next Cell2 Next Cell1 End Sub
その他の回答 (5)
- neKo_quatre
- ベストアンサー率44% (735/1636)
> 8方向(上、下、左、右、右下、左下、右上、左上)の数字との差が0と1の場合に、 端っこの処理が面倒なので、0や99と2以上の差がある数で埋めとくのが良いかも。 A B C D 1 -99 -99 -99 -99 2 -99 01 11 15 3 -99 03 26 30 式が長くなるけど、フツーに条件付き書式を設定すれば良いのでは。 上のB2セルだと、 =OR((ABS(B2-A1)<=2), (ABS(B2-B1)<=2), (ABS(B2-C1)<=2), (ABS(B2-A2)<=2), (ABS(B2-C2)<=2), (ABS(B2-A3)<=2), (ABS(B2-B3)<=2), (ABS(B2-C3)<=2)) とか。
- msMike
- ベストアンサー率20% (364/1804)
確認させてください。 類似の質問を延々と続けられていますが、何か“超難問クイズ”擬きの作成をしておられるのでしょうか?
お礼
いつも回答頂きありがとうございます。 >何か“超難問クイズ”擬きの作成をしておられるのでしょうか? それを解くためにエクセルの可能性を探っています。 皆さんのお力を拝借して。
- watabe007
- ベストアンサー率62% (476/760)
訂正 Range("A1:M11").Interior.Color = xlNone ↓ Range("A1:M6").Interior.Color = xlNone
お礼
いつも回答頂きありがとうございます。 また、無駄のないソースとバリエーションも豊富ですね。 またよろしくお願いします。
- watabe007
- ベストアンサー率62% (476/760)
Sub Test() Dim c As Range, i As Long, n As Long Dim arrR As Variant, arrC As Variant Range("A1:M11").Interior.Color = xlNone arrR = Array(0, 0, 0, 1, 1, 2, 2, 2) arrC = Array(0, 1, 2, 0, 2, 0, 1, 2) On Error Resume Next For Each c In Range("A1:M6") For i = 0 To 7 With c.Cells(arrR(i), arrC(i)) n = Val(c.Value) - Val(.Value) If (Abs(n) = 1 Or Abs(n) = 0) And _ (.Column <> 7 And .Column <> 14 And .Row <> 7) Then .Interior.Color = vbYellow End If End With Next Next On Error GoTo 0 End Sub
- SI299792
- ベストアンサー率47% (772/1616)
B3が16でC4が17だから、塗りつぶしの対象ではないですか。 K1が27、K2が26、上より下が小さい場合は塗りつぶしの対象ですか?(対象としました) よく観察すると、ほとんどに差が0か1のところがあり、塗りつぶされます。 ' Sub Macro1() ' Dim Cell1 As Range Dim Cell2 As Range [A1:M6].Interior.Pattern = xlNone ' For Each Cell1 In [A1:M6] ' For Each Cell2 In Cell1.Resize(2, 2) ' If Cell1 < "01" Or Cell2 < "01" Then ElseIf Cell1.Address <> Cell2.Address And Abs(Cell2 - Cell1) < 2 Then Cell1.Interior.Color = vbYellow Cell2.Interior.Color = vbYellow Exit For End If Next Cell2 Next Cell1 End Sub 前回のリベンジです。 前回うまくいかなかったのは、F列にスペースなど見えない文字が入っていたのだと思います。 今回はスペースが入っていても動くようにしました。
お礼
いつも回答頂きありがとうございます。 >B3が16でC4が17だから、塗りつぶしの対象ではないですか。 ご指摘頂きありがとうございます。 目で見てるとやっぱり漏れてしまうものですね。 だからエクセルが必要なんです。
お礼
はじめまして。 回答頂きありがとうございます。 条件付き書式を駆使すれば可能性ありなんですね。