● EXCEL 単語検索マクロサンプル
指定したシート範囲を検索し、検索結果を表示するサンプルです。
下の例では、"データ"シートの"A"列の"エク"という文字を検索し、
発見した行のA〜C列を検索結果に表示しています。
(処理の説明)
@シートより検索するシート名と個数を取得
Aシートより検索する文字と個数を取得
B結果を表示するセルをクリア
C検索条件がない場合は終了する判断
Dシートより検索する列名を取得
E検索開始
FORループで始めの検索対象シートにて、検索文字を全て検索した後、
検索対象シートを順次取り替えて検索している。
《FORループ内処理》
E-1 検索シートの検索範囲を選択する。
E-2 最初の検索を行い、無ければループを抜ける
Set C = .Find(検索文字(検索文字i), LookIn:=xlValues)
E-3 有った場合は、セル位置を保存し、データを表示する。
E-4 次の検索を行い、最初のセル位置を検出するまでE-3、E-4を繰り返す。
Set C = .FindNext(C) '次を検索
F検索対象シートを全て検索したら終了
《記述場所》
〔ソースリスト〕
ちょっと面白がって、変数名に日本語を使ってみましたがやっぱり見づらいですね。
いくらVBAでも長いプログラムで日本語変数を使うのはタブーでしょう。
Option Explicit
Private Sub CommandButton1_Click()
Dim 検索文字(100) As String
Dim 検索文字MAX As Integer
Dim 検索シート(100) As String
Dim 検索シートMAX As Integer
Dim hit件数 As Integer
Dim シートi As Integer
Dim 検索文字i As Integer
Dim 検索列名 As String
Dim i As Integer
Dim C As Object
Dim firstAddress As Variant
For i = 0 To 100
If Worksheets("検索マクロ").Cells(4 + i, 2).Value = "" Then Exit For
検索シート(i) = Worksheets("検索マクロ").Cells(4 + i, 2).Value
Next i
検索シートMAX = i - 1
For i = 0 To 9
If Worksheets("検索マクロ").Cells(4 + i, 4).Value = "" Then Exit For
検索文字(i) = Worksheets("検索マクロ").Cells(4 + i, 4).Value
Next i
検索文字MAX = i - 1
Worksheets("検索マクロ").Range("f2:l32000").Value = ""
If 検索文字MAX = -1 Or 検索シートMAX = -1 Then
Worksheets("検索マクロ").Cells(hit件数 + 1, 6).Value = "検索条件を設定してください"
Exit Sub
End If
hit件数 = 1
検索列名 = Worksheets("検索マクロ").Cells(1, 3).Value
For シートi = 0 To 検索シートMAX
For 検索文字i = 0 To 検索文字MAX
With Worksheets(検索シート(シートi)).Range(検索列名 + "1:" + 検索列名 + "32000")
Set C = .Find(検索文字(検索文字i), LookIn:=xlValues)
If Not C Is Nothing Then
firstAddress = C.Address
Do
Worksheets("検索マクロ").Cells(hit件数 + 1, 6).Value = hit件数
Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 0).Value = 検索シート(シートi)
Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 1).Value = _
Worksheets(検索シート(シートi)).Range("$A" + Right(C.Address, 2)).Value
Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 2).Value = _
Worksheets(検索シート(シートi)).Range("$B" + Right(C.Address, 2)).Value
Worksheets("検索マクロ").Cells(hit件数 + 1, 7 + 3).Value = _
Worksheets(検索シート(シートi)).Range("$C" + Right(C.Address, 2)).Value
hit件数 = hit件数 + 1
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
End With
Next 検索文字i
Next シートi
End Sub
○c = Right( a , b ) : aで指定した文字列を、右からbで指定した文字数だけ取り出す関数。
○"abc" + "de" 、 "abc" & "de" : +や&は文字・文字列をくっつける記号。
○サンプルファイルダウンロード○(準備中)
|