|
▼セボン さん:
こんばんは。
>1シート上のあるデータを検索して、そのデータが存在しているセル位置(R1,C1)を取得する方法を教えてください。※アクティブシェルの位置取得ではありません。
>例えば、”a2014”という数値があるか検索、データがあることが判明し、かつそのセル位置を取得したいのです。
>よろしくお願いします。
Findメソッドを使用した例です。
だいぶ前に作ったサブプロシジャーですが・・。
アクティブシートが検索対象シートです。
'=================================================
Sub main()
Dim f_value As Variant
Dim find_cell As Range
Dim cnt As Long
cnt = 0
f_value = "a2014" '検索する値を入れる"
Set find_cell = get_findcell(f_value, ActiveSheet.Cells)
Do While Not find_cell Is Nothing
With find_cell
MsgBox "見つかった : 行--" & .Row & " 列--" & .Column
End With
cnt = cnt + 1
Set find_cell = get_findcell() '次の検索
Loop
MsgBox cnt & "個みつかりました"
End Sub
'==========================================================================
Function get_findcell(Optional f_v As Variant = "", Optional rng As Range = Nothing, Optional 方法 As Long = 1) As Range
'指定された値でセル範囲を検索し、該当するセルを取得する
'input : f_v 検索する値
' rng 検索する範囲
' 方法: :検索方法 1-完全一致 2-部分一致
'output:get_findcell 見つかったセル(見つからなかったときはNothingが返る)
Static 検索範囲 As Range
Static 最初に見つかったセル As Range
Static 直前に見つかったセル As Range
If Not rng Is Nothing Then
Set 検索範囲 = rng
End If
If f_v <> "" Then
Set get_findcell = 検索範囲.Find(f_v, , xlValue, 方法)
If Not get_findcell Is Nothing Then
Set 最初に見つかったセル = get_findcell
Set 直前に見つかったセル = get_findcell
End If
Else
Set get_findcell = 検索範囲.FindNext(直前に見つかったセル)
If get_findcell.Address = 最初に見つかったセル.Address Then
Set get_findcell = Nothing
Else
Set 直前に見つかったセル = get_findcell
End If
End If
End Function
確認してみて下さい。
|
|