Gorr98 Пользователь Сообщений: 17 |
Подскажите пожалуйста, как организовать поиск на несовпадение? Прикрепленные файлы
|
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#2 29.06.2016 18:50:38
Не находится, так как на втором листе нет значений, которые бы отсутствовали на первом. Прикрепленные файлы
|
||
JeyCi Пользователь Сообщений: 3357 |
#3 29.06.2016 19:56:42 а что делать с дублями в 1-й таблице?
файл в папку C:1 Прикрепленные файлы
Изменено: JeyCi — 29.06.2016 20:20:29 чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок — обратитесь к собеседнику на ВЫ — ответ на ваш вопрос получите — а остальное вас не касается (п.п.п. на форумах) |
||
Мотя Пользователь Сообщений: 3218 |
#4 29.06.2016 20:43:07
1 таблица должна дополниться только новыми данными из 2 таблицы, т.е. 1 таблица может иметь кучу строк, представленных одним данным. Gorr98 ! Юрий М . Прикрепленные файлы
|
||
Gorr98 Пользователь Сообщений: 17 |
Огого! Никогда бы не подумал, что это может быть так просто, да еще и в такое маленькое количество строк! Спасибо большое, благодаря таким, как вы, чайники вроде меня черпают опыт чашками, а не ложками) Насчет кода — да, согласен, очень чудной, может потому, что основу подсмотрел, а потом попытался сам его изменить. |
Hugo Пользователь Сообщений: 23249 |
#6 30.06.2016 08:32:14
так показали бы тут код где ещё меньше строк — тот с кибера от fever brain
Только тут у него идёт сравнение обратное заказанному, но не суть.
Если данных много — добавкой rn=rn.value можно анализ перевести в массивы (только тип rn убрать). Изменено: Hugo — 30.06.2016 08:33:02 |
|||||||||
Gorr98 Пользователь Сообщений: 17 |
#7 30.06.2016 16:59:30
Юрий М, расскажите, пожалуйста, что означают приставки xl? Так и не смог разобраться. Знаю, что xlUp — это верхняя граница. Кстати, почему мы используем верхнюю границу, а не нижнюю? С нижней попробовал — не работает. Но ведь мы используем последнее значение снизу — почему тогда xlUp? Set Rng = Columns(1).Find(what:=.Cells(i, 1), LookIn:=xlFormulas, lookAt:=xlWhole) — а в этой строке такая логика, что задаем Rng первую колонку и ищем ее в первой колонке добавленного листа, верно? Если да, то what тут означает «ищем совпадение»? А что значат LookIn и lookAt? Надеюсь, что не сильно завалил вопросами |
||
Hugo Пользователь Сообщений: 23249 |
По второму вопросу — задаём не первую колонку, а задаём найти. И ищем в первой колонке что, в чём и как. А xlUp — это вверх. Вверх от в данном случае последней ячейки столбца, пока не наткнёмся на значение. Юра, я пришёл — а тебя нет… Изменено: Hugo — 30.06.2016 17:20:23 |
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#9 30.06.2016 17:13:02 Всякие xl — это своего рода константы-сокращения: xlFormulas, xlWhole, xlNone, XlYesNo и т.д. Т.е. «готовые к употреблению» параметры )
what — какое значение ищем. |
||
Gorr98 Пользователь Сообщений: 17 |
О! с what, lookIn и lookAt понятно стало, а вот xlUp не совсем — выходит, да, бывают пустые ячейки, на которые xlDown наткнется и подумает, что это конец данных. Но xlUP ведь тоже должен тогда споткнуться об эту же пустую ячейку? И еще, если возможно, посоветуйте, пожалуйста, какую-нибудь литературу по vba |
Hugo Пользователь Сообщений: 23249 |
xlUP идёт снизу вверх, по пустым, он наткнётся на первую заполненную. Снизу! список этих сокращений — в редакторе жмёте F2, там всё. Изменено: Hugo — 30.06.2016 18:01:31 |
С.М. Пользователь Сообщений: 936 |
#12 30.06.2016 21:36:14 Вариант с xlDown:
Прикрепленные файлы
|
||
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
1 |
|
Сравнение двух диапазонов ячеек на совпадение29.05.2012, 00:04. Показов 23504. Ответов 20
Здравствуйте! Подскажите пожалуйста…
0 |
Заблокирован |
||||
29.05.2012, 06:59 |
2 |
|||
1 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
31.05.2012, 13:37 [ТС] |
3 |
Спасибо, а как сделать чтобы этот же код продолжал работать в след.ячейках например не А1:А3 и С1:С3, а изменил диапазон со сдвигом вправо, т.е. В1:В3 и D1: D3 стало, чтобы не писать его для всех ячеек, а просто со сдвигом вправо? Спасибо
0 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
01.06.2012, 09:20 |
4 |
И сколько таких сдвигов планируется?
0 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
01.06.2012, 13:00 [ТС] |
5 |
Примерно 30 сдвигов
0 |
Dragokas 17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
||||
01.06.2012, 16:15 |
6 |
|||
Решение 1. Прокрутка через смещения
4 |
ikki призрак 3261 / 889 / 119 Регистрация: 11.05.2012 Сообщений: 1,702 Записей в блоге: 2 |
||||||||
01.06.2012, 16:38 |
7 |
|||||||
а так не проще?
0 |
Dragokas |
01.06.2012, 17:23
|
Не по теме: Да, я забыл как это делается. Спасибо.
0 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
01.06.2012, 22:54 [ТС] |
9 |
Спасибо!
Len(a) <> 0 а что значит эта строка?
0 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
02.06.2012, 05:16 |
10 |
Без нее, если попадутся 2 пустые ячейки, начнет писать о совпадении. У меня они были почти все пустые, поэтому я это дело отключил.
1 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
02.06.2012, 08:45 [ТС] |
11 |
Спасибо! Как раз то, что нужно.
0 |
irealife 2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
||||
03.07.2012, 23:15 [ТС] |
12 |
|||
Подскажите пожалуйста, а как написать так, чтобы к letters8 прибавлялось 1 при одном совпадении и прибавлялась 2 при больше двух совпадениях.
0 |
Dragokas 17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
||||
04.07.2012, 02:51 |
13 |
|||
Если правильно Вас понял, общее кол-во совпадений считаем, как сумму любых совпадений значений в 3 х 3 ячеек в текущем смещении. При этом, если совпадений ровно 2, то ничего не прибавляем.
1 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
07.07.2012, 13:52 [ТС] |
14 |
При выполнении данного кода, у меня при 1 совпадении все правильно происходит, а при больше двух к letters8 прибавляется 5 вместо 2.
0 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
07.07.2012, 14:09 |
15 |
Так здесь добавляется сразу же, как только найдет совпадения в одном смещении. Тогда строку № 15 переместите между 8 и 9 (а № 3 удалить).
1 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
07.07.2012, 15:31 [ТС] |
16 |
У меня снова не выходит, теперь получается так, что при любом количестве совпадений прибавляется к letters8 значение 2, а должно, чтобы при отсутствии совпадений — не прибавляться ничего, при одном совпадении — прибавляться единица. И проблема по-моему в переменной k. Я в ячейки добавляю все разные значения, а k он мне выводит равное трем, поэтому и прибавляется все время 2 к letters8.
0 |
17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
07.07.2012, 22:30 |
17 |
Можете выложить файл с некоторыми фрагментами цифер для теста.
1 |
2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
|
08.07.2012, 01:15 [ТС] |
18 |
А вы можете почту написать свою? я на почту скину файл? Добавлено через 2 часа 23 минуты Добавлено через 13 минут
0 |
Dragokas 17991 / 7617 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
||||
08.07.2012, 02:03 |
19 |
|||
Да? А я — нет. Можете просветить, чтобы в следующий раз тоже знать как правильно объяснять?
Из леттерсов тоже сделал массив, так как не знал они теперь отдельно подсчитываются или складываются из всех строк. Если что поубираете массивы (скобки).
1 |
irealife 2 / 2 / 0 Регистрация: 10.05.2012 Сообщений: 45 |
||||
08.07.2012, 10:30 [ТС] |
20 |
|||
Вы в самом начале правильно мне все написали, ошибка у меня была в диапазоне: было от 0 до 150, а нужно было от 0 до 75, и в кейсах у меня он не понимал что такое Case 1, поэтому я ему указала конкретно на равенство через Case Is. И все, спасибо вам)
0 |
Содержание
- Vba excel как сравнить диапазоны
- Vba excel как сравнить диапазоны
- Vba excel как сравнить диапазоны
- Сравнение таблиц в Excel с помощью макросов VBA
Vba excel как сравнить диапазоны
Подскажите, пожалуйста, если у кого желание будет. Иногда что-то кропаю (правда долго), а иногда голова не варит, особенно когда понимаешь, что формулами не вариант, а посчитать отличия хочется.
[/vba] и до последней залитой любым цветом строки (заливка непрерывная) — данные, основанные на вышеуказанном диапазоне с внесенными правками
3. Есть непрерывный столбец D (с D6 и по конец последних данных) — на основании него заливается цветом вся таблица. То есть можно ориентироваться на один столбец D, определяя нижнюю границу двух диапазонов, либо на условие — что два диапазона, старый и новый — имеют непрерывную заливку по последнюю строку.
4. Если в диапазоне пункта 2 имеет отличие от соответствующей ячейки диапазона пункта 1 — то выделить ее каким-нибудь цветом.
В целом все так в оригинальной табличке, только данные другие и она большая. Я потом по вот этим отличиям фильтрую по цвету, наглядно видно.
Подскажите, пожалуйста, если у кого желание будет. Иногда что-то кропаю (правда долго), а иногда голова не варит, особенно когда понимаешь, что формулами не вариант, а посчитать отличия хочется.
[/vba] и до последней залитой любым цветом строки (заливка непрерывная) — данные, основанные на вышеуказанном диапазоне с внесенными правками
3. Есть непрерывный столбец D (с D6 и по конец последних данных) — на основании него заливается цветом вся таблица. То есть можно ориентироваться на один столбец D, определяя нижнюю границу двух диапазонов, либо на условие — что два диапазона, старый и новый — имеют непрерывную заливку по последнюю строку.
4. Если в диапазоне пункта 2 имеет отличие от соответствующей ячейки диапазона пункта 1 — то выделить ее каким-нибудь цветом.
В целом все так в оригинальной табличке, только данные другие и она большая. Я потом по вот этим отличиям фильтрую по цвету, наглядно видно. w00t
Сообщение Подскажите, пожалуйста, если у кого желание будет. Иногда что-то кропаю (правда долго), а иногда голова не варит, особенно когда понимаешь, что формулами не вариант, а посчитать отличия хочется.
[/vba] и до последней залитой любым цветом строки (заливка непрерывная) — данные, основанные на вышеуказанном диапазоне с внесенными правками
3. Есть непрерывный столбец D (с D6 и по конец последних данных) — на основании него заливается цветом вся таблица. То есть можно ориентироваться на один столбец D, определяя нижнюю границу двух диапазонов, либо на условие — что два диапазона, старый и новый — имеют непрерывную заливку по последнюю строку.
4. Если в диапазоне пункта 2 имеет отличие от соответствующей ячейки диапазона пункта 1 — то выделить ее каким-нибудь цветом.
В целом все так в оригинальной табличке, только данные другие и она большая. Я потом по вот этим отличиям фильтрую по цвету, наглядно видно. Автор — w00t
Дата добавления — 07.06.2016 в 20:42
_Boroda_ | Дата: Вторник, 07.06.2016, 20:51 | Сообщение № 2 | |||||||
Ответить |
||||||||
staniiislav, в общем нормально, но если делать так — то массив с() лишний. Можно ведь сразу If .Exists(u) Then Sheets(«Заказы»).Range(Sheets(«Зака зы»).Cells(i, 1), Sheets(«Заказы»).Cells(i, 11)).Interior.ColorIndex = 37 Доп. массив я думал использовать так — заполнили как у Вас (только зачем Else c(i, 1) = Empty?), затем выгрузили в свободный столбец, далее с помощью specialcells сразу весь нужный диапазон одним махом покрасили, затем метки удалили (тоже одним движением). ну да))) тогда вообще так получается (как вы подправили): |
||||||||
В том то и дело — если красить нужно много, то именно на этом и будет основная потеря времени.
Поэтому всю эту операцию нужно постараться сделать за один приём.
Ну а если прогноз, что красить будем примерно 10 строк — то Ваш код уже нет смысла улучшать, разница в скорости будет не заметна.
Переменная u в общем тоже лишняя — т.к. используется всего 1 раз. Если использовать чаще (как я обычно использовал t) — тогда смысл есть, чтоб много раз не лезть в массив и не конкатенировать
Источник
Vba excel как сравнить диапазоны
Есть два файла — book1 и book2. Написал простенький макрос чтобы сравнивало уникальные значения в столбцах B (обоих книг) и при нахождении совпадения подставляло значения из 3-го столбца book2 в третий столбец book1. Книжки в одной папке. Макрос в модуле первой книги
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub compare()
Dim compareRange As Variant, compareRange1 As Variant, x As Variant, y As Variant
Set compareRange = Sheets(«sheet1»).Range(«B2:B6»)
Set compareRange1 = Workbooks(«book2.xls»).Sheets(«sheet1»).Range(«B2:B6»)
For Each x In compareRange
For Each y In compareRange1
If x = y Then x.Offset(0, 1) = y.Offset(0, 1)
Забыл добавить — ничего не происходит при выполнении макроса.
Есть два файла — book1 и book2. Написал простенький макрос чтобы сравнивало уникальные значения в столбцах B (обоих книг) и при нахождении совпадения подставляло значения из 3-го столбца book2 в третий столбец book1. Книжки в одной папке. Макрос в модуле первой книги
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub compare()
Dim compareRange As Variant, compareRange1 As Variant, x As Variant, y As Variant
Set compareRange = Sheets(«sheet1»).Range(«B2:B6»)
Set compareRange1 = Workbooks(«book2.xls»).Sheets(«sheet1»).Range(«B2:B6»)
For Each x In compareRange
For Each y In compareRange1
If x = y Then x.Offset(0, 1) = y.Offset(0, 1)
Забыл добавить — ничего не происходит при выполнении макроса. Treider01
Сообщение Добрый день.
Есть два файла — book1 и book2. Написал простенький макрос чтобы сравнивало уникальные значения в столбцах B (обоих книг) и при нахождении совпадения подставляло значения из 3-го столбца book2 в третий столбец book1. Книжки в одной папке. Макрос в модуле первой книги
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub compare()
Dim compareRange As Variant, compareRange1 As Variant, x As Variant, y As Variant
Set compareRange = Sheets(«sheet1»).Range(«B2:B6»)
Set compareRange1 = Workbooks(«book2.xls»).Sheets(«sheet1»).Range(«B2:B6»)
For Each x In compareRange
For Each y In compareRange1
If x = y Then x.Offset(0, 1) = y.Offset(0, 1)
Забыл добавить — ничего не происходит при выполнении макроса. Автор — Treider01
Дата добавления — 01.12.2014 в 15:28
Источник
Сравнение таблиц в Excel с помощью макросов VBA
Оставлен Adm вс, 09/11/2014 — 21:30
Статья даёт ответы на следующие вопросы:
- Как сравнить две таблицы в Excel с помощью макросов VBA?
- Как обращаться к ячейкам таблицы Excel с помощью VBA?
- Как осуществлять перебор ячеек таблицы в цикле с помощью VBA?
В предыдущей статье Сравнение таблиц в Excel мы рассмотрели подход к сравнению сложных таблиц с использованием формул и без программирования.
В данной статье рассмотрим способ сравнения таблиц Excel с помощью VBA макросов на примере тех же исходных данных.
Проиллюстрируем задачу картинкой из первой статьи.
Для начала напишем алгоритм наших действий по сравнению таблиц.
- Определим диапазоны данных первой и второй таблицы, то есть найдем последние значимые строки и сохраним их номера в переменных (последняя строка таблицы 1 — last_i и последняя строка таблицы 2 — last_j).
- Начнем проходить по каждой строке таблицы 2 (внешний цикл), данные из которой нужно перенести в таблицу 1. С первой строки данных (в примере это строка 3) до последней строки таблицы 2.
- Для каждой строки таблицы 2 определим идентификатор строки, путем формирования строки, содержащей полный адрес квартиры (значения из нескольких колонок, разделенные дефисами).
- Начнем проходить по каждой строке таблицы 1 (внутренний цикл) с первой строки данных (в примере это строка 3) до последней строки таблицы 1, определяя при этом идентификатор строки.
- Сравним значения идентификаторов строк таблицы 1 и таблицы 2.
- Если идентификаторы равны, перепишем ФИО покупателя из ячейки таблицы 2 в соответствующую ячейку таблицы 1; прервем внутренний цикл по таблице 1 и перейдем к следующей строке таблицы 2 (переход к п.2).
Теперь остается реализовать алгоритм в виде программного кода макроса.
Для этого откроем вкладку Вид ленты функций Excel. Щелкнем на нижнюю часть со стрелкой кнопки Макросы. В открывшемся подменю выберем Запись макроса. В результате начнется запись нового макроса. Поскольку код мы будем формировать вручную, то еще раз зайдем в подменю макросов и выберем Остановить запись. Далее еще раз войдем в подменю макросов и выберем Макросы.
В появившемся диалоге выделим наш макрос и нажмем Изменить.
На экране откроется окно редактора макросов Visual Basic for Applications. В области кода (правая верхняя область) отображается код только что созданного пустого макроса.
В процедуру Макрос1 (между объявлениями начала и конца процедуры: Sub и End Sub) необходимо вставить код, решающий поставленную задачу. Образец кода представлен ниже.
Результат решения задачи:
Источник
Сравнение двух диапазонов с подсветкой отличий |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |