2015-02-25 2 views
0

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

У меня есть цикл for, цикл через кучу значений и правильное завершение, когда ячейка содержит «-».

Однако, если ячейка содержит текст, который может быть найден в диапазоне («A2»), то я хочу, чтобы он выдавал его значение в Range («A5»).

Private Sub CommandButton21_Click() 
    Dim cell As Range 
    For Each cell In Sheets(1).Range("$B:$B") 
     Dim i As Long 
     i = cell.Row + i 
     If InStr(1, cell.Text, Range("A2").Text, vbTextCompare) Then Range("A5").Value = cell.Text 
     If cell.Text = "--" Then Exit For 
    Next cell 
End Sub 

Не знаю, почему этот вид сравнения не удается.

+0

Как я понимаю ваш рассказ, вы перевернули параметры * Search For * и * Within Text *. Параметры VBA 'InStr' - это противоположный порядок работы« Найти »или« Поиск ». – Jeeped

+0

Я также хотел бы подтвердить, что вы знаете, о чем вы просите. Свойством '.Text' диапазона (aka * cell *) является отображаемый текст и зависит от форматирования ячейки. Ячейка с '= TODAY()' отформатирована как * dd-mmm-yyyy * даст '.Text' от 25 февраля 2015 года' .Value' от 02/25/2015 и '.Value2' 42060 – Jeeped

+1

pardon, если я ошибаюсь, но я думаю, что 'dim i' должен быть вне цикла' for each' – bsapaka

ответ

0

InStr возвращает числовое значение, равное начальной позиции строки поиска в искомом поле, так что вы должны сравнить его против ряда:

If InStr(1, cell.Text, Range("A2").Text, vbTextCompare) > 0 Then Range("A5").Value = cell.Text 

На стороне записки, если вы этого не сделаете нужно это, тогда быстрее обработать .Value2, затем .Text - см. this question.

+1

Должен быть «InStr (1, cell.Text, Range (« A2 »). Текст, vbTextCompare)> 0' в противном случае он захватывает только предметы со 2-го символа. – PatricK

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