Сравнение данных в листах.
Модератор: Naeel Maqsudov
Помогите ПЛИЗ!
Необходимо сравнить данные на 2-х листах (15000 и 25000 записей) по 1-й колонке.
Если на 2-м листе есть строка из первого листа - перенести запись на 3-й лист.
Таким образом должны остаться:
1-й лист - исходные данные.
2-й лист - разница в исходных данный.
3-й лист - перенесенные данные.
4-й лист - прсто скопированный второй в начале работы макроса.
Проблема возникла в том, что не получается сравнить данные в ячейках.
Уже ставил формат ячейки и кисловой и текстовый - не помогает, данные вообще числовые.
Необходимо сравнить данные на 2-х листах (15000 и 25000 записей) по 1-й колонке.
Если на 2-м листе есть строка из первого листа - перенести запись на 3-й лист.
Таким образом должны остаться:
1-й лист - исходные данные.
2-й лист - разница в исходных данный.
3-й лист - перенесенные данные.
4-й лист - прсто скопированный второй в начале работы макроса.
Проблема возникла в том, что не получается сравнить данные в ячейках.
Уже ставил формат ячейки и кисловой и текстовый - не помогает, данные вообще числовые.
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Здравствуйте,byaka86.
Для простоты понимания и удобства при ответе на вопрос, желательно иметь исходный файл. Если это, конечно, не гостайна. И не обязательно все 20000 строк
файл Вы можете прикрепить к Вашему сообщению в режиме редактирования сообщения - "расширенный".
Для простоты понимания и удобства при ответе на вопрос, желательно иметь исходный файл. Если это, конечно, не гостайна. И не обязательно все 20000 строк

файл Вы можете прикрепить к Вашему сообщению в режиме редактирования сообщения - "расширенный".
именно пернести, т.е. с удалением или скопировать?Если на 2-м листе есть строка из первого листа - перенести запись на 3-й лист.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
VictorM писал(а):Здравствуйте,byaka86.
Для простоты понимания и удобства при ответе на вопрос, желательно иметь исходный файл. Если это, конечно, не гостайна. И не обязательно все 20000 строк
файл Вы можете прикрепить к Вашему сообщению в режиме редактирования сообщения - "расширенный".
именно пернести, т.е. с удалением или скопировать?
Вот как вы и просили - прикрепляю файл.
Желательно перенести, чтоб можно было отдельно выделить не попадающие в перкый лист строки.
- Вложения
-
- Копия.zip
- (22.59 КБ) 44 скачивания
ИМХО надстройка PLEX довольно легко справляется с этой задачей.
Спасибо, но это немного не то.
Подскажите мне просто как изъять в буфер содержимое ячейки.
СПАСИБО!
Подскажите мне просто как изъять в буфер содержимое ячейки.
СПАСИБО!
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
byaka86, 
Слово изъять, что Вы под этим понимаете? Если скопировать в буфер обмена с удалением, то это вырезать. И еще, изъять, а дальше?
По поводу Вашего вопроса в начале темы и приложенного файла. Сделать можно, но нужно сразу понимать, что при количестве строк 20 000 - 30 000, цикл будет работать ОЧЕНЬ долго. Здесь, видимо, лучше подошли бы формулы листа. Конкретно по Вашему макросу:
значение данных в ячейке - c = ActiveCell.Value и d = ActiveCell.Value,а дальше можно сравнивать значения и производить необходимые действия.
а можно Вас попросить "расшифровать" это предложениеПодскажите мне просто как изъять в буфер содержимое ячейки.

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

- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Именно применительно к Вашему макросу я и написал (не стал даже буквы менять, чтобы было понятнее).
У Вас есть строка c = Range(Cells(i, 2), Cells(i, 2)).Select и если это заменить на то теперь переменная с будет содержать значение активной ячейки. То же самое и применительно к d. Теперь Вы получили значения ячеек и можете их сравнивать.
Начало Вашего макроса может выглядеть примерно так
У Вас есть строка c = Range(Cells(i, 2), Cells(i, 2)).Select и если это заменить на
Код: Выделить всё
Range(Cells(i, 2), Cells(i, 2)).Activate
c = ActiveCell.Value
Начало Вашего макроса может выглядеть примерно так
Код: Выделить всё
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
'и т.д.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
Спасибо большое!
Получилось кое как! Только вот действительно - ОЧЕНЬ долго обрабатывает.
Может быть можете подсказать какой-нибудь более рациональное решение.
Получилось кое как! Только вот действительно - ОЧЕНЬ долго обрабатывает.
Может быть можете подсказать какой-нибудь более рациональное решение.
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
Я конечно не уверен, не приходилось такое делать, но здесь IMHO, нужно работать с формулами массивов.
А несколько увеличить скорость работы макроса может помочь вот такая конструкция:
ну и, конечно, избавиться, по возможности, от всех Select и Activate.
А несколько увеличить скорость работы макроса может помочь вот такая конструкция:
Код: Выделить всё
With Application
.ScreenUpdating = False
.Calculation = xlManual
‘’’’’’’’’’’’’’’’’’’’’’
‘’’’’’’’’’’’’’’’’’’’’’
.Calculation = xlAutomatic
.ScreenUpdating = True
End With
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".