Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение строк через сравнение элементов массивов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение строк через сравнение элементов массивов (Макросы/Sub)
Сравнение строк через сравнение элементов массивов
acidnoise Дата: Суббота, 22.03.2014, 17:08 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Друзья помогите пожалуйста реализовать логику.
кросс на планету

Пардон, cовсем не знаю синтаксис vba))) напишу как представляю.)))

1.Ячейки строки услуг загнать в массив:
Замена аккумулятор Nokia 3230
= Массив1 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "замена"
b="аккумулятор"
c="nokia"
d ="3230"

2.Загнать ячейки строки запчасть в массив:
доп. аккумулятор Nokia 3230
= Массив2 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "доп."
b="аккумулятор"
c="Nokia"
d ="3230"

3.Ячейки строки запчасть2 загнать ячейки в массив:
не аккумулятор Nokia 3125
= Массив3 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "не"
b="аккумулятор"
c="Nokia"
d ="3125"

4. И так со всеми строками в столбце запчасть.

5.Глобальные переменные

[vba]
Код
i=0
p=0
b=0 'количество элементов массива Массив2
m=0 'количество совпадений
[/vba]

6.Цикл

[vba]
Код
b = количество элементов массива Массив2
if Массив1(i) <> Массив2(p) 'где i и p порядковые номера элементов массивов
        then:
             p=p+1
                    Запустить цикл повторно
Else:
        if i <> количеству элементов массива Массив1   
              then:
                   MассивСопадений(i)=Массив2(p)
                   i=i+1
                   m=m+1
                          if b>=3, m>=3
                     then:    
                    проставляем цену в строке услуги и выводим значения элементов из массива MассивСопадений в ячейки правее. это слова совпадения. и обнуляем глобальные переменные
Код
                         i=0   
                    p=0   
                    m=0   
                    b=0
                          Else:
                     Запустить цикл повторно                 
                          endif   
     Else: Запустить цикл повторно только вместо Массив2 использовать Массив3, и так далее перебирать. Двумерным массивом наверное делается.
        endif
endif
[/vba]
Ещё раз извиняюсь за косноязычность))).

Буду рад, если найдутся люди готовые помочь реализовать такую затею.
К сообщению приложен файл: 6322840.xlsx (12.1 Kb)


Сообщение отредактировал acidnoise - Суббота, 22.03.2014, 17:09
 
Ответить
СообщениеДрузья помогите пожалуйста реализовать логику.
кросс на планету

Пардон, cовсем не знаю синтаксис vba))) напишу как представляю.)))

1.Ячейки строки услуг загнать в массив:
Замена аккумулятор Nokia 3230
= Массив1 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "замена"
b="аккумулятор"
c="nokia"
d ="3230"

2.Загнать ячейки строки запчасть в массив:
доп. аккумулятор Nokia 3230
= Массив2 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "доп."
b="аккумулятор"
c="Nokia"
d ="3230"

3.Ячейки строки запчасть2 загнать ячейки в массив:
не аккумулятор Nokia 3125
= Массив3 {a,b,c,d} количество элементов массива определяется количеством ячеек в строке, каждому элементу присваивается значение ячейки.
где :
а = "не"
b="аккумулятор"
c="Nokia"
d ="3125"

4. И так со всеми строками в столбце запчасть.

5.Глобальные переменные

[vba]
Код
i=0
p=0
b=0 'количество элементов массива Массив2
m=0 'количество совпадений
[/vba]

6.Цикл

[vba]
Код
b = количество элементов массива Массив2
if Массив1(i) <> Массив2(p) 'где i и p порядковые номера элементов массивов
        then:
             p=p+1
                    Запустить цикл повторно
Else:
        if i <> количеству элементов массива Массив1   
              then:
                   MассивСопадений(i)=Массив2(p)
                   i=i+1
                   m=m+1
                          if b>=3, m>=3
                     then:    
                    проставляем цену в строке услуги и выводим значения элементов из массива MассивСопадений в ячейки правее. это слова совпадения. и обнуляем глобальные переменные
