2017-10-04 14 views
0

CTRL + Fコマンドの実際のコードは何ですか、わかりません。私が見つけた最も近いものが下に貼り付けられます。唯一の問題は、範囲を適切に変更できないことです。VBAのCTRL + Fと似た検索ボックス/ボタン

列Aのシート全体の値を検索する範囲を変更したいのですが、X行の値が見つかったというメッセージを返す代わりに、実際にはそれに行く。私はVBAを初めて使い、アクティブな範囲を理解するのに一番の時間を費やしています。

(GitHubの上)
Sub PlayMacro() 

    Dim Prompt As String 
    Dim RetValue As String 
    Dim Rng As Range 
    Dim RowCrnt As Long 

    Prompt = "" 

    ' The macro recorder has used the active worksheet. This says which 
    ' worksheet is to be used whether it is active or not. Change "Sheet4" 
    ' to the name of your worksheet. 
    With Sheets("Sheet4") 

    ' This will loop forever unless a statement within 
    ' the loop exits the Do. 
    Do While True 

     RetValue = InputBox(Prompt & "Give me a value to look for") 
     'RetValue will be empty if you click cancel 
     If RetValue = "" Then 
     Exit Do 
     End If 

     ' I do not wish to active the cell containing the required value. 
     ' I want to know where it is. 
     Set Rng = .Columns("A:A").Find(What:=RetValue, After:=.Range("A1"), _ 
       LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _ 
       SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

     If Rng Is Nothing Then 
     ' The entered value could not be found 
     Prompt = "I could not find """ & RetValue & """" 
     Else 
     ' The entered value was found 
     RowCrnt = Rng.Row 
     Prompt = "I found """ & RetValue & """ on row " & RowCrnt 
     End If 
     Prompt = Prompt & vbLf 
    Loop 

    End With 
+0

コードに問題がありますか? 'Rng'が見つかった場合、' Rng.select'を実行するだけで、値が見つかったセルをアクティブにすることができます。値が3行目の場合は、 'Rng.Row = 3 Then ...'と言うこともできます。シート全体を検索したい場合は、単に 'Set Rng = .Cells.Find(...')を実行します。 – BruceWayne

+4

FWIW 'LookIn:= xlFormulas、LookAt:= xlWhole'は、特にユーザ"xlValues"を見たくないのですか? – YowE3K

答えて

0

あなたがあなたのコードの最後の部分を変更した場合:

If Rng Is Nothing Then 
    ' The entered value could not be found 
    Prompt = "I could not find """ & RetValue & """" & vbLf 
    Else 
    ' The entered value was found 
    Application.GoTo Rng 
    Prompt = "" 
    End If 
Loop 

私はあなたが欲しいものを得るだろうと思います。

0

excel-finder-macroはあなたがで遊んとの範囲を変更することができ、私はしばらく前に作られたExcelのマクロです。

それはマクロだけVBAですので、あなたはしかし、あなたはREADMEからのみの列Aに検索を制限するなど、欲しい、それをカスタマイズすることができます。

マクロは、現在最も遠いの範囲内のすべてのセルを検索列Aの値を持ち、列ZZまでのすべての行。 cellRange変数を変更することで、それ以上検索したり、別の列に基づいて行を検索したりすることができます。マクロは大文字小文字を区別せず、他のテキストの中に文字または部分文字列を見つけます。

cellRangeとして設定デフォルトである:あなたが値でプレーし、それらをあなたが望む任意の方法を制限することができます

numRows = ActiveSheet.Range("A1048576").End(xlUp).Row 
cellRange = "a1:zz" & numRows 

。あなたが望んでいた、そしてそれを強調して言ったように、このファインダーマクロも見つかった値になり

cellRange = "a1:a1" & numRows 

:たとえば、唯一のA列で検索するには、cellRangeに変更することができます。

コードはオープンソースおよびパブリックドメインなので、自由に使用したり、変更したりできます。

+0

ありがとう、あなたのコードは素晴らしいです。少し問題があります。私はちょうどコードで見つけることを試みている値が別のシートからの参照であることを彼らが式であることに気づいた。残念ながら私は値をコピーして貼り付けることができない、彼らは式を残す必要がある。 –

+1

@ S.MART数式(つまり、 'LookIn:= xlFormulas')内のテキストを検索しようとしているのか、値の中のテキストを検索しようとしていますかそれらの式(すなわち、「LookIn:= xlValues」)によって計算される?Excelで '=" ab "&" cd "'という式があった場合、 '' xlFormulas'で '' abcd "'を検索すると失敗しますが、 'xlValues'でそれを検索すると見つかります。 – YowE3K

関連する問題