Excelマクロでよく使用されるFindメソッドを駆使するための実用的なコード例を紹介します。
ぜひ これらのコードをお試しになって、
日常のタスクを効率化してください!😉
Find関数(特定文字列を検索)
Sub 特定の文字列を検索()
' "検索文字列"をA列で最初に見つける
Dim foundCell As Range
Set foundCell = Columns("A:A").Find(What:="めろん", LookIn:=xlValues)
' 見つかった場合、その位置を表示
If Not foundCell Is Nothing Then
MsgBox "最初の出現位置: " & foundCell.Address
Else
MsgBox "テキストが見つかりませんでした。"
End If
End Sub
シートのA列にテキストがランダムに配置されています。
「めろん」が最初に出現するセルを見つけて、その位置を示します。
Find関数(大文字と小文字を区別)
Sub 大文字と小文字を区別して検索()
Dim foundCell As Range
Set foundCell = Columns("A:A").Find(What:="Apple", LookIn:=xlValues, MatchCase:=True)
' 見つかった場合、その位置を表示
If Not foundCell Is Nothing Then
MsgBox "大文字のAppleが見つかりました: " & foundCell.Address
Else
MsgBox "大文字のAppleが見つかりませんでした。"
End If
End Sub
シートのA列にテキストがランダムに配置されています。
「Apple」が最初に出現するセルを見つけて、その位置を示します。
[MatchCase:=True] は、大文字と小文字を区別する検索を行うという意味です。
Find関数(部分一致検索)
Sub 部分一致検索()
Dim foundCell As Range
Set foundCell = Columns("A:A").Find(What:="大福", LookIn:=xlValues, LookAt:=xlPart)
' 見つかった場合、そのセルを選択
If Not foundCell Is Nothing Then
MsgBox "部分一致するテキストが含まれるセル: " & foundCell.Address
foundCell.Select
Else
MsgBox "該当するテキストが見つかりませんでした。"
End If
End Sub
シートのA列にテキストがランダムに配置されています。
「大福」を含むセルを見つけて、その位置を示します。
[LookAt:=xlPart] は、部分一致の検索を行うことを意味しており、
セルの内容に “大福” というテキストを含んでいれば一致とみなされます。
Find関数(テキストを置き換え)
Sub 置き換え()
Dim cell As Range
' B列で「変更対象」というテキストを検索
Set cell = Columns("B:B").Find(What:="変更対象")
' もし検索したテキストが見つかったら
If Not cell Is Nothing Then
' 見つかったセルの値を「更新済み」に置き換える
cell.Value = "更新済み"
End If
End Sub
シートのB列から「変更対象」という文字を見つけて、
「更新済み」に置き換えます。
最初に見つかったものだけを「更新済み」に置き換えます。
Find関数(複数テキストを置き換え)
Sub 置き換え()
Dim cell As Range
Dim firstFoundAddress As String
With Worksheets("Sheet1").Columns("B:B") ' シート名は適宜変更
' B列で「変更対象」というテキストを検索
Set cell = .Find(What:="変更対象", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
' もし検索したテキストが見つかったら(cellがNothingではない場合)
If Not cell Is Nothing Then
firstFoundAddress = cell.Address
Do
' 見つかったセルの値を「更新済み」に置き換える
cell.Value = "更新済み"
' 同じ列で次の「変更対象」を検索
Set cell = .FindNext(cell)
' cellがNothingになったらループを抜ける
If cell Is Nothing Then
Exit Do
End If
' 最初に見つけたセルに戻るか、cellがNothingになるまでループ
Loop While cell.Address <> firstFoundAddress
End If
End With
End Sub
特定のシートのB列において「変更対象」という
テキストを含むすべてのセルを検索し、「更新済み」というテキストに置き換えます。
Find関数(見つかった隣のセルに値入力)
Sub 置き換え()
Dim cell As Range
Dim firstAddress As String
'Sheet1のB列で"A組"というテキストを検索し、見つかったらそのセルをcell変数に設定
With Sheet1.Columns("B:B")
Set cell = .Find(What:="A組", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
'Ifステートメントを使用してcellがNothingではないかチェック
If Not cell Is Nothing Then
firstAddress = cell.Address ' 最初に見つけたセルのアドレスを記録します。
Do
'セルが見つかった場合、そのセルの右隣(同じ行で1列右)のセルに"隣のセルに入力"というテキストを入力
cell.Offset(0, 1).Value = "対応済"
'次に該当するセルを検索します。
Set cell = .FindNext(cell)
Loop While Not cell Is Nothing And cell.Address <> firstAddress ' 最初に見つけたセルに戻るか、見つからなくなるまでループ
End If
End With
End Sub
特定のシートのB列において「A組」という文字を検索します。
「A組」を見つけたら、隣のC列に 「対応済」というテキストを入力します。
この記事がお役に立ちますと幸いです。
【エクセルマクロ】別シート・別ファイルをFind検索する
...
「ChatGPT API×Excel VBA 自動化仕事術」
ChatGPTとExcel VBAの強力な組み合わせをマスターし、日々の作業を劇的に効率化!
手間のかかるデータ処理を秒速で完了しちゃいましょう!
リンク