Код
                         i=0   
                    p=0   
                    m=0   
                    b=0
                          Else:
                     Запустить цикл повторно                 
                          endif   
     Else: Запустить цикл повторно только вместо Массив2 использовать Массив3, и так далее перебирать. Двумерным массивом наверное делается.
        endif
endif
[/vba]
Ещё раз извиняюсь за косноязычность))).

Буду рад, если найдутся люди готовые помочь реализовать такую затею.

Автор - acidnoise
Дата добавления - 22.03.2014 в 17:08
RAN Дата: Суббота, 22.03.2014, 17:50 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата Максим Халмурзаев, [url=http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=55837&MID=465792#postform[/url
] да и не думаю, что кто-то готов на волне энтузиазма такое реализовать.

Думаете здесь напишем? :)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 22.03.2014, 17:50
 
Ответить
Сообщение
Цитата Максим Халмурзаев, [url=http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=55837&MID=465792#postform[/url
] да и не думаю, что кто-то готов на волне энтузиазма такое реализовать.

Думаете здесь напишем? :)

Автор - RAN
Дата добавления - 22.03.2014 в 17:50
acidnoise Дата: Суббота, 22.03.2014, 17:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Думаете здесь напишем?

это я про "прикрутить левинштейна или fuzzyVlookup", а на логику которую я предложил, всё же надеюсь. Я кстати вам звоню тут в скайп сижу.
 
Ответить
Сообщение
Думаете здесь напишем?

это я про "прикрутить левинштейна или fuzzyVlookup", а на логику которую я предложил, всё же надеюсь. Я кстати вам звоню тут в скайп сижу.

Автор - acidnoise
Дата добавления - 22.03.2014 в 17:55
Формуляр Дата: Воскресенье, 23.03.2014, 01:46 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Выложенный файл посмотреть не смог (дома у меня только Excel 2003), но смотрел предыдущие попытки здесь и на Планете.
Первоначальный заход из этой темы мне показался более перспективным.
Поэтому, для начала, предлагаю вариант решения, построенный на его основе.
Список запчастей на Sheet2 урезал для компактности. Надеюсь, полный список ещё у вас. :)
К сообщению приложен файл: SimText_acidnoi.zip (46.1 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Воскресенье, 23.03.2014, 01:49
 
Ответить
СообщениеВыложенный файл посмотреть не смог (дома у меня только Excel 2003), но смотрел предыдущие попытки здесь и на Планете.
Первоначальный заход из этой темы мне показался более перспективным.
Поэтому, для начала, предлагаю вариант решения, построенный на его основе.
Список запчастей на Sheet2 урезал для компактности. Надеюсь, полный список ещё у вас. :)

Автор - Формуляр
Дата добавления - 23.03.2014 в 01:46
acidnoise Дата: Понедельник, 24.03.2014, 14:12 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Выложенный файл посмотреть не смог (дома у меня только Excel 2003), но смотрел предыдущие попытки здесь и на Планете.
Первоначальный заход из этой темы мне показался более перспективным.
Поэтому, для начала, предлагаю вариант решения, построенный на его основе.
Список запчастей на Sheet2 урезал для компактности. Надеюсь, полный список ещё у вас.


Спасибо. Прикрутил свой исходник, всё работает замечательно. Попытался прикрутить ещё повторый впр по модели к найденым соответствиям, что-то не получлось. Справку порою прикручу.
Ваш метод селективный(применение уже нашлось, часть работы очень облегчил), т.е. 1 услуга для 1й модели, а что бы вы порекомендовали для массового определения стоимостей, что вы думаете о той логике которую я предложил для массового определения?
 
Ответить
Сообщение
Выложенный файл посмотреть не смог (дома у меня только Excel 2003), но смотрел предыдущие попытки здесь и на Планете.
Первоначальный заход из этой темы мне показался более перспективным.
Поэтому, для начала, предлагаю вариант решения, построенный на его основе.
Список запчастей на Sheet2 урезал для компактности. Надеюсь, полный список ещё у вас.


