Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Как обработать элементы массива по условию формулой
 
Цитата
БМВ написал:
=SUBSTITUTE({"обработать";"пропустить";"обработать";"пропустить"};"обработать";"обработать-обработан")
Еще раз благодарю! Неожиданно- не знал, что подставить воспринимает массивы. И ведь в справке об этом ни слова подставить

Отступление:
Для понимания результата вычисления части формулы используем ф9, а есть некая горячая клавиша чтобы вернуться на шаг обратно?
Как обработать элементы массива по условию формулой
 
На входе текстовый массив. Пример {"обработать":"пропустить":"обработать":"пропустить"} (значение и количество задано условно)
Необходимо обработать массив по условию. Условие равенство элемента массива заданной строковой константе "обработать".
Действие "добавить к элементу массива  строку "-обработан"
На выходе требуется получить массив {"обработать-обработан":"пропустить":"обработать-обработан":"пропустить"}
Хотелось бы видеть подходы к решению подобных задач.
Благодарю
Как преобразовать текст в массив по разделителю?, Нужна формула для преобразования текста ячейки в массив для последующего использования в формулах
 
Понятно что конкретика зависит от условий. Мне нужно понять общие принципы чтобы составить самому итоговую формулу.
В частности про обработку массива. понятно что все элементы текст. Обработка элементов по условию вот это не совсем понятно как сделать. Какие условия можно применить к текстовым элементам? Элементарно - от полного равенства элемента, до вхождения в него подстроки. так ведь и вопроса такого не было.
По вопросу концепции частности думаю нужно идти именно через массив, а уже потом над ним делать все что придет в голову!
Как преобразовать текст в массив по разделителю?, Нужна формула для преобразования текста ячейки в массив для последующего использования в формулах
 
БМВ еще раз хочу поблагодарить. Вообще, вопрос был для общего понимания.
Немного офтоп. Возможно лучше открыть новую тему?
В частности же задача такова есть опять же ячейка с текстом в котором есть разделители с текстом. нужно выполнить поиск и замену (подставить), но не всех элементов а в зависимости от содержания конкретного элемента.
Первое о чем подумал это преобразовать содержимое в массив затем каким-то образом через формулу массива выполнить обработку элементов, затем через объединить конвертировать массив обратно в текст.

Может быть можно как-то проще и без перехода в массив?
Как преобразовать текст в массив по разделителю?, Нужна формула для преобразования текста ячейки в массив для последующего использования в формулах
 
БМВ То что спросил. СПАСИБО!!!
Цитата
Сергей написал:
выдуманной проблемой которую не понимает кроме вас ни кто
Таки понятно спросил.
Как преобразовать текст в массив по разделителю?, Нужна формула для преобразования текста ячейки в массив для последующего использования в формулах
 
Например есть текст "Первый элемент массива&Второй элемент массива&Третий элемент массива", разделитель "&"
Необходимо преобразовать к массиву вида:
{"Первый элемент массива 1":"Второй элемент массива":"Третий элемент массива"}
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Окончательное решение
=НЕ(ДЛСТР(RC)+1-ДЛСТР(ПОДСТАВИТЬ(RC;СИМВОЛ(10);""))-СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК({"я":"н":"х":"лч ":"в":"нн"};ПОДСТАВИТЬ(СТРОЧН(RC);"рв";"х")))))
Изменено: Userdo - 12 Июл 2018 08:59:54
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Как выяснилось, предложенная формула не всегда дает верный результат:

=НЕ(ДЛСТР(TDSheet!RC)+1-ДЛСТР(ПОДСТАВИТЬ(TDSheet!RC;СИМВОЛ(10);""))-СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК({"я":"н":"рв":"лч":"в":"нн"};TDSheet!RC))))

например "РВ 8" даст ЛОЖЬ, поскольку суммпроизв вернет 2 вместо 1

Очевидно, чтобы решить задачу нужно искать не по всей ячейке, а в пределах одной строки (до СИМВОЛ(10))
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Как выяснилось, предложенная формула не всегда дает верный результат:

=НЕ(ДЛСТР(TDSheet!RC)+1-ДЛСТР(ПОДСТАВИТЬ(TDSheet!RC;СИМВОЛ(10);""))-СУММПРОИЗВ(--ЕЧИСЛО(ПОИСК({"я":"н":"рв":"лч":"в":"нн"};TDSheet!RC))))

например "РВ 8" даст ЛОЖЬ, поскольку суммпроизв вернет 2 вместо 1

