[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『FINDの最終行まで検索したい』(なのれい)
いつもお世話になっております。
皆様のおかげでだいぶコードも理解できる様になってまいりました。
ありがとうございます。
今回は検索について質問がございます。
1行目はタイトルとし、
A列に基準の文字列
B列にサブの文字列
G列には基準とサブの文字列がランダムでデータが入っています。
G列を検索範囲とし、サブの文字列(B2)を検索成功したら基準の文字列(A2)に書き換える。
上記の事をしたく思っております。
1回目の検索と文字列の書き換えは可能なんですが、G列の最終行まで検索書き換えをしてから次の文字列(B3)を検索する事が出来なく困っております。
調べてみても、DOLOOPで最初に検索されたセルを検索されたら終了というのが多いです。私の場合ですと、検索文字を書き換えてるのでその方法を取り入れる事が出来ません。
現在出来ているコードを載せますのでアドバイス頂けないでしょうか?
Sub macro1()
Dim rStart As Range
Dim keyWord As String '// 検索文字列
Dim n As Long
Dim m As Long
n = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得
m = Cells(Rows.Count, "G").End(xlUp).Row 'G列の最終行を取得
For i = 2 To n '2からB列の最終行までの数値
keyWord = Range("B" & i)
Set rStart = Range("G3:G" & m).Find(keyWord, LookAt:=xlWhole) '選択範囲G列、検索文字B列
If rStart Is Nothing Then
Else
rStart.Value = Range("A" & i)
End If
Next i
End Sub
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Find + Replace 置換でよいのでは?
Sub test() Dim r As Range For Each r In Range("b2", Range("b" & Rows.Count).End(xlUp)) Range("g3", Range("g" & Rows.Count).End(xlUp)).Replace r.Value, r(1, 0).Value , 1 Next End Sub (seiya) 2019/05/21(火) 12:54
こんな短く書けたなんて…
ちゃんと理解して使わせて頂きます。
ありがとうございます。
(なのれい) 2019/05/21(火) 13:27
Find メソッドで書き換えるのであれば
Sub macro1() Dim rStart As Range, rng As Range Dim keyWord As String '// 検索文字列 Dim n As Long, m As Long, i As Long n = Cells(Rows.Count, "B").End(xlUp).Row 'B列の最終行を取得 m = Cells(Rows.Count, "G").End(xlUp).Row 'G列の最終行を取得 Set rng = Range("G3:G" & m) '<- 対象範囲 For i = 2 To n '2からB列の最終行までの数値 keyWord = Range("B" & i) Set rStart = rng.Find(keyWord, LookAt:=xlWhole) '選択範囲G列、検索文字B列 If Not rStart Is Nothing Then Do rStart.Value = Cells(i, "a").Value Set rStart = rng.FindNext(rStart) Loop Until rStart Is Nothing End If Next i End Sub (seiya) 2019/05/21(火) 13:49
返信遅くなって申し訳ありません。
勉強させて頂きます。
ありがとうございます。
(なのれい) 2019/05/23(木) 13:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.