Спасибо. Прикрутил свой исходник, всё работает замечательно. Попытался прикрутить ещё повторый впр по модели к найденым соответствиям, что-то не получлось. Справку порою прикручу.
Ваш метод селективный(применение уже нашлось, часть работы очень облегчил), т.е. 1 услуга для 1й модели, а что бы вы порекомендовали для массового определения стоимостей, что вы думаете о той логике которую я предложил для массового определения?

Автор - acidnoise
Дата добавления - 24.03.2014 в 14:12
Формуляр Дата: Понедельник, 24.03.2014, 17:04 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
а что бы вы порекомендовали для массового определения стоимостей, что вы думаете о той логике которую я предложил для массового определения?

Цитата М.Жванецкий
Что бы я делал в экстренных случаях, в пиковых положениях? Я бы кушал ночью – это раз. Спал бы днем – это два.


Всё, что массовое, оно очень-очень небыстрое - как ни изголяйся.
Задумайтесь крепко, как вы (или другой кто) собираетесь этим пользоваться? Будете визуально анализировать список на 10 000 строк?
Можно ли получить нужный результат без массового определения?

А пока вы думаете на эту тему, я добью макрос индексирования списков на основе нечеткого сравнения строк. :)
Должно работать быстрее и надёжнее предыдущего варианта. К тому же допускает ручную корректировку.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Понедельник, 24.03.2014, 17:05
 
Ответить
Сообщение
а что бы вы порекомендовали для массового определения стоимостей, что вы думаете о той логике которую я предложил для массового определения?

Цитата М.Жванецкий
Что бы я делал в экстренных случаях, в пиковых положениях? Я бы кушал ночью – это раз. Спал бы днем – это два.


Всё, что массовое, оно очень-очень небыстрое - как ни изголяйся.
Задумайтесь крепко, как вы (или другой кто) собираетесь этим пользоваться? Будете визуально анализировать список на 10 000 строк?
Можно ли получить нужный результат без массового определения?

А пока вы думаете на эту тему, я добью макрос индексирования списков на основе нечеткого сравнения строк. :)
Должно работать быстрее и надёжнее предыдущего варианта. К тому же допускает ручную корректировку.

Автор - Формуляр
Дата добавления - 24.03.2014 в 17:04
acidnoise Дата: Понедельник, 24.03.2014, 17:58 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Задумайтесь крепко, как вы (или другой кто) собираетесь этим пользоваться? Будете визуально анализировать список на 10 000 строк?

Дело в том, что всё это дело потом бы переводилось в csv и заливалось бы mysql для всяких дальнейших обработок. Но если никак, то никак. Вы и так очень помогли, спасибо. Селективный поиск будет использоваться в повседневной работе.
 
Ответить
Сообщение
Задумайтесь крепко, как вы (или другой кто) собираетесь этим пользоваться? Будете визуально анализировать список на 10 000 строк?

Дело в том, что всё это дело потом бы переводилось в csv и заливалось бы mysql для всяких дальнейших обработок. Но если никак, то никак. Вы и так очень помогли, спасибо. Селективный поиск будет использоваться в повседневной работе.

Автор - acidnoise
Дата добавления - 24.03.2014 в 17:58
Формуляр Дата: Вторник, 25.03.2014, 11:43 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Ну так в MySQL это будет на порядок проще и быстрей!
Я имею в виду отображение стоимости всех деталей для каждого сочетания услуга-модель.
Нужно только предварительно проиндексировать список запчастей по справочникам моделей и услуг.
Над этим сейчас и работаем...


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Среда, 26.03.2014, 11:34
 
Ответить
СообщениеНу так в MySQL это будет на порядок проще и быстрей!
Я имею в виду отображение стоимости всех деталей для каждого сочетания услуга-модель.
Нужно только предварительно проиндексировать список запчастей по справочникам моделей и услуг.
Над этим сейчас и работаем...

