エクセル2003 VBAなのですが

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

エクセル2003 VBAなのですが

エクセル2003 VBAなのですが   A   B    C    D    E    F 1 あ   い   う   お   う   123 2 お   さ   え   あ   お   お 3 あ   い   え   お   え   888 上記のような表があるときに 3個以上同じ文字がある場合にセルに色をつけていきたい状況です 上記表でいうと『あ』と『え』と『お』のセルに色をつけたいのです セルには文字列のほかに数字も入っている状況です 単純にCtrl+Fで検索をして『すべて検索』で 出てきたセル全部に色をつける。 それをA1から文字があるところ全部やる と言った事をマクロでやりたいと思っております。 皆様よろしくお願いいたします。

  • nanny
  • お礼率55% (72/129)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答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/7940)
回答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

  • エクセルのVBAについて質問です。

    エクセル2003のVBAについて質問です。 複数の検索したい文字列があり、複数の検索対象セルがあります。 セルの文字列が検索文字列のいずれかと一致したセルの背景の色を変えたいです。 よろしくおねがいします。 仕事でマクロを組まなけばならなくなってしまったのですが、 初心者のため検索してみたり調べてみたり、参考にして作ってみたのですがうまくいかないばかりかどんどん解らなくなってしまいました。 どうか助けてください。 sheet1のセルが検索対象 (全セル対象でも大丈夫ですが、検索したいセルはB2→J2、B11→J11、B20→J20の範囲です)、 sheet2のA列に検索したい文字列が入力されています。 この検索したい文字列は今後増えていく可能性があるので、増えた場合にも対応できるようにと考えています。 sheet1(検索対象) あ い う え あ お お sheet2(検索文字列) あ う お け き ↑の様に入力されており、sheet1の「あ」と「う」と「お」のセルの背景を変えたいです。 色を変えたいのはsheet1です。 findメソッドや繰り返し処理などを調べて実践してみたのですが、 いきなりマクロを組めといわれた超初心者には難しく質問しています。 自分でやってみたのですが、 sheet1の最初の「あ」のみが変換され、後に出てくる「あ」が変換されません… どうしたらいいのか…どうすることも出来ず困っております。 すみませんが、どなたか優しい方助けてください。 よろしくおねがいします><

  • エクセル VBAで入力

     エクセル初心者です。 条件付き書式で一つのセルに特定の文字列を入力した際に、そのセルと任意の法則性のある複数のセルに(入力内容は無関係でセルの行・列に法則性があります)特定の塗りつぶしを行いたいのですが、どのようにすればよいのでしょうか。 条件付き書式をすべて設定する(手打ち)するのが最も確実で間違いの内方法ではありますが、新規に行・列を挿入した場合、その行・列には条件付き書式が設定されていませんので、意図した作用を起こさなくなってしまいます。 上記ではよくわからないと思いますので、具体的な例を入れさせていただきます。 例)) 任意のセル(A13)に特定の文字列(OK)と入力する。 特定文字列に反応して、そのセルの列に(A12からE12、F12からH12)赤色の塗りつぶしを入れる。 上記は1セルに対して行われますが、VBAを使用してA12からA5000までを検索対象として持たせて、それぞれのセルの列に対して塗りつぶしを入れられるようにしたいと思っています。

  • excel VBA 緑色の付いたセルをすべてコピー

    お世話になります。excel2007です。 緑色の付いたセルをすべてコピーするマクロを作成したいのですが・・・ マクロの記憶の実行 検索(ctrl + F) ⇒ オプションでセルを緑 ⇒ すべて検索 ⇒ 検索結果をすべて選択(ctrl + A) ⇒ 検索を閉じる ⇒ コピー(ctrl + C) マクロの記憶の終了 エクセル上ではしっかりコピーできています。 VBAは以下の通りでした Sub 緑色のセルをすべてコピー() ' 緑色のセルをすべてコピー Macro    With Application.FindFormat.Interior     .PatternColorIndex = xlAutomatic     .Color = 5287936     .TintAndShade = 0     .PatternTintAndShade = 0    End With    Selection.Copy End Sub このマクロを実行しても、現在選択されているセルを コピーしてしまいます(緑色を検索してくれないです)。 どのようにVBAを編集すればよろしいのでしょうか??

  • EXCEL VBA 文字列

    A列のセルに、文字列が以下の様に並べられています。 【あああああ】いいいいいいううううううえええおおおお 上記のような場合に、”あああああ”と【】の文字だけを取り出して、B列に表示させることはマクロで可能でしょうか?但し、【】のなかの文字数はセルによりバラバラです。 ネットでかなり検索したのですが、自分では解決できませんでした。 どうか、よろしくお願いいたします。

  • エクセル VBA

    エクセルVBAで以下のようなデータがあります。 D列の文字列と右隣のE列の文字列の2つが入っているものをA列から探し、見つかったセルの上にセルを追加し、E列の右隣のF列に入っている文字列を代入したいです。 どのようなプログラムになりますか?

  • VBAの書き方

    只今VBAで、あるセルで文字を検索して、その文字があるときに、違うセルに文字を出すマクロを作っています。 例えば、エクセルのI列に記入されている文章に"VBA"という文字が入っているとき、M列に"YES"という文字を出したいです。 どのようなマクロの式を書けばこのような操作が出来るのでしょうか。 FINDやInStr関数を使えばよいのかと思いますが… どなたかお分かりのかたは、教えて頂ければと思います。 よろしくお願い致します<m(__)m>

  • Excel VBAのプロシージャについて

    こんにちは、VBAを作成しているのですが、分からない所があるので、詳しい方からのご教授をお願いします。 A                                 AF  _______________________________________________________________________  1|        1   2    3   4   5    ・・・  31   ←日付  2|  鈴木  11   15   35   8 25  3|  斉藤   45   52   25   21   50  4|  伊藤   25   45 75   36 16   ・1行目のB1セルからAFセルまで日付が入っています。 ・2行目のA2セルからA4セルまで名前が入っており、横方向にランダムな数字が入っています。 上記の表から、日付とランダムな数字を指定し検索する事でmsgboxで氏名を返せるように作っています。(例えば3日25で検索すると、msgboxで斉藤とでるようにする)。 自分なりに作ってみたのは、まずvbaを実行すると、A1行をautofilterで日付を検索し、activecell(検索結果の日付セル)の列からランダムな数字を再度autofilterで検索するというものですが、もっと記述について他に方法があるのではないかと疑問に思っていますので、このようなプログラムを作成する場合、慣れた方ならどのように記述するのでしょうか?よろしければ教えていただければと思いますのでよろしくお願いします。 ※実際は検索boxを作成していますが、AHセルに検索したい日付、AIセルに検索したいランダムな数字を入力するものとさせて頂きます。 ※EXCEL2000を使用しています。 ※中傷するような回答は遠慮させていただきます。 よろしくお願いします。

  • Excel VBA   %の入ったセル

    困りました、、、 VBAを使って A×30%+15000 これが入ったセルB2と たとえば250000が入ったセルB2を掛け算したいのですが (B2の数字は固定ではなくいろいろな数字が入ります) 文字列が入っていることにより うまくいきません 今は仕方なくMid関数で数字を抜き出して使っているのですが なにかよい方法はないでしょうか よろしくお願いします<m(__)m>

  • エクセルにおいて、検索した個数表示について

    表を作るのに困っていますので、よろしくお願いします。 例えば、 A列A1~A20までのセルに、1~3までの数字がランダムに入っています。 BとDとF列のセルに、あ~おまでの文字が、ランダムに入っています。 A列の数字が1のとき、その行のB、D、Fに、「あ」が何個、「い」が何個、「う」が何個・・・・。 A列の数字が2のとき、その行のB、D、Fに、「あ」が何個、「い」が何個、「う」が何個・・・・。 A列の数字が3のとき、その行のB、D、Fに、「あ」が何個、「い」が何個、「う」が何個・・・・。 という表を作りたいのですが、どうしたら良いでしょうか。 よろしくお願いします。

  • エクセルVBA

    初心者でレベルが低いですがよろしくお願いします。 VBAでエクセルのセル内の文字列を読み込んでその中の文字を検索し、ヒットしたときにそのヒットした文字だけを変換して取得することが可能でしょうか?? 列 A1に hanamiti/1234 という文字列が入っていて この文字列の中の / を検索し、あった時に _ に変更する。 結果 hanamiti_1234 として取得した。 ということができるのでしょうか? ご教授お願いいたします・。

専門家に質問してみよう