Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.07.2012, 12:43   #1
Gobaith
 
Регистрация: 05.07.2012
Сообщений: 5
По умолчанию Создание списка уникальных значений по условиям

Добрый день!

Очень нужно написать формулу, которая бы генерировала список уникальных значений с соблюдением следующих условий:

- пропускать пустые ячейки
- пропускать ячейки, начинающиеся с дефиса
- сравнивать только первые 5 знаков в каждой ячейке.

Пока удалось только написать формулу, игнорирующую пустые ячейки:

{=INDEX(kor!$C$2:$C$999, MATCH(0, IF(ISBLANK(kor!$C$2:$C$999), 1, COUNTIF(kor!$Q$1:Q1, kor!$C$2:$C$999)), 0))}

Дальше что-то завяз. Как сюда вклинить LEFT(kor!C$2:C$999,1)="–", и что нужно дописать, чтобы сравнивались только первые 5 знаков представляю довольно смутно.

Буду очень благодарен за помощь.

Последний раз редактировалось Gobaith; 05.07.2012 в 18:37.
Gobaith вне форума Ответить с цитированием
Старый 05.07.2012, 13:06   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

А расширенный фильтр использовать не пробовали?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 05.07.2012, 13:07   #3
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Цитата:
Сообщение от Gobaith Посмотреть сообщение
Добрый день!
- сравнивать только первые 5 знаков в каждой ячейке.
Список:
aaaaa11
aaaaa22
b
b

-c
d
11

Что получаем на выходе?
aaaaa11
aaaaa22
b
d
11
ZORRO2005 вне форума Ответить с цитированием
Старый 05.07.2012, 16:25   #4
Gobaith
 
Регистрация: 05.07.2012
Сообщений: 5
По умолчанию

@DiemonStar,

Нет, к сожалению, фильтр не вариант. Нужна формула.

@ZORRO2005,

Цитата:
Сообщение от ZORRO2005 Посмотреть сообщение

Что получаем на выходе?
aaaaa11
aaaaa22
b
d
11
Нет, нужны уникальные значения в границах первых пяти знаков. На выходе получаем:

aaaaa
b
d
11

Пока я додумался только до обходного маневра: последовательной обработки результатов трех формул с двумя служебными столбцами.
Но анализируемый столбец огромный - более 20000 позиций, поэтому все это сооружение серьезно грузит систему.

Уверен, все это можно сделать намного эффективнее. Вот только пока не знаю как...

Последний раз редактировалось Gobaith; 05.07.2012 в 16:28.
Gobaith вне форума Ответить с цитированием
Старый 05.07.2012, 17:01   #5
ZORRO2005
Форумчанин
 
Аватар для ZORRO2005
 
Регистрация: 26.11.2006
Сообщений: 584
По умолчанию

Цитата:
Сообщение от Gobaith Посмотреть сообщение
Пока я додумался только до обходного маневра: последовательной обработки результатов трех формул с двумя служебными столбцами.
Уверен, все это можно сделать намного эффективнее. Вот только пока не знаю как...
Попробуйте вариант во вложении.
Тоже с 2-мя доп. столбцами.
Вложения
Тип файла: rar уник.rar (3.9 Кб, 41 просмотров)
ZORRO2005 вне форума Ответить с цитированием
Старый 05.07.2012, 19:00   #6
Gobaith
 
Регистрация: 05.07.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от ZORRO2005 Посмотреть сообщение
Попробуйте вариант во вложении.
Тоже с 2-мя доп. столбцами.
Большое спасибо за вариант. По сравнению с моим, Ваш гораздо лаконичнее и эффективнее.

Вот только лишние столбцы добавляют головной боли: файл и так очень немаленький, а тут - дополнительные 40 тыс. значений.

Думаю, всё-таки все эти трансформации можно как-то сделать одной формулой без промежуточного мусора...

Ну а пока меня не осенило, благодаря Вам хотя бы стало возможно работать с документом. Спасибо ещё раз...
Gobaith вне форума Ответить с цитированием
Старый 05.07.2012, 20:41   #7
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Gobaith Посмотреть сообщение
Думаю, всё-таки все эти трансформации можно как-то сделать одной формулой без промежуточного мусора...
Одной формулой сделать не проблема:
Код:
=ИНДЕКС(B$2:B$14;НАИМЕНЬШИЙ(ЕСЛИ((B$2:B$14="")+(ПСТР(B$2:B$14;1;1)="-")=0;ЕСЛИ(ПОИСКПОЗ(ПСТР(B$2:B$14;1;5);ПСТР(B$2:B$14;1;5);)=СТРОКА($1:$13);СТРОКА($1:$13)));СТРОКА(A1)))
Только вот на 40 000 строк думаю тормозить будет безбожно...
Вложения
Тип файла: rar Gobaith.rar (4.6 Кб, 27 просмотров)
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 05.07.2012, 21:43   #8
Gobaith
 
Регистрация: 05.07.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Одной формулой сделать не проблема...
Только вот на 40 000 строк думаю тормозить будет безбожно...
Действительно, тормозит так мощно, что даже при 8Гб памяти можно не торопясь сходить выпить чаю, пока машинка шуршит.

Даже мои еретические эксперименты с двумя дополнительными столбцами не вешали машину так основательно.

Но всё-равно, огромное Вам спасибо. Такая формула всегда пригодится для файлов меньшего объема. Да и как образец эффективного программирования - вещь незаменимая...
Gobaith вне форума Ответить с цитированием
Старый 05.07.2012, 22:00   #9
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от Gobaith Посмотреть сообщение
...тормозит так мощно, что даже при 8Гб памяти можно не торопясь сходить выпить чаю, пока машинка шуршит.
Я об этом и писал
На 2Гб RAM ноуте Asus (Win 7, Exc 2010) 10 000 строк обрабатывал 2:40

Цитата:
Сообщение от Gobaith Посмотреть сообщение
Такая формула всегда пригодится для файлов меньшего объема.
Тут согласен. Если строк полтыщи - работает быстро

ЗЫ Возьмите решение ZORRO2005, доп столбцы вынесите на отдельный лист, если надо - скройте или очень скройте их. Решение Серёги оптимально по скорости, а уж ограничения по пересчёту - это естественные ограничения Экса, их обойти не получится...
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 05.07.2012, 22:39   #10
Gobaith
 
Регистрация: 05.07.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Возьмите решение ZORRO2005, доп столбцы вынесите на отдельный лист, если надо - скройте или очень скройте их. Решение Серёги оптимально по скорости, а уж ограничения по пересчёту - это естественные ограничения Экса, их обойти не получится...
Думаю, так и придётся сделать, а то эти апдейты значений в реальном времени так и будут держать машину в вечном клинче.

А вообще, временами становится муторно смотреть на то, как Офисный пакет жуёт данные: полтора-два часа на сортировку в Эксе, столько же на полнотекстовую замену в Ворде, когда обыкновенный копеешный текстовичок делает всё на лету за несколько минут.

Одно время думал перейти на OpenOffice, но там, по отзывам, скорости ещё ниже для документов со сложным форматированием...
Gobaith вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание динамического списка из уникальных значений mihonf Microsoft Office Excel 4 04.04.2011 20:11
выбор уникальных значений олег69 Microsoft Office Excel 7 10.03.2011 14:15
Создание пакетного файла с использованием списка значений в качестве параметров. chaosfall Операционные системы общие вопросы 1 05.12.2010 21:01
Список уникальных значений PARTOS Microsoft Office Excel 13 18.12.2009 11:14
отбор уникальных значений по определенным условиям Alex___ Microsoft Office Excel 39 12.10.2009 17:02