2016-09-13 3 views
0

У меня есть рабочий лист, который регулярно обновляется с подробностями дубликатов записей из базы данных.Использование массива для поиска активного листа

Я пытаюсь создать макрос, который ищет конкретные записи, однако, поскольку я новичок в Excel VBA, я борюсь.

Кода я в настоящее время выглядит следующим образом: есть больше имен (21, чтобы быть точными, но для экономии времени я устранил эти)

Dim rg As Range 
Dim lnglastrow As Long 
Dim intnamemax As Integer 
Dim strName() As String 


intnamemax = 21 
ReDim strName(1 To intnamemax) 

strName(1) = "Bob Smith" 
strName(2) = "Rhys Jones" 
strName(3) = "Rebecca Hickling" 

lnglastrow = ActiveSheet.UsedRange.Rows.Count 

For Each rg In Range("A2:A" & lnglastrow) 
    For i = 1 To intnamemax 
     Set c = rg.Find(strName(i), LookIn:=xlValues) 
      If Not c Is Nothing Then 
      MsgBox "Proxy Candidate Found at " & found.Address 
      Else 
      MsgBox "No Proxy Candidates Found ", vbOKOnly, "Success!" 
      End If 
     Next i 
    Next 

End Sub 

макрос будет работать, однако при тестировании я получаю MsgBox кандидаты-кандидаты не найдены, несмотря на то, что есть запись для одного из имен.

Я изо всех сил пытаюсь выяснить, где я поступил неправильно, и был бы признателен за любую помощь.

+0

копия один из имен из массива 'strName' и вставить в ячейку' A2' и посмотреть, если он работает – slayernoah

+0

должен быть found.address c.address? вы можете сделать это с помощью formua, что-то вроде этого '= INDEX (IF (COUNTIF ($ B $ 1: $ B $ 6, $ A $ 1: $ A $ 6)> 0, ($ A $ 1: $ A $ 6 &" at " & ROW ($ B $ 1: $ B $ 6))), ROWS ($ D $ 1: $ D1)) 'данные, подлежащие проверке, находятся в столбце A, чтобы проверить, является ли B, а результаты находятся в столбце, который вы положили in, столбец D, является способом восхождения по счету при перетаскивании. Это формула массива, поэтому используйте CTRL SHIFT и ENTER. –

+0

@Nathan_Sav, к сожалению, рабочий лист - это путь к большой формуле, плюс пользователь отлично справляется с Excel (с формулами и т. Д.) И хочет, чтобы он был автоматизирован. – Lbrin

ответ

0

Вам нужно вытащить ложное возвращение из цикла, или вы получите хотя бы 20 фальшивых, даже если они совпадают.

И вам не нужен внешний контур, так как FIND будет рассматривать весь диапазон как один.

Dim lnglastrow As Long 
Dim intnamemax As Integer 
Dim strName() As String 
Dim fnd As Boolean 

intnamemax = 21 

ReDim strName(1 To intnamemax) 

strName(1) = "Bob Smith" 
strName(2) = "Rhys Jones" 
strName(3) = "Rebecca Hickling" 

lnglastrow = ActiveSheet.UsedRange.Rows.Count 

For i = 1 To intnamemax 
    Set c = Range("A2:A" & lnglastrow).Find(strName(i), LookIn:=xlValues) 
    If Not c Is Nothing Then 
     MsgBox "Proxy Candidate Found at " & c.Address 
     fnd = True 
     Exit For 
    End If 
Next i 
If Not fnd Then 
    MsgBox "No Proxy Candidates Found ", vbOKOnly, "Success!" 
End If 

End Sub 
+0

Я пробовал ваш код с одним из имен, вставленных и, к сожалению, до сих пор не радует как будто это значение не существует в столбце, даже если оно и есть. Если значение не находится в ячейке A2 – Lbrin

+0

Вы уверены, что они написаны одинаково, а в данных нет лишних невидимых символов, таких как пробелы? –

+0

Данные копируются, поэтому всегда будут одинаковыми, а @slayernoah я постараюсь, что, надеюсь, это сработает! – Lbrin

Смежные вопросы