Excel VBA色つきセルの検索

このQ&Aのポイント
  • Excel VBAを使用して色付きのセルを検索する方法について教えてください。
  • セルの背景色を指定して検索する際に、Valueのないセルでも検索できる方法を知りたいです。
  • https://www.moug.net/tech/exvba/0110020.htmにアクセスして、詳細な情報を確認しましたが、条件に合致する方法が見つかりませんでした。
回答を見る
  • ベストアンサー

Excel VBA色つきセルの検索

背景色でセルの検索をしようと思い、検索したところ次のページがヒットしました。 https://www.moug.net/tech/exvba/0110020.htm Application.FindFormat.Clear Application.FindFormat.Interior.Color = vbRed Set c = Range("実験結果").Find(What:="*", SearchFormat:=True) Application.FindFormat.Interior.Color で色指定をするようですが、Valueのないセルはヒットしません。 What:="*" でもWhat:=""でもだめでした。 値の有無に関係なく色だけで検索するにはどのようにしたらいいものでしょうか?

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.1

What:=""にしたらいけましたが…2013です。 Sub moto() Dim c As Range Application.FindFormat.Clear Application.FindFormat.Interior.Color = vbRed Set c = Range("実験結果").Find(What:="", SearchFormat:=True) If c Is Nothing Then MsgBox "該当データはありません" Exit Sub Else MsgBox c.Address End If End Sub 駄目でしたら以下の方法で検索してください。 Sub Test() Dim c As Range For Each c In Range("実験結果") If c.DisplayFormat.Interior.Color = vbRed Then MsgBox c.Address End If Next End Sub

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

