[[20210128101139]] 『Findで複数の検索値を設定したい』(VBA初心者マン) ページの最後に飛ぶ

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

 

『Findで複数の検索値を設定したい』(VBA初心者マン)

宜しくお願い致します。

Findを用いて複数の検索値を探し当てたいのですが、
一つの変数で実行できる方法はないでしょうか?
下記のように記載すると、当たり前ですが最後のDは見つけられるのですが、
A,B,Cを見つけてくれないです。

    Dim FoundCell As Range
    Dim FirstAddress As String
    Set FoundCell = Range("H:H").Find("A")
    Set FoundCell = Range("H:H").Find("B")
    Set FoundCell = Range("H:H").Find("C")
    Set FoundCell = Range("H:H").Find("D")

        If Not FoundCell Is Nothing Then
        FirstAddress = FoundCell.Address

        Do
            If Not FoundCell.Offset(0, -5).Value Like "//*" Then
            'FoundCellから5個左のセルに「//」が含まれない場合(*は0文字以上の文字列)
                FoundCell.Offset(0, -5).Value = "//" & FoundCell.Offset(0, -5).Value
                'FoundCellから5個左のセルの文字列の前に「//」を追加する
            End If
            Set FoundCell = Range("H:H").FindNext(FoundCell)
            'H列で最初のFoundCellの次のFoundCellを見つけ出す
            Loop Until FoundCell.Address = FirstAddress
            'Do〜Loop:条件が満たされるまで上記処理を繰り返し行う。
            '今回はFoundCellのセル番地とFirstAddress(H列の最初の読取終了)のセル番地が一致したところで繰り返し処理終了
    End If

End Sub

出来れば変数を1つで複数の検索値を見つけられるとありがたいです。
どうぞ宜しくお願い致します。

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


 AND検索ですか?
 OR検索ですか?
(OK) 2021/01/28(木) 10:23

 変数を配列にすれば、一つの変数で行けると思いますが。
 または配列の中身を取り出しながら変数に格納するとか。

 見つかったセルも配列に格納すればいいと思います。
(OK) 2021/01/28(木) 10:30

OKさん

お返事ありがとうございます。

OR検索です。
申し訳ありません、「変数を配列にする」の意味があまりわかっておりませんので、
少し自分で調べてみます。
ありがとうございます。
(VBA初心者マン) 2021/01/28(木) 10:53


 複数の文字列をループします。
 "A"を全部さがす→"B"を全部さがす→"C"を全部さがす ・・・
(´・ω・`) 2021/01/28(木) 11:53

直接の回答ではありません。
個人的にFindメソッドは時間が掛かるため、
繰り返し処理では、ほとんど使いません。

その他として、WorkSheet関数を使う方法、
配列に代入して、片っ端から比較する方法を
使っています。

以下、参考にどうぞ。

 Sub Sample()
     Dim findRange As Range
     Dim targetCell As Range
     Dim lastRow As Long
     Dim buf As Variant
     Dim p As Long
     Dim n As Long
     With ActiveSheet
         lastRow = .Cells(roes.Count, "H").End(xlUp).Row
         Set findRange = .Range("H1", .Cells(lastRow, "H"))
     End With

     For Each buf In Array("A", "B", "C", "D")
         Do
             With Application
                 n = .IfError(.Macth(buf, findRange, 0), 0)
             End With
             If n > 0 Then
                 Set targetCell = findRange(n).Offset(0, -5)
                 If Not targetCell.Value Like "//*" Then
                     targetCell.Value = "//" & targetCell.Value
                 End If
                 If n < lastRow Then
                     p = n + 1
                 Else
                     p = lastRow
                 End If
                 Set findRange = ActiveSheet.Range(findRange(p), findRange(lastRow))
             End If
         Loop While (n > 0)
     Next buf
 End Sub

(tkit) 2021/01/28(木) 14:13


 参考まで。

 Sub test()
  Dim i As Integer
  Dim moji(3) As String
   moji(0) = "A"
   moji(1) = "B"
   moji(2) = "C"
   moji(3) = "D"
   For i = 0 To UBound(moji)
    MsgBox moji(i)
   Next i
 End Sub

(OK) 2021/01/29(金) 21:11


コメント返信:

[ 一覧(最新更新順) ]


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