[[20200507110914]] 『VBA 指定文字があった場合にそのセルをクリアしax(ピノ) ページの最後に飛ぶ

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

 

『VBA 指定文字があった場合にそのセルをクリアしたい(指定文字は複数セルに存在)』(ピノ)

いつもお世話になっております。
VBA初心者です。

VBAにて『指定文字があった場合にそのセルをクリアする』という操作を、
そのシートにある指定文字すべてに行いたいです。

下記の通り、ネットを参考にFindとIfを使用し、記載しましたが、
最初に見つかった文字のみしかクリア処理されませんでした。

複数セルに処理させる構文にするには、どう書き換えたらよいでしょうか。
ご存知の方いらっしゃいましたら、よろしくお願いいたします。

Sub

  '文字列:(空白)があった場合にクリア

    Set rngFind = Range("A1:F100").Find(What:="(空白)", _
                            LookIn:=xlValues, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False, _
                            MatchByte:=False)
    If Not rngFind Is Nothing Then
        rngFind.Clear

    End If

End sub

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


 参考に
 Sub Test()
 '文字列:(空白)があった場合にクリア
    Dim rngFind As Range
    Dim fAddress As String

    Set rngFind = Range("A1:F100").Find(What:="(空白)", _
                            LookIn:=xlValues, _
                            LookAt:=xlPart, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False, _
                            MatchByte:=False)

    If rngFind Is Nothing Then
        MsgBox "(空白)は、見つかりませんでした。", 64
        Exit Sub
    End If
    fAddress = rngFind.Address
    Do
        rngFind.Clear
        Set rngFind = Range("A1:F100").FindNext(rngFind)
        If rngFind Is Nothing Then Exit Sub
    Loop While fAddress <> rngFind.Address
 End Sub

(ピンク) 2020/05/07(木) 11:28


編集がかぶっちゃいましたがそのまま。

Findメソッドは、最初に見つかった【1つ】のセルしか返しません。
複数のセルを探すにはもう一工夫必要です。
http://officetanaka.net/excel/vba/tips/tips123.htm

(もこな2 ) 2020/05/07(木) 11:31


ピンク様、もこな2様
いつもありがとうございます。
ピンク様にご教授いただいた構文で希望の作業が出来ました!
早急に、本当に有難うございます。。

>もこな2様
Findメソッドでは1つしか検索できないんですね。
勉強になりました!

1点教えて頂きたいのですが、
ピンク様にいただいた構文でDoLoopの後に作業を簡単な処理を入れたいと思い、
入れてみたところ、その処理は実行されませんでした。(下記構文)

DoLoopの後、Endsubまでの間に記載した構文は、処理されないのでしょうか。
(特にエラーは発生しませんでした。)
別のプロシージャで実行すれば問題ないのですが、今後の為に教えて頂ければ幸いです。

    Range("A1").Select

    シート名変更
    Sheets("Sheet1").Name = "商品サマリ"

(ピノ) 2020/05/07(木) 13:09


 >ピンク様にいただいた構文でDoLoopの後に作業を簡単な処理を入れたいと思い、 
 >入れてみたところ、その処理は実行されませんでした。(下記構文) 

 If rngFind Is Nothing Then Exit Sub
          ↓
 If rngFind Is Nothing Then Exit Do

(ピンク) 2020/05/07(木) 13:29


ピンク様
ありがとうございます!!
sub→doに変えればいいんですね!
大変勉強になりました!
ありがとうございます。
(ピノ) 2020/05/09(土) 15:31

コメント返信:

[ 一覧(最新更新順) ]


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