アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルのマクロについての質問になります。

一つのシートの中身を検索して赤文字の物があれば、「ある」
無ければ「ない」と言う事をしたいです。

エクセルの内容でいうと、「検索と置換」→「書式」→「フォント」→「色を赤に変更」→「すべて検索」
になります。

これをマクロの記録で動かしてもうまく動きません。
みなさまのお知恵をお借りしたいと思います。
宜しくお願い致します。

A 回答 (3件)

赤文字のセルを探すだけなら…



Sub 赤セル探し()
  Dim rng As Range
  For Each rng In Range(Cells(1, 1), ActiveSheet.UsedRange)
    If rng.Font.Color = 255 Then
      MsgBox "ある"
      Exit Sub
    End If
  Next
End Sub

なお、セル内の文字列の一部だけ着色されたものは除外されます。


マクロの記録での色と、検索する時の色が異なる場合があるので、
事前に検索したい色文字のセルを1個作って

Sub 色確認()
  MsgBox Selection.Font.Color
End Sub

で色を確認してます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
問題なく動きました。

お礼日時:2021/05/07 12:56

#2です


少し勘違いをしていたかもです。
>これをマクロの記録で動かしてもうまく動きません。
無かった時のエラー処理やメッセージの出力処理で躓いているのでしょうか

一例です。(自動記録を想定)

 Cells.Select
 Application.FindFormat.Font .Color = 255

 On Error GoTo msg '見つからない時はエラーになりラベルに飛ぶ

 Selection.Find(What:="*", _
     After:=ActiveCell, _
     LookIn:=xlValues, _
     LookAt:=xlPart, _
     SearchOrder:=xlByRows, _
     SearchDirection:=xlNext, _
     MatchCase:=False, _
     MatchByte:=False, _
     SearchFormat:=True).Activate

 MsgBox ("対象セルをアクティブにしました")
 Exit Sub 'ラベル以降が実行されないようにここで終了する
msg:
 MsgBox ("見つかりませんでした")
End Sub
    • good
    • 0

こんにちは、


すでにFindを使わない方法の回答は出ておりますが、
セル内のフォント色を対象にするのであれば、
マクロの記録でも動くと思いますよ。
検索文字に*を指定してください。
Withで括られているかもしれませんが、
Application.FindFormat.Font.Color = 255
What:="*" で検索すれば良いように思いますが、
文字列の1文字でもFont.Color = 255を対象にする場合
入力のあるすべてのセルに対して文字列1文字ずつ調べる必要があるのではないかと、、
規模によりそれなりの処理時間がかかる事が想定されます。
一文字でもあればと言う条件が定かでないのでとりあえず。。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A