Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > как сравнить ячейки в excel


Автор: z2000 18.3.2009, 13:48
Всем привет. Есть два столбца в excel (Например A1:A1000 и B1:B1000) нужно сравнить столбец B со столбцом A. То есть В1 сравнивается с А1, затем с А2 итд. Затем B2 сравнивается с А1, А2 итд. В случае если совпаления есть между столбцами ячейки, в столбце С писалась бы какая-нибудь информация...

В идеале сравнение бы сравнение шло не в полном объеме а частично. 
Такая программа нужна для сравнения прайсов
например в одном прайсе

"часы наручные изумруд", во втором прайсе "часы Изумруд"

Ну или просто чтобы строки сравнивались, между собой. Хотя бы часть находить программа будет!!!

Есть функция СОВПАД, но она умеет сравнивать только одну ячейку со второй ячейкой, а как массивами сравнивать????? smile 

Автор: FINANSIST 18.3.2009, 14:44
Меня всегда интересовал вопрос - почему  в банальных примитивнейших задачах пользователям хочется видеть именно VBA - решение?
Воткнуть в столбец "С1" элементарную формулу "=А1=В1", автозаполнением растянуть  и отобрать по значению "ЛОЖЬ" автофильтром воспитание запрещает?
Цитата(z2000 @  18.3.2009,  13:48 Найти цитируемый пост)
Есть функция СОВПАД, но она умеет сравнивать только одну ячейку со второй ячейкой, а как массивами сравнивать?????  

Ну или, если лень целый дополнительный столбец "С" формировать, воткнуть в одну единственную ячейку =и(А1:А65000=В1:В65000) не забыв вместо Enter нажать Ctrl+Shift+Enter

Автор: z2000 18.3.2009, 15:00
а как сделать если не полное совпадение? Как в примере с часами? 
А как растянуть автозаполнением?
Здесь ситуация такая, что A2 совсем не обязательно будет равна B2, но она может быть равна B500...
Да и потом ограничение же есть в экселе, максимум 255 
Сейчас я выкручиваюсь, так:
пишу =ИЛИ(СОВПАД(A849;$B$1:$B$252))
затем в следующем столбце: 
=ИЛИ(СОВПАД(A843;$B$253:$B$501))
затем в следующем столбце: 
=ИЛИ(СОВПАД(A843;$B$253:$B$701))
(У меня всего 700 позиций!!!

А как можно упростить????

Автор: Akina 18.3.2009, 15:20
Цитата(z2000 @  18.3.2009,  16:00 Найти цитируемый пост)
A2 совсем не обязательно будет равна B2, но она может быть равна B500

Смотрим в сторону 
Код

С1=ЕНД(ВПР(B1;A1:B1000;2;ЛОЖЬ))


Цитата(z2000 @  18.3.2009,  16:00 Найти цитируемый пост)
а как сделать если не полное совпадение? Как в примере с часами? 

Вручную. 

Автор: Staruha 18.3.2009, 16:07
Цитата

а как массивами сравнивать?????   


  на VBA ф-я Split

Автор: FINANSIST 18.3.2009, 19:05
Цитата(Staruha @  18.3.2009,  16:07 Найти цитируемый пост)
Цитатаа как массивами сравнивать?????     
на VBA ф-я Split


Цитата

Visual Basic Language Reference  
Split Function (Visual Basic)  
Returns a zero-based, one-dimensional array containing a specified number of substrings.


Staruha, а для чего данная функция нужна автору топика?

Автор: z2000 19.3.2009, 03:54
Вручную особо не сделаешь. Нужно что-то типа функции, которая бы искала ячейки с определенной долей совадения, и выдавала бы их. Такое возможно реализовать?

Автор: Staruha 20.3.2009, 10:37
Цитата

Staruha, а для чего данная функция нужна автору топика? 

Так спросил же как сравнивать массивы.А Split разделит ячейку на массивы

Код

MArray = Range("A" & r).Value
MyMasiv = Split(MArray)
дальше идем по строкам + два цикла
if 
MyMasiv(i)=MyMasiv2(ii)

 что-то вроде этого.Но здесь проблема в том что есть одинаковые элементы массива в разных изделиях Например часы Изумруд и часы Слава и там и там есть элемент массива часы. Поэтому надо изначально присваивать каждому изделию код,а назвать можно как угодно
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)