• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003 VBAなのですが)

エクセル2003 VBAなのですが

このQ&Aのポイント
  • エクセル2003のVBAを使用して、表内の3個以上同じ文字があるセルに色をつける方法について質問します。
  • 表内の文字列と数字が混在しており、Ctrl+Fで検索してすべてのセルに色をつける方法ではなく、マクロを使用してA1から文字があるセル全てに処理を行いたいです。
  • セルに色をつける条件としては、3個以上同じ文字がある場合です。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

#ありゃりゃ,はずいですね。 失礼しました。 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

nanny
質問者

お礼

ばっちり動きました。 何度もお手数かけました ありがとうございます。

その他の回答 (3)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

連想配列を使ってみました。 色は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)
回答No.2

質問がはっきりしない部分がありますが、考えてみました。 >セルには文字列のほかに数字も入っている状況です >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

nanny
質問者

補足

お返事ありがとうございます。 ほぼパーフェクトです!! 後は色が・・・ 色は何でもいいんですが変わらないですか? ランダムでもまったく問題ないのですが・・・ もしよろしければお返事いただけますと幸いです。 よろしくお願いいたします。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

方法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

nanny
質問者

補足

For Each h In Union(Cells.SpecialCells(xlCellTypeConstants), Cells.SpecialCells(xlCellTypeFormulas)) のところでエラーがかかってしまいます;; 該当するセルが見つかりません  とでてしまいます。 あと追加なのですが 『あ』と『う』と『お』(まだまだある状況になりますが・・・)の セルの色は変えたい状況です。 イメージとしては『あ』がパッと見た状況でどこにどれだけあるかが知りたい状況です。 よろしくお願いいたします。

関連するQ&A