- ベストアンサー
マクロについて教えてください
A1~K1のセルにA・B・C・Dとアルファベットが並んでいます。 その中でBが3連続以上並んでるセル(3連続なら3とものセル)に色をつけます。 それをB2~K2 C3~K3と横へ動いていくように繰り返し行うやり方を教えて下さい。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
失礼..orz >=OR(PHONETIC(IV3:B3:)="BBB",PHONETIC(A3:C3)="BBB",PHONETIC(B3:D3)="BBB") =OR(PHONETIC(IV3:B3)="BBB",PHONETIC(A3:C3)="BBB",PHONETIC(B3:D3)="BBB") 余計な『:』が入ってました。 ついでに。 Sub try2の対象範囲をB3:AF16に修正して対処する場合は ...Interior.Color = vbRed の替わりに ...Interior.ColorIndex = 34 などとしてください。 セル背景色の設定などは[マクロの記録]でわかるはずです。
その他の回答 (3)
- end-u
- ベストアンサー率79% (496/625)
>マクロではなく条件付き書式で可能です。 B3:AF16を選択して、B3がアクティブになっている状態で ~~~~~~~~~~~~~~ メニュー[書式]-[条件付き書式]で [数式が ▼] =OR(PHONETIC(IV3:B3:)="BBB",PHONETIC(A3:C3)="BBB",PHONETIC(B3:D3)="BBB") 上記数式をコピー&ペーストし、 [書式]ボタンをクリックして[パターン]タブで好きな色を設定してください。
お礼
条件付き書式でも可能なのですが、マクロを組む練習をしております。 つまらない質問ですいませんでした。
- end-u
- ベストアンサー率79% (496/625)
>それをB2~K2 C3~K3と横へ動いていく この説明は間違っていませんか? 1行下に行くと同時に基点が右にずれて範囲も狭まってくるという説明になってます。 そうではなくて、単純にB3:F16の範囲内でBが3連続以上続くセルをチェックしたいなら Sub try2() Dim rng As Range Dim rw As Range Dim r As Range Dim cnt As Long Set rng = ActiveSheet.Range("B3:F16") For Each rw In rng.Rows rw.Interior.ColorIndex = xlNone For Each r In rw.Cells If r.Value = "B" Then cnt = cnt + 1 Else If cnt > 2 Then r.Offset(, -cnt).Resize(, cnt).Interior.Color = vbRed End If cnt = 0 End If Next If cnt > 2 Then rw.Cells(rw.Cells.Count).Offset(, -cnt + 1).Resize(, cnt).Interior.Color = vbRed End If cnt = 0 Next Set rng = Nothing End Sub こうなります。 あるいは Sub try3() With ActiveSheet.Range("B3:F16").FormatConditions .Delete .Add(Type:=xlExpression, _ Formula1:="=OR(PHONETIC(RC[254]:RC)=""BBB""," & _ "PHONETIC(RC[-1]:RC[1])=""BBB""," & _ "PHONETIC(RC:RC[2])=""BBB"")" _ ).Interior.Color = vbRed End With End Sub マクロではなく条件付き書式で可能です。 [ 数式が ] =OR(PHONETIC(IV3:B3:)="BBB",PHONETIC(A3:C3)="BBB",PHONETIC(B3:D3)="BBB")
お礼
範囲が間違っておりました。
補足
何度もすみません。 その説明も間違っております。 全体がB3~AF16でした。それをB3~AF3、B4~AF4、B5~AF5・・・B16~AF16まで横にチェックしていくようにします。3連続以上に色を付けたいのですが、細かい色の指定(特に薄い色)はできますか? vbRedの他の種類が少なかったものですから、255、255、255の型式はできますか?
- end-u
- ベストアンサー率79% (496/625)
ExcelVBAでのやり方で、という認識で良いですか? サンプルとしては Sub try() Dim rs As Range '基点A1 Dim re As Range '基点K1 Dim r As Range Dim i As Long Dim cnt As Long '連続回数記憶用 With ActiveSheet Set rs = .Range("A1") Set re = .Range("K1") End With For i = 0 To 9 With Range(rs.Offset(i, i), re.Offset(i, 1)) .Interior.ColorIndex = xlNone For Each r In .Cells If r.Value = "B" Then cnt = cnt + 1 Else If cnt > 2 Then Range(r.Offset(, -cnt), r.Offset(, -1)).Interior.Color = vbRed End If cnt = 0 End If Next End With Next Set rs = Nothing Set re = Nothing End Sub こんな感じになりますが 変数に対する理解とFor Nextステートメント、Offsetプロパティ、など VBAの基礎を理解している事が前提です。 その辺りは大丈夫ですか? http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_010.html
お礼
範囲が間違っておりました。
補足
はい。 早速やってみたのですが、うまくいきません。 すいません補足となりますが、全体の範囲がB3~F16なのですが、その中にシフト関係なのですが、アルファベットがバラバラに並んでいます。Bが3つや4つ5 つと連続して並んでいる所に色がつきません。 難しいです。マクロ初心者ですいません。
お礼
ありがとうございます。 思うようにやれました。 またつまったときはよろしくお願いします。