Консультация № 90692
09.06.2007, 11:42
0.00 руб.
0 4 4
Уважаемые эксперты!
Подскажите пожалуйста:
есть данные (номера телефонов) в ячейках с A3 по A2000
есть мои данные в ячейках с C3 по С15000
Нужно сравнить все телефоны в столбце А со всеми телефонами
в столбце С, и если в ячейке С встречается такой же телефон как и
в столбце А, то напротив совпавшего телефона столбца А, в столбце В
нужно вставить фразу "есть". Так как вручеую считать больше месяца,
то мне сказали написать макрос. Даже ума не приложу что именно писать,
так как у меня слабые знания в VisualBasic. Начал делать, поставил кнопку.
Написал для нее событие, но она делает совсем не то. Помогите, пожалуйста,
иначе придется анализировать вручную, а это адский труд.
С уважением Сергей

Обсуждение

Неизвестный
09.06.2007, 12:32
общий
это ответ
Здравствуйте, Worsvch!

Не нужно использовать ВБА. Используйте функцию ВПР:
1. Отсортируйте столбец А по возрастанию
2. в ячейке В3 пишете формулу: =ЕСЛИ(ВПР(C3;$A$2:$A$2000;1)=C3;"есть";"")
3. копируете формулу вниз до последней заполненной ячейки в столбце С (B1500).
Неизвестный
09.06.2007, 15:01
общий
это ответ
Здравствуйте, Worsvch!
Смотрите приложение, там код макроса.
Если что-то не понятно то пишите на mailto:ua.life@mail.ru

Приложение:
Sub Макрос()n = 2000 ‘До какой строки считатьI1 = "A" ‘Первая ячейка для сравниванияI2 = "C" ‘Вторая ячейка для сравниванияI3 = "B" ‘Ячейка для записи результатов сравненияFor i = 3 To n ‘Цикл rang = I1 & i ‘Выбираем ячейку Range(rang).Select If ActiveCell.FormulaR1C1 = "" Then ‘Если в ячейке нет даных, то MsgBox "В ячейке " & i & rang & " нет данных", vbOKOnly, "Нет даных" ‘Сказать об этом Exit Sub Else ‘Иначе tmp = ActiveCell.FormulaR1C1 ‘Загоняем в переменую содержание ячейки rang = I2 & i ‘Выбираем ячейку Range(rang).Select If ActiveCell.FormulaR1C1 = "" Then ‘Если в ячейке нет даных, то MsgBox "В ячейке " & rang & " нет данных", vbOKOnly, "Нет даных" ‘Сказать об этом Exit Sub Else If ActiveCell.FormulaR1C1 = tmp Then ‘Если содержание второй ячейки равно переменой то rang = I3 & i ‘Выбираем ячейку Range(rang).Select ActiveCell.FormulaR1C1 = "есть" ‘Записуем "есть" Else ‘Иначе rang = I3 & i ‘Выбираем ячейку Range(rang).Select ActiveCell.FormulaR1C1 = "не" ‘Записуем "не" End If End If End If Next iEnd Sub
Неизвестный
09.06.2007, 21:38
общий
это ответ
Здравствуйте, Worsvch!
Вариант ответа от Felix, самый подходящий для решения Вашей задачи не прибегая к VBA. Если же Вы решили "познакомиться с VBA", предлагаю маленький кусочек кода с помощью которого так же можно решить Вашу задачу.
Удачи.
Евгений.

Приложение:
Sub checkData()Application.ScreenUpdating = FalseDim iRow As Long, vVal, sAdr As String, c sAdr = Cells(3, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) _ & ":" & Cells(65000, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False)iRow = 2Do While iRow < 65000 iRow = iRow + 1 vVal = Trim(Cells(iRow, 2).Value) If vVal <> "" Then Set c = Range(sAdr).Find(vVal, LookIn:=xlFormulas) If Not c Is Nothing Then Cells(iRow, 3).Formula = "есть" End If End IfLoopApplication.ScreenUpdating = TrueEnd Sub
Неизвестный
10.06.2007, 14:48
общий
это ответ
Здравствуйте, Worsvch!
Sub Sravn()
Dim lA As Long
Dim sh As Object, stat As String

Set sh = Excel.Sheets(1)
sh.Activate

stat = Application.StatusBar
Application.StatusBar = "Подождите, пожалуйста..."
DoEvents

Application.ScreenUpdating = False ‘Это для того, чтобы экран до окончания не перерисовывался - так мы экономим некоторое кол-во времени

For lA = 3 To 15000 ‘У Вас 15000
If Cells(lA, 1) = Cells(lA, 3) Then ‘Смотрим, если А??=С??, то...
Cells(lA, 2) = "--- Есть ---" ‘...в В?? пишем слово "--- есть ---"
End If
Next lA

Application.StatusBar = stat
Application.ScreenUpdating = True ‘Обновляем экран
Set sh = Nothing
End Sub

Может еще как-то оптимизируете по скорости, но, по-моему, 1,5 секунды удовлетворительный результат (у меня на машине все отрабатывает за 1316 мс.)
Форма ответа