- ベストアンサー
セルの塗りつぶしについて
- 5×6のセルにランダムに数字を入れ、指定した数字と周囲の数字を塗りつぶす方法についての質問です。
- 具体的な入力値に応じて、5×6のセルを検査し、指定した数字とその周囲の数字を同じ色で塗りつぶします。
- 質問者は、Excel 2010を使用しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
お邪魔します 出来ました 配列数式を、用い 条件書式により セル色を、変化させた なら、 単純ですね 基本式ですが 08が、入っている場所の 条件書式の、式です =SUMPRODUCT((D3:F5=$B$3)*(1-ISBLANK(D3:F5))+(D3:F5=$B$4)*(1-ISBLANK(D3:F5))+(D3:F5=$B$5)*(1-ISBLANK(D3:F5))+(D3:F5=$B$6)*(1-ISBLANK(D3:F5))+(D3:F5=$B$7)*(1-ISBLANK(D3:F5))+(D3:F5=$B$8)*(1-ISBLANK(D3:F5)))>0 如何ですか?
その他の回答 (3)
- bunjii
- ベストアンサー率43% (3589/8249)
回答No.2の別解です。 条件式は9個に省略できます。 入力値1~6を同時に検索して塗りつぶす条件式 =COUNTIF($I$1:$I$6,A1) 右上のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,1,1)) 左側のセルを塗りつぶす条件式 =COUNTIF($I$1:$I$6,OFFSET(A1,0.1)) 左下のセルを塗りつぶす条件式 =COUNTIF($I$1:$I$6,OFFSET(A1,-1,1)) 上のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,1,0)) 下のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,-1,0)) 右上のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,1,-1)) 右側のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,0,-1)) 右下のセルを塗りつぶす条件式 =COUNTIF($i$1:$I$6,OFFSET(A1,-1,-1)) 添付画像は入力値と同じ値のセルは薄い黄色、周りのセルは薄い緑色に塗りつぶしました。
- bunjii
- ベストアンサー率43% (3589/8249)
入力値が同時に6種類あるとほとんどのセルが塗りつぶされてしまいます。 提示のデータで手動処理したときD1とC5が塗りつぶしなしの状態で残ります。 そのような結果で良いのでしょうか? 条件付き書式で「数式を使用して、書式設定するセルを決定」を使えば処理可能です。 入力値1がI1セルにあるものとして入力値1についての数式を設定するには以下のような数式になります。 A1:F5を選択した状態で条件付き書式を設定します。 入力値1と同じ値のセルを塗りつぶす条件式 =A1=$I$1 左上のセルを塗るつぶす条件式 =A1=OFFSET(A1,1,1)=$I$1 左隣りのセルを塗りつぶす条件式 =A1=OFFSET(A1,0,1)=$I$1 左下のセルを塗りつぶす条件式 =A1=OFFSET(A1,-1,1)=$I$1 上のセルを塗りつぶす条件式 =A1=OFFSET(A1,1,0)=$I$1 下のセルを塗りつぶす条件式 =A1=OFFSET(A1,-1,0)=$I$1 右上のセルを塗りつぶす条件式 =A1=OFFSET(A1,1,-1)=$I$1 右隣りのセルを塗りつぶす条件式 =A1=OFFSET(A1,0,-1)=$I$1 右下のセルを塗りつぶす条件式 =A1=OFFSET(A1,-1,-1)=$I$1 入力値1~6を同時に検索対象にするときは上記の条件式に準じて$I$1を$I$2~6に修正した数式を追加設定してください。 添付画像は入力値1のみについてExcel 2013で検証したものですがExcel 2010でも再現できるはずです。
お礼
回答頂きありがとうございます。 OFFSETの使いこなしで実現できるのですね。 私のエクセルでも同じ結果になりました。 ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17070)
面倒な問題だな。 テストに手間と時間がかかって大変。 ーー 下記コードの Cells(r, c).Select までぐらいなら、VBAをする人は、だれでもわかるだろう。 本質問は丸投げだな。 ーー 質問者の方で、下記のコードをテストしてみて。 小生はマス目にない値ではテストしてない。 他にINTERCEPT関数利用など考えたが、良くならない。 もっとすっきりしたコードの回答が別に出れば小生も勉強します。 ーー 例データ A1:F5 必ず全セルの値は数値データとする 01は書式設定で01に見えているように するものとする。 5 9 21 25 38 41 4 8 20 24 30 37 7 19 23 29 35 43 1 6 15 18 37 39 3 12 17 28 36 37 下記X= の値をいろいろ変えてテストすることになる。 標準モジュールに Sub test01() Range("a1:F5").Interior.ColorIndex = xlNone MsgBox "AA" x = 12 Set a = Range("a1:F5").Find(what:=x, LookIn:=xlValues, LookAt:=xlWhole) a.Select r = a.Row c = a.Column Cells(r, c).Select MsgBox "B" '指定の値のセルが見つかった h = Array(0, -1, -1, -1, 0, -1, 1, 0, -1, 0, 1, 1, -1, 1, 0, 1, 1) For i = 1 To 16 Step 2 If r + h(i) < 6 And c + h(i + 1) < 7 And r + h(i) > 0 And c + h(i + 1) > 0 Then Cells(r + h(i), c + h(i + 1)).Select MsgBox "A" Selection.Interior.Color = vbGreen Else MsgBox "XXX" ’範囲外 End If Next i End Sub 上記は Cells(r, c).Select でテスト状況(中間での状況)でわかりやすいように、あえてセルに色を付けてないが、納得で来たら、そのセルにも、色を付けるコードを入れてください
お礼
回答頂きありがとうございます。 VBAではこの様に処理する様に記述するのですね。 早速やってみます。
お礼
やりたいことをズバリ実現して頂きありがとうございます。 添付頂いたエクセルを参考にして同様に処理することができました。 丁寧な回答ありがとうございました。 また、質問を見かけられたら是非回答頂けると助かります。