2015-03-26 9 views
0

Я очень новичок в VBA и понимаю только основные принципы, поэтому это может быть невозможно с кодом, который я использовал. У меня есть код для нахождения значения в Sheet1 с использованием диапазона от Sheet2, который вставляет строку entiore в Sheet3. Как я могу изменить его так, чтобы он по-прежнему вставлял строку, основанную на подобном значении, а не точное совпадение, поэтому вставьте строку, если «Company Ltd» была в Sheet1, и только компания находилась в диапазоне. Я пробовал подстановочные заявления, но не могу заставить их работать с диапазоном. Может кто-то указать мне верное направление?VBA, находящие значения из диапазона и вставки

Option Compare Text 
    Sub Find_Values() 
    Dim c1 As Range, rng1 
    Dim c2 As Range, rng2 
    Dim lastrow As Long 
    Set rng1 = Range("sheet1!a1:a10") 
    Set rng2 = Range("sheet2!a1:a10") 


    For Each c2 In rng2 
    For Each c1 In rng1 

    If c1 = c2 Then 
    c1.EntireRow.Copy 
    Sheets("sheet3").Activate 


    lastrow = Cells(Rows.Count, "a").End(xlUp).Row 
    Range("a" & lastrow + 1).Select 
    ActiveSheet.Paste 
    End If 

    Next c1 
    Next c2 

    End Sub 

Спасибо

ответ

0

Что Сэм пытается сказать, изменить эту строку:

If c1 = c2 Then 

Вы можете использовать:

If InStr(c1,c2) > 0 Then '... 

Вы также можете использовать

If InStr(c1,c2) > 0 or InStr(c2,c1) > 0 or UCase(c2) = UCase(c1) Then '... 

И т.д.

Есть много разных сравнений, которые вы можете добавить к этой строке кода.

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

Вы также можете изменить свой код (весьма значительно), чтобы использовать найти ключевое слово, которое позволяет использовать символы подстановки и поиск с помощью xlWhole и xlPart

Это действительно зависит от того, каковы различия и сколько кода вы хотите изменение.

Вы также можете быть заинтересованы в использовании Like Operator, хотя, если вы просто сравниваете значения, это, вероятно, не то, что вам нужно.

+0

Те же предупреждения, что и в ответе Сэма: убедитесь, что вы включили первый параметр 'InStr (1, c1, c2)', а не 'InStr (c1, c2)' – FreeMan

+1

На самом деле вам не нужно; попробуй. Первый параметр является необязательным, и если вы используете строку в качестве первой и второй, она игнорируется. – user1274820

+0

Подпись метода - это 'InStr ([start], string, substring, [compare])', '[]' обозначает необязательный. – Sam

0

Чтобы найти, если существует строка внутри другой строки, используйте InStr function. Например,

Dim stringPosition As Integer 
stringPosition = InStr("Company Ltd", "Company") 

If stringPosition > 0 Then 
' we found a match 
End If 
+0

Спасибо, но было бы слишком много переменных для жесткого кода в таком виде и не знали бы, что такое структуры. Можно ли сопоставить определенное количество символов? –

+0

Это всего лишь образец, на практике вы должны перебирать каждую ячейку в диапазоне, как правило, с помощью для или для каждого цикла, а затем выполнять сравнения со значением ячейки, а не с жестко закодированным значением в приведенном выше примере. – Sam

+0

Не забудьте указать первый параметр для начальной точки InStr. Ваша ссылка идет в VB.net документации первый параметр – Sobigen

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