Mougの記事を多少修正して、少数のデータですがやってみると、うまく該当セルを拾うようですが。 (1)ホームの「ペンキ缶から垂らす、アイコン」で、セルの塗りつぶしの色を設定した。 (2)Find(What:="",とFind(What:="*",どちらでも該当セルを拾った。 (3)FindFormat.Interior.Color = vbYellowやVbRedでやってみた。 いつも思うのは、Interior.Color式の設定以外には、セルの塗りつぶしの色の設定方式はないのかどうか、小生は勉強が及んでない。 質問者は、WEBでの設定例に惑わされずに、テストしたのでしょうか? 例 Range("実験結果")の箇所など。だまされたと思って、下記(犯意はセル範囲はA1:J100)でやってみてはどうでしょうか。 ーーー 標準モジュールに Sub Sample() Dim c As Range Dim Rng As Range Dim firstAddress As String Application.FindFormat.Clear Application.FindFormat.Interior.Color = vbYellow Set c = Range("a1:j100").Find(What:="", SearchFormat:=True) If c Is Nothing Then MsgBox "該当データはありません" Exit Sub Else MsgBox c.Address '<====== firstAddress = c.Address Set Rng = c Do Set c = Range("A1:J100").Find(What:="", _ After:=c, _ SearchFormat:=True) If c Is Nothing Then Exit Do If c.Address = firstAddress Then Exit Do MsgBox c.Address '<====== Loop End If End Sub

ebaeba2
質問者

お礼

ご回答いただいています皆様、ありがとうございます。 まだ、検証できておりませんが、ご回答を見る限り私のしようとしていることは可能なようです。 結果が出ましたら、また、連絡させていただきます。 ちょっと、安心しております。

ebaeba2
質問者

補足

Set c = Range("A1:J100").Find(What:="", _ After:=c, _ SearchFormat:=True) の下にヒットするごとに c.select をしてどこが該当しているか探っていましたが、色のないセルまで選択されていたため質問させていただいておりました。 改めて設定し、実行したところ、ご指定いただいている通り、正常に動作しました。 Range設定等、誤っていたのかもしれません。最初に確認していたシートの原型が残っていないもので、どこがどうだったか確認のしようがありませんが結論として問題なしということになりました。 助言いただいた方々、どうもありがとうございました。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.3

あと vbGreenやvbBlue とかは色設定で標準の色から緑や青を選択して色付けしていても該当なしとなりますので、マクロの記録でコードを取得してその値を指定してください。

  • kkkkkm
  • ベストアンサー率65% (1617/2456)
回答No.2

ちなみに 実験結果と名前を付けた範囲でセルの色を付けているのは間違いないですか。

関連するQ&A

  • 色の付いているセルを探す。(excel)

    range("a1:a20")の中で、色(赤)が付いているセルを探すのに、 findは使えませんか。 マニュアルのサンプルでは、whatのところは文字列の指定しか見つかりませんでした。 「Interior.ColorIndex = 3」のように使いたいのですが。 宜しくお願いします。

  • VBA ダブルクリックで行に色をつける方法

    VBAでダブルクリックしたセルを含む行に色をつけたいです。 セルに色をつけるマクロは書いた(下記)のですが、これを行全体に色付けしたいのですが、 うまくいきません。 どなたかご教授ください。 Private Sub Worksheet_BeforeDoubleClick _ (ByVal Target As Range, Cancel As Boolean) If Not Application.Intersect _ (Target, Range("A3").CurrentRegion) _ Is Nothing Then With Target.Interior If .Color = vbRed Then .Color = xlNone Else .Color = vbRed End If End With Cancel = True End If End Sub よろしくお願いします。

  • エクセル マクロ 検索

    お世話になります。 範囲がA2からK221までの表があります。 検索して検索されたセルの左のセルを表示するマクロを組みたいのですが、検索する文字(数値)はE1に、検索結果はK1に表示するようにするにはどのようにしたらいいでしょうか? Sub FIND_DATA1() ' FIND_DATA1 Macro ' マクロ記録日 : 2006/9/1 ユーザー名 : ' Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole).Activate End Sub Sub Data_Find3() Dim 対象セル As Range Dim 最初のセル番地 As String Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub End If Set 対象セル = Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole) 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Cells.FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 MsgBox "検索件数は" & 検索件数 - 1 & " 件です" End Sub 本を見たり調べたりでここまでできたんですがこれだと検索件数、検索結果が色付きになるだけで使い勝手がいまいちです。 よろしくお願いします。

  • マクロ 色の設定

    特定の文字を入れると選択したセルが塗りつぶされるようにしたく思い、 ネットで検索して、できることはできたのですが、 自分の好きな色に変更する方法が分かりません。 当方、マクロに関しては全くの初心者です。 どこをどのように変えればよいのか教えて下さい。 Private Sub Worksheet_Change(ByVal Target As Range) If Range("B22").Value = "アポ" Then Range("B22:J22").Interior.Color = vbRed Else Range("B22:J22").Interior.ColorIndex = xlColorIndexNone End If End Sub B22のセルに「アポ」と入るとB22~J22が赤色に、なるというマクロです。 多分、「vbRed」というのを変えればいいとは分かるのですが、どうしてよいのやら… 自分としては、添付した画像のように、左側の文字によって、隣のセルが ピンク、オレンジ、水色、黄色(自分で作った色かと思います)に なるようにしたいのです。

  • VBAのセルの色の設定について

    EXCEL・VBAにて.Interior.Color=RGB(152, 251, 152)と設定しましたが 思った色(緑系の色)ではなくグレー系の色になってしまったのですが、 何か間違っているのでしょうか? 何かわかる方いらっしゃいますでしょうか? 実際のソースはしたの通りとなります。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 13 Then Exit Sub Application.EnableEvents = False 'ステータス欄の入力の判断 Select Case Target.Value Case "あああ" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(152, 251, 152) Case "いいい" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(254, 208, 224) Case "ううう" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(255, 255, 0) Case "えええ" Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(192, 192, 192) Case Else Worksheets("シート1").Rows(Target.Row).Interior.Color = RGB(255, 255, 255) End Select Application.EnableEvents = True End Sub

  • エクセル VBA 検索 スクロール

    お世話になります。 A列に製品名、B列に場所と詳細を表した表です。 E1に製品名を入れて検索ボタンを押すと右隣のセルの値がE1に表示され検索件数がMsgBoxに表示されるものをこのページで聞いたりしながら作りました。 'Dim 対象セル As Range 'Dim 最初のセル番地 As String 'Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub Set 対象セル = Range("A2:A1287").Find(What:=Range("E1").Value, After:=Range("A1287"), lookAt:=xlWhole) If 対象セル Is Nothing Then Exit Sub 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Range("A2:A1287").FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 Range("E3").Value = 対象セル.Offset(, 1).Value MsgBox "検索件数は" & 検索件数 & " 件です" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 今回質問したいのは検索したセルを含む行(製品名によって複数あります)を自動で一番上、A5でウィンドウの固定をしてあるのでA6からの表示になるようにスクロールするにはどのようにしたらいいでしょうか?よろしくお願いします。

  • エクセル VBA 文字の検索について・・・

    いつも皆様には大変お世話になっております。 今回は文字の検索をしたいのですが障害が多いためうまく動きません .....A....B....C....D....E 1....3...................1月 2........................2月 3........................20000 4........................30000 5........................11111 6........................3月 といったような表があるのですが、 A1のセルに3を入れたときに3月を検索したいのです。 tuki = Range("A1").Value Range("E1:E6").Find(what:=tuki).Activate としてしまうとE4で引っかかってしまいます;; 何かいい方法はありませんでしょうか? よろしくお願いいたします

  • Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり

    Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はありませんか? 例えば、セルに値を代入場合であれば、 Sub test() Dim arr(2, 2) As Integer Dim rg As Range Set rg = Worksheets(1).Range("A1:B2") arr(0, 0) = 1 arr(0, 1) = 0 arr(1, 0) = 0 arr(1, 1) = 1 rg.Value = arr  '<- これと同じように End Sub というように、セルへの値代入を配列を用いて、プロパティ呼出し1回で済ませることが出来ますよね。。 で、セルの色の場合も、同じように、 Sub test2() Dim arr(2, 2) As Long Dim rg As Range Set rg = Worksheets(1).Range("A1:B2") arr(0, 0) = RGB(0, 0, 0) arr(0, 1) = RGB(0, 255, 0) arr(1, 0) = RGB(0, 0, 255) arr(1, 1) = RGB(255, 0, 0) rg.Interior.Color = arr ' <- これをやりたい End Sub など、と書きたいのですが、最後の rg.Interior.Color = arr の所でエラー(型が一致しません)が出ます。 (全セレクトエリアが同カラーで指定だと、 rg.Interior.Color =RGB(0,0,0) などと出来るのですが。。。) オブジェクトの下のプロパティのプロパティを配列で 指定するうまい方法はありませんか? セル毎にループで回すと、Excelサイドが重いので、 時間を要してしますので困っています。 分かる方、是非よろしくお願い致します。

  • エクセル VBA セルの色をSheet1とSheet2の両方を変えたいのですが・・・

    最近困っているところが表題の通りなのですが Sheet1のB2を右クリックするとB2のセルの色を変えて Sheet2のB2のセルも色を変えたいというものです。 現状で Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Dim RngA As Range, myRngA As Range Set Rng = Range("B3:W3,b7:w8,b12:w12,d13:w13,d17:w18,d22:w23") Set myRng = Intersect(Target, Rng) If myRng.Interior.ColorIndex = xlColorIndexNone Then myRng.Interior.ColorIndex = 37 Else If myRng.Interior.ColorIndex = 37 Then myRng.Interior.ColorIndex = 45 Else myRng.Interior.ColorIndex = xlColorIndexNone End If End If Cancel = True End Sub とここまではあるのですが、これをどう改造すればSheet2の同じセルの色もかわるのでしょうか? 宜しくお願いいたします

  • Excel VBA に関する質問

    ExcelのVBA初心者です。 同じ列にランダムに配置された黄色のセルの「数」をカウントするために以下のようなコードを見つけました。確かにこれで列内の黄色のセルをカウントできるのですが、カウントした後でその列内の黄色のセルの数を変える(黄色であったセルを違う色にしたり、新たに黄色のセルにしたり)と、その結果が反映されません。どのようにコードを書きなおせば、随時列内の黄色のセルの個数が変わるたびにちゃんとカウントできるのでしょうか? Function color6(a As Range) Dim c As Range, cu As Long Application.Volatile For Each c In a If c.Interior.ColorIndex = 6 Then cu = cu + 1 Next color6 = cu End Function でやっています。

専門家に質問してみよう