Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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_Rng As Range
  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-сайт: www.genyaa.nm.ru
 Профиль | | #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-сайт: www.genyaa.nm.ru
 Профиль | | #12
Добавлено: 16.01.07 15:35
Я не уверен, но какой-то существенной оптимизации может и не получиться. Можно попробовать воспользоваться вместо метода Find функцией Match... а перебор ячеек делать не по 1-ой, а по 3-ей колонке (производя поиск в 1-ой)... Результат будет тот же (если я верно понял задачу), но в этом случае не нужно будет организовывать продолжение поиска в колонке после обнаружения первого совпадения... как мне кажется:

    Dim z As Long, cc As Range
    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 мин.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам