- ベストアンサー
エクセル2003 VBAなのですが
- エクセル2003のVBAを使用して、表内の3個以上同じ文字があるセルに色をつける方法について質問します。
- 表内の文字列と数字が混在しており、Ctrl+Fで検索してすべてのセルに色をつける方法ではなく、マクロを使用してA1から文字があるセル全てに処理を行いたいです。
- セルに色をつける条件としては、3個以上同じ文字がある場合です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#ありゃりゃ,はずいですね。 失礼しました。 Sub macro2() Dim h As Range Dim i i = 2 Cells.Interior.ColorIndex = xlNone On Error Resume Next For Each h In Cells.SpecialCells(xlCellTypeConstants) If Application.CountIf(ActiveSheet.UsedRange, h) >= 3 Then If h.Interior.ColorIndex = xlNone Then i = i + 1 Application.ReplaceFormat.Clear Application.ReplaceFormat.Interior.ColorIndex = i Cells.Replace What:=h, Replacement:=h, lookat:=xlWhole, ReplaceFormat:=True End If End If Next End Sub
その他の回答 (3)
- mt2008
- ベストアンサー率52% (885/1701)
連想配列を使ってみました。 色は54色以上が必要になるとそれ以上は54色目と同じ色に塗りつぶします。 Sub Sample() Set rng = Range("A1:F3") '←この範囲が対象 '連想配列で要素の個数を取得 Set rng = Range("A1:F3") Set dic = CreateObject("Scripting.Dictionary") For Each ele In rng.Value If ele <> "" Then dic(ele) = dic(ele) + 1 Next 'Keyを配列に取得 dKey = dic.keys 'Key要素数が3以上なら色番号を割り振る '黒、白を除いた色番号3~56までを対象。 colnum = 3 For i = 0 To (dic.Count - 1) If dic(dKey(i)) >= 3 Then dic(dKey(i)) = colnum colnum = colnum + 1 If colnum > 56 Then colnum = 56 Else dic(dKey(i)) = 0 End If Next i '色番号が付いているならその色で塗りつぶす For Each trg In rng If (trg.Value <> "") And (dic(trg.Value) > 0) Then trg.Interior.ColorIndex = dic(trg.Value) End If Next End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
質問がはっきりしない部分がありますが、考えてみました。 >セルには文字列のほかに数字も入っている状況です >Ctrl+Fで検索をして『すべて検索』で 出てきたセル全部に色をつける。 >A1から文字があるところ全部やる 数字に関しては、除外するという意味でしょうか。 VarType(c) = vbString というのを付け足しました。 もし、文字ごとに色を変えるとしたら、少し限界があるかもしれません。 '// Sub CoutDoubledTest() Dim rng As Range Dim c As Range Set rng = Range("A1").CurrentRegion rng.Interior.ColorIndex = xlColorIndexNone Application.ScreenUpdating = False For Each c In rng If WorksheetFunction.CountIf(rng, c.Value) > 2 And _ VarType(c) = vbString Then c.Interior.ColorIndex = 34 End If Next c Application.ScreenUpdating = True Set rng = Nothing End Sub
補足
お返事ありがとうございます。 ほぼパーフェクトです!! 後は色が・・・ 色は何でもいいんですが変わらないですか? ランダムでもまったく問題ないのですが・・・ もしよろしければお返事いただけますと幸いです。 よろしくお願いいたします。
- keithin
- ベストアンサー率66% (5278/7941)
方法1 セル範囲(例ではA1:F3)を選ぶ 書式メニューの条件付き書式を開始する セルの値が → 数式が に変えて 右の空欄に =COUNTIF($A$1:$F$3,A1)>=3 と記入し,書式ボタンで色を付ける 以上です。 といった操作を新しいマクロの記録にして利用しても,勿論構いません。 方法2 sub macro2() dim h as range cells.interior.colorindex = xlnone '←不要なら無くても良い on error resume next for each h in union(cells.specialcells(xlcelltypeconstants), cells.specialcells(xlcelltypeformulas)) if application.countif(activesheet.usedrange, h) >= 3 then h.interior.colorindex = 4 end if next end sub
補足
For Each h In Union(Cells.SpecialCells(xlCellTypeConstants), Cells.SpecialCells(xlCellTypeFormulas)) のところでエラーがかかってしまいます;; 該当するセルが見つかりません とでてしまいます。 あと追加なのですが 『あ』と『う』と『お』(まだまだある状況になりますが・・・)の セルの色は変えたい状況です。 イメージとしては『あ』がパッと見た状況でどこにどれだけあるかが知りたい状況です。 よろしくお願いいたします。
お礼
ばっちり動きました。 何度もお手数かけました ありがとうございます。