Страница: 1 |
Страница: 1 |
Вопрос: (Excel) Сравнение двух колонок
Добавлено: 14.01.07 00:55
Автор вопроса: max
Как выделить все значения колонки B зеленым цветом, значения которые есть в колонке А. Т.е. как определить, какие из значений в колонке B присутствуют в колонке А
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #1
Добавлено: 14.01.07 01:03
Юзай функции ЯЧЕЙКА, ПОИСКПОЗ, ДВССЫЛ и АДРЕС. Кроме того на office.microsoft.com есть конкретный пример на подобную задачу.
Номер ответа: 2
Автор ответа:
max
Вопросов: 2
Ответов: 5
Профиль | | #2
Добавлено: 14.01.07 01:03
а с помощью VBA можно сделать?
Номер ответа: 3
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #3
Добавлено: 14.01.07 01:05
С помощью ВБА можно сделать, но работать будет быстрее в виде функции
Номер ответа: 4
Автор ответа:
max
Вопросов: 2
Ответов: 5
Профиль | | #4
Добавлено: 14.01.07 01:08
Блин как я их только не пробовал, вообще не выходит! очень странно..
Номер ответа: 5
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #5
Добавлено: 14.01.07 01:12
http://office.microsoft.com/ru-ru/excel/HP100704621049.aspx?pid=CH100799991049
И многое другое там же. Походи по релевантным ссылкам.
Номер ответа: 6
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #6
Добавлено: 14.01.07 01:12
Сперва добейся нормального поиска данных, потом займешься раскраской.
Номер ответа: 7
Автор ответа:
max
Вопросов: 2
Ответов: 5
Профиль | | #7
Добавлено: 14.01.07 01:16
Мне кажется проще на Vba написать что-то вроде
Dim v_Sh As Worksheet
Dim v_Cell As Range
Dim v_Var As Double
Set v_Sh = ActiveSheet
Set v_Rng = Intersect(v_Sh.Columns(3), v_Sh.UsedRange)
On Error Resume Next
For Each v_Cell In v_Rng.Cells
If v_Cell <> Empty Then
v_Var = WorksheetFunction.Match(v_Cell, v_Sh.Columns(1), 0)
If Err.Number <> 0 Then
Err.Clear
Else
v_Cell.Interior.ColorIndex = 4
End If
End If
Next v_Cell
Нажать на кнопку и все, а не мучаться с функциями и автозаполнением..ну как?
Номер ответа: 8
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #8
Добавлено: 14.01.07 01:17
Если данных немного, то можешь обойтись и перебором в цикле/ах.. а если их несколько десятков тысяч, то будут тормоза неземные.
Номер ответа: 9
Автор ответа:
max
Вопросов: 2
Ответов: 5
Профиль | | #9
Добавлено: 14.01.07 01:23
Ну а с функциями...блин..не разбериха..пока
Номер ответа: 10
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #10
Добавлено: 14.01.07 09:39
Если только выделить нужно, но лучше пользоваться условным форматированием.
Меню-Формат-Условное форматирование...
Формулу в настройках условноо форматирования можно поставить типа
=ЕНД(ПОИСКПОЗ(B1;A:A;ЛОЖЬ()))
(это если в момент настройки курсор стоит в ячейке B1 и выделен весь столбец B (или нужная его часть))
Номер ответа: 11
Автор ответа:
APS
ICQ: 234458121
Вопросов: 38
Ответов: 107
Профиль | | #11
Добавлено: 16.01.07 13:50
Вот и у меня есть вопрос по этой теме.
Есть 4 колонки. Нужно, пролистав все значения из колонки 1, найти совпадающие значения в колонке 3, затем сравнить значение колонок 2 и 4 той же строки и в случае их несовпадения записать значение колонки 4 в колонку 2.
Я пользуюсь методом Find, но из-за цикла перебора всех значений в колонке 1 из оператора if для колонок 2 и 4 (я так думаю) работает ну очень долго. Значений по максимуму, все уникальные.
Может, кто-то подскажет более оптимальное решение данной задачи.
Номер ответа: 12
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #12
Добавлено: 16.01.07 15:35
Я не уверен, но какой-то существенной оптимизации может и не получиться. Можно попробовать воспользоваться вместо метода Find функцией Match... а перебор ячеек делать не по 1-ой, а по 3-ей колонке (производя поиск в 1-ой)... Результат будет тот же (если я верно понял задачу), но в этом случае не нужно будет организовывать продолжение поиска в колонке после обнаружения первого совпадения... как мне кажется:
On Error Resume Next
For Each cc In ActiveSheet.UsedRange.Columns(3).Cells
z = WorksheetFunction.Match(cc.Value, ActiveSheet.UsedRange.Columns(1), 0)
If Err.Number = 0 Then
If cc.Offset(0, 1).Value <> Cells(z, 2).Value Then cc.Offset(0, 1) = Cells(z, 2)
Else
Err.Clear
End If
Next
При тестировании 2000 строк - время работы 1 секунда, а 65536 строк - около 6 мин.