Попытка связаться с адресом ячейки с помощью метода поиска

#excel #vba

Вопрос:

У меня есть 2 разных файла листов в Excel. Я попытаюсь найти эквивалент значения даты, которое я ввел на первой странице, на второй странице. Я хочу вставить блок из первой ячейки, две ячейки справа от адреса найденного значения.

Поэтому я написал блок кода, как показано ниже

 Dim aranan As Date Dim firstAddress As String Dim adres As Range Dim c As Range  Private Sub CommandButton2_Click()  aranan = Range("B1").Value  Range("B2:G6").Select  Selection.Copy  With Worksheets(3).Range("A1:A500")  Set adres = Range("A1:A100").Find(aranan, LookAt:=xlWhole, MatchCase:=True)  If Not adres Is Nothing Then  firstAddress = adres.Address  Do  ActiveSheet.Paste Destination:=Worksheets(2).Range("C1:H5")  Loop While Not adres Is Nothing  End If  End With   End Sub  

Но при отладке я вижу, что значение моей переменной с именем «adres» пустое. Переменная с именем «аранан» содержит название даты. В чем мои ошибки?

Комментарии:

1. Ваш с блоком здесь ничего не делает. В каком диапазоне вы хотите выполнить поиск — A1:A500 или A1:A100 ?

2. на самом деле я хочу найти значение в переменной «aranan» во всем документе @Tim

3. Это звучит как совсем другой вопрос?

4. Я найду, где находится это значение на листе 2, и вставлю ячейку блока с первого листа в несколько ячеек справа от адреса ячейки, который я нашел здесь.

5. Можете ли вы привести примеры того, какие ценности aranan вы бы приняли? Даты могут быть сложными в Excel.

Ответ №1:

Логика «найти все совпадения» достаточно сложна, чтобы ее можно было поместить в отдельный метод — это упрощает управление вашей основной логикой.

Например:

 Private Sub CommandButton2_Click()    Dim dt As Date, col As Collection, c As Range    dt = Me.Range("B1").Value 'Me = the worksheet for this code module    Set col = FindAll(Worksheets(3).Range("A1:A500"), dt)  If col.Count gt; 0 Then  For Each c In col  Me.Range("B2:G6").Copy c.Offset(0, 2) 'two columns over  Next c  Else  MsgBox "No matches found"  End If End Sub   'find all matches for `val` in a range, and return as a collection Public Function FindAll(rng As Range, val) As Collection  Dim rv As New Collection, f As Range, addr As String    Set f = rng.Find(what:=val, after:=rng.Cells(rng.Cells.CountLarge), _  LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _  SearchDirection:=xlNext, MatchCase:=False)    If Not f Is Nothing Then addr = f.Address() 'first cell found  Do Until f Is Nothing  rv.Add f  Set f = rng.FindNext(after:=f)  If f.Address() = addr Then Exit Do 'exit if we've wrapped back to the start  Loop  Set FindAll = rv End Function  

Комментарии:

1. Ты очень порадовал меня своим ответом. Огромное спасибо

2. Я подозреваю, что часть вашей проблемы, возможно, была связана с попыткой сопоставить даты, и этот ответ решал эту проблему, используя LookIn:=xlValues в качестве параметра in Find() .