• ベストアンサー

エクセルで行列要素の検索

エクセルのシート上に10×10の枠を作り、それぞれのセルに任意のアルファベットを入れて、表を作ります。 その表の中に、縦にA、B、Cと並んだセルがあった場合、そのAとBとCのセルを赤く色を塗るようなマクロを作りたいのですが、どういう仕組みにしたらいいか考えつきません。 いい仕組みがあれば助言お願いします。

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

  • ベストアンサー
noname#252806
noname#252806
回答No.3

NO1です。 セルの検索は「For Each rg In 検索範囲」 を使うと 指定したエリアをエクセルが順次調査してくれます。 offsetを使うとこうなります。  Sub test() Dim rg As Range For Each rg In Range("A1:j10") If rg.Value = "B" Then   If rg.Offset(1, 0) = "C" And _ rg.Offset(-1, 0) = "A" Then Range(rg.Offset(1, 0).Address & ":" & rg.Offset(-1, 0).Address).Interior.ColorIndex = 3  End If End If Next rg End Sub

その他の回答 (3)

noname#204879
noname#204879
回答No.4

マクロをご所望(なぜかは不明)なので、別解ということで… 1.セル A1 に式 =CHAR(RANDBETWEEN(65,90)) を入力 2.セル A1 を次の[条件付き書式]に設定   セルの値が  次の値の間  ="A"  と  ="C"   パターン色: 赤 3.セル A1 を範囲 A1:J10 に複写

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

同一列内で、行方向にA-B-Cと連続した場合、赤く塗る例です。 10×10の範囲を選択して実行します。 Sub checkABC()   Dim r As Integer  '// 行カウンタ   Dim c As Integer  '// 列カウンタ   On Error Resume Next      With Selection     For c = 1 To .Columns.Count       For r = 1 To .Rows.Count - 2         If .Cells(r, c) = "A" _           And .Cells(r + 1, c) = "B" _           And .Cells(r + 2, c) = "C" Then                     .Cells(r, c).Interior.ColorIndex = 3           .Cells(r + 1, c).Interior.ColorIndex = 3           .Cells(r + 2, c).Interior.ColorIndex = 3                  End If       Next     Next   End With End Sub 10×10の表をA1から作った場合、条件付書式で、A3に条件を =OR(AND(A1="A",A2="B",A3="C"),AND(A2="A",A3="B",A4="C"),AND(A3="A",A4="B",A5="C")) のようにしてもできるはずです。ただし、1行目、2行目、8行目、10行目は算式は変更する必要があります。

noname#252806
noname#252806
回答No.1

こういうことですか? ・選択範囲のセルを順次検索して値がBがどうか調べる。 ・その上のセル(offset(0,-1)がAで その下(offset(0,1)がCなら3つのセルの色を赤くする。

excell
質問者

補足

そうです。まさにそれです。 比較はIFでなんとかなるとして、Bの検索のほうがどうすればよいかわかりません。

関連するQ&A