Автор - Формуляр
Дата добавления - 25.03.2014 в 11:43
acidnoise Дата: Среда, 26.03.2014, 09:54 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Замечательно, спасибо вам большое за суету Александр.
[moder]Вам обязательно нужно было цитировать ВЕСЬ предыдущий пост?
 
Ответить
СообщениеЗамечательно, спасибо вам большое за суету Александр.
[moder]Вам обязательно нужно было цитировать ВЕСЬ предыдущий пост?

Автор - acidnoise
Дата добавления - 26.03.2014 в 09:54
acinoise Дата: Четверг, 27.03.2014, 17:16 | Сообщение № 10
Группа: Гости
Друзья, если кто, всё же сможет перевести логику из первого поста в VBA? очень хочется проверить метод, знаний не хватает.
 
Ответить
СообщениеДрузья, если кто, всё же сможет перевести логику из первого поста в VBA? очень хочется проверить метод, знаний не хватает.

Автор - acinoise
Дата добавления - 27.03.2014 в 17:16
Формуляр Дата: Воскресенье, 30.03.2014, 22:07 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Ну вот, в первом приближении, готово, вроде.
Сразу должен предупредить, что алгоритм игнорирует слова из одной буквы. Понимаю, что в данном случае это может быть критично. Работающее решение этой проблемы уже существует в другой версии. Сюда пока не встраивал, чтобы не усложнять отладку. Добавим, когда убедимся, что основной алгоритм работает как надо.
Остальные пояснения внутри файла.
Читайте, пробуйте, проверяйте на реальных объёмах.
К сообщению приложен файл: SimTextIdx_acid.rar (46.4 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеНу вот, в первом приближении, готово, вроде.
Сразу должен предупредить, что алгоритм игнорирует слова из одной буквы. Понимаю, что в данном случае это может быть критично. Работающее решение этой проблемы уже существует в другой версии. Сюда пока не встраивал, чтобы не усложнять отладку. Добавим, когда убедимся, что основной алгоритм работает как надо.
Остальные пояснения внутри файла.
Читайте, пробуйте, проверяйте на реальных объёмах.

Автор - Формуляр
Дата добавления - 30.03.2014 в 22:07
acidnoise Дата: Понедельник, 31.03.2014, 11:11 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо большое уважаемый за проделанную работу. Подскажите пожалуйста, что вы подразумевали под:
2. Фильтруем неиндексированные строки. Корректируем их вручную или дополняем справочники
?
 
Ответить
СообщениеСпасибо большое уважаемый за проделанную работу. Подскажите пожалуйста, что вы подразумевали под:
2. Фильтруем неиндексированные строки. Корректируем их вручную или дополняем справочники
?

Автор - acidnoise
Дата добавления - 31.03.2014 в 11:11
Формуляр Дата: Понедельник, 31.03.2014, 16:09 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Имеются в виду строки, для которых не найдена подходящая модель или тип деталей, соответственно -1 в ст-цах B или E.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеИмеются в виду строки, для которых не найдена подходящая модель или тип деталей, соответственно -1 в ст-цах B или E.

Автор - Формуляр
Дата добавления - 31.03.2014 в 16:09
acidnoise Дата: Четверг, 10.04.2014, 12:45 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
так и пользуюсь селективным поиском, который вы предложили в первом вложении. С индексацией так и не разобрался
 
Ответить
Сообщениетак и пользуюсь селективным поиском, который вы предложили в первом вложении. С индексацией так и не разобрался

Автор - acidnoise
Дата добавления - 10.04.2014 в 12:45
Формуляр Дата: Четверг, 10.04.2014, 13:27 | Сообщение № 15
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
acidnoise,
можете выложить свои справочники моделей и услуг, попробую настроить индексацию сам.


Excel 2003 EN, 2013 EN
 
Ответить
Сообщениеacidnoise,
можете выложить свои справочники моделей и услуг, попробую настроить индексацию сам.

Автор - Формуляр
Дата добавления - 10.04.2014 в 13:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение строк через сравнение элементов массивов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!