次のようにお試しいただけますか?
私はあなたのコードを少し変更しました。
まず、Sheet 1
のセルD6
を参照する名前「Drug
」を定義しました。このようにして検索セルを移動する場合は、VBAコードを更新する必要はありません。
次に、セルを使用しています。最後に見つかったエントリの行番号を保存するには、定義名 "placeholder
"として設定する必要があります。このようにして次回実行すると次のエントリに移動します(存在する場合)。最後の一致に達すると、もう一度それを実行すると、他の一致がないことを知らせるメッセージボックスが表示されます。同時に、 "placeholder
"の値は1
にリセットされますので、再度検索を開始することができます。 セルD6
(Worksheet_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
私は問題を正しく理解していることを望みます。この問題があなたの問題を解決するかどうか教えてください。
'DrugeCell.Select'は' DrugCell.Select'にする必要がありますが、それ以外にコードは2つ以上の一致があるとコードが実行したいと思うとは思わないFirstDrugCellとして1つを設定し、次に他のものを探し続ける。おそらく、配列にセルを追加し、そのセルに対してテストする必要があります。 –
@Michael Bryanは、このコードへの一回の呼び出しで一致する部分を見つけるすべてのセルにループしたいのですか、それとも1つずつ進むべきですか(この 'Sub'を呼び出すたびに次のセルを選択します)。 –
こんにちは、ティム!私はDrugeCellをDrugCellに変更しました。はい、それは私がコードにしたいものです。どのように私は配列に細胞を追加するのですか?ありがとう –