- ベストアンサー
エクセルで行列要素の検索
エクセルのシート上に10×10の枠を作り、それぞれのセルに任意のアルファベットを入れて、表を作ります。 その表の中に、縦にA、B、Cと並んだセルがあった場合、そのAとBとCのセルを赤く色を塗るようなマクロを作りたいのですが、どういう仕組みにしたらいいか考えつきません。 いい仕組みがあれば助言お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
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)
マクロをご所望(なぜかは不明)なので、別解ということで… 1.セル A1 に式 =CHAR(RANDBETWEEN(65,90)) を入力 2.セル A1 を次の[条件付き書式]に設定 セルの値が 次の値の間 ="A" と ="C" パターン色: 赤 3.セル A1 を範囲 A1:J10 に複写
- nishi6
- ベストアンサー率67% (869/1280)
同一列内で、行方向に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行目は算式は変更する必要があります。
こういうことですか? ・選択範囲のセルを順次検索して値がBがどうか調べる。 ・その上のセル(offset(0,-1)がAで その下(offset(0,1)がCなら3つのセルの色を赤くする。
補足
そうです。まさにそれです。 比較はIFでなんとかなるとして、Bの検索のほうがどうすればよいかわかりません。