Как получить данные точного соответствия с другого листа? - PullRequest
2 голосов
/ 23 января 2020

У меня есть данные в таблице «База данных», как показано ниже:

enter image description here

Я написал короткий код, чтобы получить данные, соответствующие определенным критериям из листа «База данных» и вставьте его на другой лист «SelectedRecords»

Вот мой код

Sub CopyData()
Dim db As Worksheet
Dim rcd As Worksheet

Set db = ThisWorkbook.Sheets("Database")
Set rcd = ThisWorkbook.Sheets("SelectedRecords")

db.Range("A1:C7").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=Range("$A$1:$A$2"), _
    CopyToRange:=rcd.Range("$A$4:$B$4")

End Sub

Этот код работает, но я получаю некоторые дополнительные записи, как показано ниже:

enter image description here

Я ищу данные, где Имя = "Джек", но в выводе я получаю все данные, начиная с "Джек". Как я могу получить записи, которые точно соответствуют критериям, указанным в ячейке A2. В этом случае мой вывод должен дать только одну запись для «Джека».

Другие две записи "JackSparrow" и "Jackson" должны быть отфильтрованы.

Ответы [ 2 ]

2 голосов
/ 23 января 2020

По умолчанию вы получите все совпадения. Прямо сейчас ячейка A2 в SelectedRecords имеет Jack. Чтобы получить точное совпадение, измените его на ="=Jack", как показано ниже, а затем повторите попытку.

Альтернатива, если вы не хотите вводить " = "тогда каждый раз используйте вспомогательный столбец, как показано ниже

enter image description here

0 голосов
/ 23 января 2020

Как ответ @ Siddharth_Rout, вы можете использовать его в VBA следующим образом:

Dim db As Worksheet
Dim rcd As Worksheet

Set db = ThisWorkbook.Sheets("Database")
Set rcd = ThisWorkbook.Sheets("SelectedRecords")

' Here a "=" will added at beginning if it's not typed
If (Left(rcd.Range("$A$2").Value, 1) <> "=") Then
    rcd.Range("$A$2").Value = "'=" & rcd.Range("$A$2").Value
    '                          ^ this quote is required to avoiding calculation 
End If

db.Range("A1:C7").AdvancedFilter _
    Action:=xlFilterCopy, _
    CriteriaRange:=rcd.Range("$A$1:$A$2"), _
    CopyToRange:=rcd.Range("$A$4:$B$4")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...