Страница 1 из 2

Сравнение данных в листах.

Добавлено: 07 апр 2008, 10:55
byaka86
Помогите ПЛИЗ!
Необходимо сравнить данные на 2-х листах (15000 и 25000 записей) по 1-й колонке.
Если на 2-м листе есть строка из первого листа - перенести запись на 3-й лист.
Таким образом должны остаться:
1-й лист - исходные данные.
2-й лист - разница в исходных данный.
3-й лист - перенесенные данные.
4-й лист - прсто скопированный второй в начале работы макроса.

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

Re: Сравнение данных в листах.

Добавлено: 07 апр 2008, 11:11
VictorM
Здравствуйте,byaka86.
Для простоты понимания и удобства при ответе на вопрос, желательно иметь исходный файл. Если это, конечно, не гостайна. И не обязательно все 20000 строк :)
файл Вы можете прикрепить к Вашему сообщению в режиме редактирования сообщения - "расширенный".
Если на 2-м листе есть строка из первого листа - перенести запись на 3-й лист.
именно пернести, т.е. с удалением или скопировать?

Re: Сравнение данных в листах.

Добавлено: 07 апр 2008, 12:37
byaka86
VictorM писал(а):Здравствуйте,byaka86.
Для простоты понимания и удобства при ответе на вопрос, желательно иметь исходный файл. Если это, конечно, не гостайна. И не обязательно все 20000 строк :)
файл Вы можете прикрепить к Вашему сообщению в режиме редактирования сообщения - "расширенный".
именно пернести, т.е. с удалением или скопировать?


Вот как вы и просили - прикрепляю файл.
Желательно перенести, чтоб можно было отдельно выделить не попадающие в перкый лист строки.

Re: Сравнение данных в листах.

Добавлено: 07 апр 2008, 15:24
Mint86
ИМХО надстройка PLEX довольно легко справляется с этой задачей.

Re: Сравнение данных в листах.

Добавлено: 07 апр 2008, 16:57
byaka86
Спасибо, но это немного не то.
Подскажите мне просто как изъять в буфер содержимое ячейки.
СПАСИБО!

Re: Сравнение данных в листах.

Добавлено: 07 апр 2008, 20:29
VictorM
byaka86,
Подскажите мне просто как изъять в буфер содержимое ячейки.
а можно Вас попросить "расшифровать" это предложение :confused:
Слово изъять, что Вы под этим понимаете? Если скопировать в буфер обмена с удалением, то это вырезать. И еще, изъять, а дальше?
По поводу Вашего вопроса в начале темы и приложенного файла. Сделать можно, но нужно сразу понимать, что при количестве строк 20 000 - 30 000, цикл будет работать ОЧЕНЬ долго. Здесь, видимо, лучше подошли бы формулы листа. Конкретно по Вашему макросу:
значение данных в ячейке - c = ActiveCell.Value и d = ActiveCell.Value,а дальше можно сравнивать значения и производить необходимые действия.

Re: Сравнение данных в листах.

Добавлено: 08 апр 2008, 00:05
byaka86
VictorM писал(а):byaka86, а можно Вас попросить "расшифровать" это предложение :confused:
Слово изъять, что Вы под этим понимаете? Если скопировать в буфер обмена с удалением, то это вырезать. И еще, изъять, а дальше?
По поводу Вашего вопроса в начале темы и приложенного файла. Сделать можно, но нужно сразу понимать, что при количестве строк 20 000 - 30 000, цикл будет работать ОЧЕНЬ долго. Здесь, видимо, лучше подошли бы формулы листа. Конкретно по Вашему макросу:
значение данных в ячейке - c = ActiveCell.Value и d = ActiveCell.Value,а дальше можно сравнивать значения и производить необходимые действия.

Да, именно вырезать и нужно. Я вот и хочу их сравнить, но у меня не работает именно сравнение. Вот я и прошу помощи о том каким образом их сравнить, что знал - написал в макросе, но он не работает :(

Re: Сравнение данных в листах.

Добавлено: 08 апр 2008, 00:17
VictorM
Именно применительно к Вашему макросу я и написал (не стал даже буквы менять, чтобы было понятнее).
У Вас есть строка c = Range(Cells(i, 2), Cells(i, 2)).Select и если это заменить на

Код: Выделить всё

Range(Cells(i, 2), Cells(i, 2)).Activate
c = ActiveCell.Value
то теперь переменная с будет содержать значение активной ячейки. То же самое и применительно к d. Теперь Вы получили значения ячеек и можете их сравнивать.
Начало Вашего макроса может выглядеть примерно так

Код: Выделить всё

Application.Goto Reference:=Worksheets("Результат").Range("A1")
Worksheets("Результат").Rows("1:50").Delete Shift:=xlUp
Application.Goto Reference:=Worksheets("Лист3").Range("A1")
Worksheets("Лист3").Rows("1:50").Delete Shift:=xlUp
Worksheets("Лист2").Rows("1:1").Copy Destination:=Worksheets("Результат").Range("A1")
inc = 2
For inс = inc To 50
i = inc
Application.Goto Reference:=Worksheets("журнал проводок").Range("A1") '
Range(Cells(i, 2), Cells(i, 2)).Activate
c = ActiveCell.Value
ActiveWorkbook.Sheets("Лист2").Activate
j = 1
A: j = j + 1
Range(Cells(j, 1), Cells(j, 1)).Activate
 d = ActiveCell.Value
 If c = d Then
'и т.д.

Re: Сравнение данных в листах.

Добавлено: 08 апр 2008, 12:00
byaka86
Спасибо большое!
Получилось кое как! Только вот действительно - ОЧЕНЬ долго обрабатывает.
Может быть можете подсказать какой-нибудь более рациональное решение.

Re: Сравнение данных в листах.

Добавлено: 08 апр 2008, 12:04
VictorM
Я конечно не уверен, не приходилось такое делать, но здесь IMHO, нужно работать с формулами массивов.
А несколько увеличить скорость работы макроса может помочь вот такая конструкция:

Код: Выделить всё

    With Application
         .ScreenUpdating = False
         .Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
‘’’’’’’’’’’’’’’’’’’’’’
         .Calculation = xlAutomatic
         .ScreenUpdating = True
    End With
ну и, конечно, избавиться, по возможности, от всех Select и Activate.