[[20191202131713]] 『指定文字以外の検索』(素人) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定文字以外の検索』(素人)

マクロ素人です。あるシステムのデータをクリップボードコピーしてエクセルに貼り付けを行っています。その際に、シート2以降を対象として「G5」以降の行に指定した名称以外があった場合は、文字を赤くしたい。(もしくは塗りつぶし)指定文字ですが「A・B・C・D・E」の五種類としておきます。(実際はもっと多いです)行数が多いので目視確認が大変です。シート1にはマクロ実行ボタンを設定して指定文字以外の検索を行いたいのですがどのようになるのか教えていただきたいです。この作業は毎月何度も行うので何とかならないかと思い質問してみました。よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows7 >


 G列のみ対象
 A,B,C,D,Eを「含む」文字列があるセルを赤で塗りつぶし
 これで実用に耐えうるか確認してもらえますか?

    Sub a()
        Dim i As Long
        Dim fArea As Range
        Dim f As Range
        Dim f_ As Range
        Dim x As Variant
        For i = 2 To Sheets.Count
            With Sheets(i)
                .Activate
                For Each x In Array("A", "B", "C", "D", "E") '検索する文字列一覧
                    Set fArea = .Range("G5:G" & Rows.Count)
                    Set f_ = fArea.Find(x, fArea(1), xlValues, xlPart, xlByRows, xlNext, False, False) '検索条件設定 xlPartが部分一致、xlWholeで完全一致
                    If Not f_ Is Nothing Then
                        Set f = f_
                        Do
                            f.Interior.Color = vbRed '塗りつぶし
                            Set f = fArea.FindNext(f)
                        Loop Until f_.Address = f.Address
                    End If
                    Set f_ = Nothing
                Next x
            End With
        Next i
    End Sub

(稲葉) 2019/12/02(月) 14:08


有難うございます。
試してみましたが、逆でした。
説明が悪くてごめんなさい。
指定文字以外を塗りつぶしたいです。
(素人) 2019/12/02(月) 14:55

 んではこんな感じ?
    Sub a()
        Dim i As Long
        Dim fArea As Range
        Dim f As Range
        Dim f_ As Range
        Dim x As Variant
        For i = 2 To Sheets.Count
            With Sheets(i)
                .Activate
                Set fArea = .Range("G5:G" & Rows.Count)
                fArea.Interior.Color = vbRed
                For Each x In Array("A", "B", "C", "D", "E") '検索する文字列一覧
                    Set f_ = fArea.Find(x, fArea(1), xlValues, xlPart, xlByRows, xlNext, False, False) '検索条件設定 xlPartが部分一致、xlWholeで完全一致
                    If Not f_ Is Nothing Then
                        Set f = f_
                        Do
                            f.Interior.Color = xlNone
                            Set f = fArea.FindNext(f)
                        Loop Until f_.Address = f.Address
                    End If
                    Set f_ = Nothing
                Next x
            End With
        Next i
    End Sub

(稲葉) 2019/12/02(月) 15:00


有難うございます。ばっちりです。
って思ったら、G列の最終行(読み込まれたデータの終わり)以降も赤く塗りつぶしになっているので、そこは塗りつぶしはしたくないです。
わがまま言ってごめんなさい。
(素人) 2019/12/02(月) 15:31

 ちょっと自分でやってみません?
(稲葉) 2019/12/02(月) 15:37

むずかしいっす。
(素人) 2019/12/02(月) 16:10

 じゃあ
 >指定文字ですが「A・B・C・D・E」の五種類としておきます。(実際はもっと多いです)
 はどうやってメンテナンスするんですか?
(稲葉) 2019/12/02(月) 16:12

ここは、出来ました。
文字を打ちかえれば対応できます。
空白の場合は塗りつぶさないってのがどうしたらいいものなのだか?
(素人) 2019/12/02(月) 16:16

 最終行の取得で検索してみてください。
 塗りつぶしは先に述べたコードないのコメントで、なんとなくはわかると思います。
 やってだめなら、ダメだった箇所をご提示ください。
(稲葉) 2019/12/02(月) 16:23

有難うございます。
やってみます。
今日は時間が無いので明日連絡します。
(素人) 2019/12/02(月) 16:36

Set fArea = .Range("G5:G" & Rows.Count)
ここを変更するのかな?

G5からデータのある最終行まで。

Cells(5, 7).End(xlDown)

このような事?

でも、動かないです。
(素人) 2019/12/03(火) 14:47


 Set fArea = .Range("G5", .Cells(Rows.Count, "G").End(xlUp))
 こちらでどうですか?
(稲葉) 2019/12/03(火) 15:45

ありがとうございます。出来ました。感謝。
マクロ全然分からないので助かりました。
(素人) 2019/12/03(火) 16:28

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.