2016-09-12 8 views
0

VBAの新機能で、特定のセルに値を入力してその値を検索するときに検索システムを使用したいセル範囲内にある。マクロは最初のセルに移動し、次に一致するものが見つからなくなるまで次を選択します。私はネットを通して検索したが、これを把握するのに苦労しているコードを持っている。セルの値からセルの値の値を見つけて次に見つける方法

ありがとうございました! :)

Sub FindADrug() 

Dim DrugCell As Range 
Dim SearchRange As Range 
Dim SearchCell As String 
Dim FirstDrugCell As String 

SearchCell = Sheets("Sheet1").Range("D6").Value 

Set SearchRange = Range("A1:A335") 

Set DrugCell = SearchRange.Find(What:=SearchCell, MatchCase:=False, LookAt:=xlPart) 

If Not DrugCell Is Nothing Then 
    DrugeCell.Select 

Else 
    FirstDrugCell = DrugCell.Address 

    Do 

     Set DrugCell = SearchRange.FindNext(DrugCell) 


    Loop While DrugCell.Address <> FirstDrugCell 

End If 

End Sub 
+1

'DrugeCell.Select'は' DrugCell.Select'にする必要がありますが、それ以外にコードは2つ以上の一致があるとコードが実行したいと思うとは思わないFirstDrugCellとして1つを設定し、次に他のものを探し続ける。おそらく、配列にセルを追加し、そのセルに対してテストする必要があります。 –

+0

@Michael Bryanは、このコードへの一回の呼び出しで一致する部分を見つけるすべてのセルにループしたいのですか、それとも1つずつ進むべきですか(この 'Sub'を呼び出すたびに次のセルを選択します)。 –

+0

こんにちは、ティム!私はDrugeCellをDrugCellに変更しました。はい、それは私がコードにしたいものです。どのように私は配列に細胞を追加するのですか?ありがとう –

答えて

0

次のようにお試しいただけますか?

私はあなたのコードを少し変更しました。

まず、Sheet 1のセルD6を参照する名前「Drug」を定義しました。このようにして検索セルを移動する場合は、VBAコードを更新する必要はありません。

次に、セルを使用しています。最後に見つかったエントリの行番号を保存するには、定義名 "placeholder"として設定する必要があります。このようにして次回実行すると次のエントリに移動します(存在する場合)。最後の一致に達すると、もう一度それを実行すると、他の一致がないことを知らせるメッセージボックスが表示されます。同時に、 "placeholder"の値は1にリセットされますので、再度検索を開始することができます。 セルD6Worksheet_Changeサブルーチンを参照)の値を変更した場合でも、その値は1にリセットされます。

Sub FindADrug() 

    Dim DrugCell As Range 
    Dim SearchRange As Range 
    Dim SearchCell As String 
    Dim FirstDrugCell As String 
    Dim Counter As Integer 

    Counter = WorksheetFunction.CountA(Range("A:A")) 
    SearchCell = Range("Drug").Value 

    Set SearchRange = Range("A1:A" & Counter) 

    'Range("placeholder") refers to a defined name which is used to store the row of the last drug found. 
    'You have to set it before using the macro. 
    Set DrugCell = SearchRange.Find(What:=SearchCell, After:=Cells(Range("placeholder"), 1), MatchCase:=False, SearchDirection:=xlNext, LookAt:=xlPart) 

    If DrugCell Is Nothing Then 

    MsgBox "No drug found.", vbOKOnly, "No results..." 

    Else 

    FirstDrugCell = DrugCell.Address 

    If DrugCell.Row < Range("placeholder").Value Then 

     MsgBox "Last drug found", vbOKOnly, "Last drug" 
     Range("placeholder") = 1 

    Else 

     Range("placeholder") = DrugCell.Row 
     DrugCell.Select 
     Set DrugCell = SearchRange.FindNext(DrugCell) 

    End If 

    End If 

End Sub 


Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Row = 6 And Target.Column = 4 Then Range("placeholder") = 1 
End Sub 

私は問題を正しく理解していることを望みます。この問題があなたの問題を解決するかどうか教えてください。

関連する問題