Очевидно, чтобы решить задачу нужно искать не по всей ячейке, а в пределах одной строки (до СИМВОЛ(10))
Изменено: Userdo - 11 Июл 2018 09:22:25
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Забавно, но цветок вышел. Спасибо.
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Вердикт таков: поскольку формулы массива использовать в проверке данных нельзя понимаем что задача не реализуема. Не выходит каменный цветок((
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Читаем первый пост и понимаем собственно зачем нам формула
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
не получается вставить данную формулу в поле для формулы проверки данных
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Bema, ошиблись на нашем примере "Дыни" это что-то еще. Не входит оно в список допустимого.
Изменено: Userdo - 5 Июл 2018 15:54:29
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
список необходимо задать в теле формулы. Например, в форме массива {"Яблоки":"Груши":"Арбузы"}
Изменено: Userdo - 5 Июл 2018 15:54:42
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
формула должна возвращать истину если значение введено корректно, иначе ложь (объект "проверка данных")
Изменено: Userdo - 5 Июл 2018 15:38:54
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Да по той теме уже разобрались. Здесь же вопрос в другом: Если мы знаем то, что там может быть тогда как понять, что там есть что-то еще.
Например, содержимое ячейки "яблоки 10ПСГруши 5ПСАрбузы 8ПСДыни 10" если список допустимого {"Груши";"Арбузы"},
тогда что-то еще будет "Дыни".

Пример добавлен, но поскольку в нем нет формулы он не сильно отличается от пустого файла. Единственное отличие на R1C1 внесено значение и добавлен объект проверка данных с истиной вместо формулы которую требуется разработать в соотв. с текущим топиком.
Изменено: Userdo - 5 Июл 2018 15:29:02
Формула для определения содержит ли часть ячейки строку из списка
 
Спасибо.
И напоследок для общего ... Многие ли формулы способны принимать массивы и выдавать массивы?
Изменено: Userdo - 5 Июл 2018 12:18:31
Формула для определения содержит ли часть ячейки строку из списка
 
Цитата
БМВ написал:
почему не работает, работает. Только выдает множество (в данном случае 3) результатов, которые надо обработать для получения единственного.
Интересно, а как-то можно посмотреть в екселе, что функция поискпоз возвращает массив?
Как получить отдельные элементы результата если это массив?
Формула для определения содержит ли часть ячейки строку из списка
 
Спасибо постараюсь понять.

Интересно, а как-то можно посмотреть в екселе, что функция поискпоз возвращает массив?
Как получить отдельные элементы результата если это массив?
Изменено: Userdo - 5 Июл 2018 11:50:50
Формула для определения содержит ли часть ячейки строку из списка
 
Действительно работает, вместе не проверял. Просьба пояснить почему она не работает отдельно разве это не базовая функция формулы?

ПОИСКПОЗ({"*пока*":"*до*":"*свидания*"};A1;0) разве не должна возвращать 1 в случае "пока", 2 если "до" и 3 если "свидания"?

Просьба пояснить
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
тем, что ищут только по первому элементу массива
Формула для определения содержит ли часть ячейки строку из списка
 
формулы
ПОИСКПОЗ({"*пока*":"*до*":"*свидания*"};A1;0) ровно как и
COUNTIF(A1;{"*пока*";"*до*";"*свидания*"})
не работают так как отрабатывают только если в ячейке содержится слово пока, остальные значения не видят
Единственное, что мне пока удалось это проверять по одному значению из массива зараз:
=  0 = --ЕЧИСЛО(ПОИСК("от";RC[-1]))+ --ЕЧИСЛО(ПОИСК("кг";RC[-1]))+ --ЕЧИСЛО(ПОИСК("тест";RC[-1]))  
Как сделать проверку содержание в ячейке строковых кодов только из заданного массива?
 
Решения как я понимаю нет через определение массива возможных значений, поскольку нет возможности проверки содержимого ячейки на то, что неопределено.
Но, допустим если бы мы знали список того, что там быть не должно, то тоже непонятно как такую формулу написать, Например, для проверки содержимого ячейки из предыдущего столбца на значения из массива из четырех элементов "от";"кл";"лол";"тест" можно было бы использовать следующую формулу для проверки (возвращает ложь если пользователь ввел недопустимое значение)
Код
=  0 = --ЕЧИСЛО(ПОИСК("от";RC[-1]))+ --ЕЧИСЛО(ПОИСК("кг";RC[-1]))+ --ЕЧИСЛО(ПОИСК("лол";RC[-1]))+ --ЕЧИСЛО(ПОИСК("тест";RC[-1]))

а если бы нам требовалось проверить массив из 20ти, такую формулу было бы просто невозможно написать поскольку существует ограничение на длину формулы в 255 символов которую можно присвоить ячейке через автоматизацию.
С другой стороны из условий задачи массив того, что там быть может состоит всего из 6 элементов.
Так же можно было бы зайти для решения со стороны макросов - там нет ограничений на длину процедуры, но как гарантировать, что пользователь не отключит исполнение макросов и проверку таким образом мне не понятно..
Изменено: Userdo - 5 Июл 2018 15:53:33
Формула для определения содержит ли часть ячейки строку из списка
 
Пример чего? Все же понятно.
Ну вот пример; содержание ячейки "абрвал", массив "ва";"ру";"ко";"да"
Результат вычисления должен быть истина потому что "ва" содержится в ячейке  
Формула для определения содержит ли часть ячейки строку из списка
 
Вроде бы просто. Неужели никто не знает?
Как добавить макрос в ексель файл через автоматизацию для обработки событий редактирования содержимого ячеек?
 
Оказалось все очень просто:
Код
файл = Новый ComObject("Excel.Application");
файл.WorkBooks.Open(ФайлВыгрузки);
Файл.VBE.ActiveVBProject.VBComponents("Лист1").CodeModule.AddFromString(ТекстПроцедуры);

Но есть нюанс изначально файл выгружается из 1с без макросов с расширением xlsx. Чтобы сохранить файл с макросами необходимо сохранять с расширением xlsm:
Книга.SaveAs(НовоеИмя,52); //52 - xlsm
Как добавить макрос в ексель файл через автоматизацию для обработки событий редактирования содержимого ячеек?
 
Перефразирую. Через COM ("Excel.Application") выполняется доработка файла эксель из 1С. Добавляется защита книги, добавляются формулы для подсчета итогов по выгружаемым данным. Предполагается рассылка этих файлов для дальнейшего заполнения пользователями. Было бы супер, если бы было возможно добавление обработчиков редактирования открытых для редактирования ячеек.
Интересно возможно ли вставить макросы через такую автоматизацию?
Формула для определения содержит ли часть ячейки строку из списка
 
Нужна формула для определения содержит ли часть ячейки строку из списка. При этом список должен быть задан в самой формуле.
Как добавить макрос в ексель файл через автоматизацию для обработки событий редактирования содержимого ячеек?
 
Нет никакой текущей книги и модулей. Автоматизация выполняется вообще не из VBA, а через COM.
Страницы: 1 2 След.
Наверх