Страницы: 1
RSS
Вычленение статей из массива данных
 
Здравствуйте!
Не знаю, нужно ли посвящать в подробности, попробую без них.
Есть массив данных (карточка счёта), для работы с ним нужно собрать суммы постатейно. Проблема в том, что ячейка, в которой содержится название статьи, есть сторонний текст.
... так понимаю, что без примера никак не обойтись. Прикрепляю файл с примером.

В данном файле представлена карточка счёта 25, отбор по статье "Электроэнергия", т.е. представлена всего одна статья: Электроэнергия. На листе "Перечень статей" представлен весь перечень статей, соответственно.

Мне нужно для каждой статьи с листа "Перечень статей" посчитать суммы строк (наименование статьи содержится в столбце C), которым соответствует проводка Дебет 25 (столбец E), Кредет 19.04 (столбец H).

Как я понимаю, для этого надо использовать функцию СУММЕСЛИМН, где одним условием будет наименование статьи (в данном случае это статья "Электроэнергия"), а вторым - номер счёта (19,04).

Проблема - в вычленении из столбца наименования статьи. Если статья одна - это легко, до этого я с малым перечнем и работал, прописал формулу с несколькими (~10) ЕСЛИ, но когда статей ~50, это катастрофа. Особенно, если отчёт надо быстро подготовить.

До этого я вычленял из ячейки с текстом статью следующим образом (отвлечённый пример, другая статья):
Цитата
=ЕСЛИ(ЕЧИСЛО(ПОИСК("Техническое обслуживание оборудования";D590));"Техническое обслуживание оборудования";ЕСЛИ(ЕЧИСЛО(ПОИСК(...[остальные статьи длинной записью]
На выходе я получал полное или сокращённое (как настраивал) наименование статьи, с которым работал. Но теперь это не очень то и вариант...

Можно ли, не знаю, если по прежнему использовать эту формулу
Цитата
ЕСЛИ(ЕЧИСЛО(ПОИСК(!искомый текст!;ячейка, в которой ищется текст
в формулу ПОИСК встроить какую-нибудь доп. функцию, например, ВПР для обнаружения статьи, которая находится в тексте ячейки, в которой производится поиск. Чтобы не прописывать вручную многоэтажную формулу со всеми ~50 статьями? А потом ещё и протягивать для каждой строки (около 202 строк).

Если кратко сформулировать вопрос, как просуммировать суммы таблицы, если одно из условий суммирования внутри текста нужной для поиска ячейки, и условие это меняется? *Предполагаю, что нужно создать доп. столбец, где будет вычленена статья из ячейки с текстом, но как это можно сделать, не прописывая этажи формул, может можно как-то использовать др. формулы для автоматического подбора соответствия содержащегося текста внутри ячейки, в которой сод. нужна статья одной из статей перечня*

Честно говоря, я уже столько всего передумал на нервяке, свои неудачные варианты решения проблемы, что подозреваю, что объяснил несколько сумбурно вопрос, но всё же, надеюсь, не совсем безнадёжно непонятно.
 
Добрый день
Код
=СУММЕСЛИМН(Карточка!F:F;Карточка!H:H;"19.04";Карточка!C:C;"*" & A1 & "*")
где A1 - название статьи
 
Спасибо огромное, какая-то поразительная неведомость!) Пробелы, незамкнутые в кавычки и Excel не ругается) Поясните, пожалуйста... т.е. весь текст 2 условия кроме ячейки A1 - это своего рода команда выявить нужный текст внутри массива текста, т.с., отбросить всё лишнее и найти то, что нужно?
Вы колоссально меня выручили, огромное спасибо ещё раз!
 
звездочка заменяет любое количество любых символов - т.е. подходит любой текст, в котором встречается название статьи.
 
webley, благодарю Вас!

А не подскажите, вот на листе "Карточка" столбец C со статьями внутри текста, я бы хотел создать столбец (для другой работы, для перепроверок и пр.) с наименованиями статей, как на листе "Перечень статей". Т.е. есть ли такая функция или несложная комбинация функций*, которая из диапазона статей находила ту статью, которая содержится в тексте ячейки столбца C, и возвращала чисто название статьи из диапазона перечня статьей? Если в ячейке содержится статья "Электроэнергия" - то "Электроэнергия", если "Текущий ремонт сооружений" - "Текущий ремонт сооружений" и т.д.. Как ВПР, но чтобы условие менялось в зависимости от того, какая статья содержится в ячейке столбца C. Я уже голову сломал, прихожу к циклической комбинации формул...


* - последнее моё достижение, к слову, кажется, 14 строк формул, как бы здорово, но очень тяжело для глаз и проверки, мало ли - ошибся в написании.
 
_Vadim_, я бы в данном случае предложил UDF. Давайте будем уважать правила (одна тема - один вопрос) - создайте новую тему и там об этом поговорим:)
Хотя, наверное, вопрос тот же, только под другим углом
Изменено: webley - 05.04.2018 12:17:24
 
webley,благодарю Вас!

Да, я думал, стоит ли создавать новую тему, ибо, да, Вы правы, это скорее уж совсем другой вопрос, но у меня с неопределённых времён сформировалось представление, что плодить темы - это не уважительно к людям, потому в конечном счёте решил задать вопрос здесь же.
 
webley, здравствуйте!

А такой вопрос... а что Вы сделали в последнем случае?) Вы написали функцию в visual basic? А как мне это сделать (хотя бы скопировать текст кода), чтобы данная функция работала в файле для работы? Вначале я обратил внимание, что Вы изменили формат файла "для поддержания макросов", но когда макросы не увидел, подумал, что у этого расширения больше функций, а оказалось всё гораздо интереснее)
_________________
А всё, сам разобрался, спасибо Вам ещё раз, не знаю, что меня больше поражает польза функции или то, что Вы создали новую функцию)
Изменено: _Vadim_ - 06.04.2018 20:27:03
 
Цитата
_Vadim_ написал:
но когда макросы не увидел
может Вы где-то не там смотрели? :) макрос в файле все-таки есть... ну точнее не совсем макрос, а UDF (пользовательская функция)
создайте в своем файле стандартный модуль VBA и вставьте этот код:
Код
Public Function BudgetItem(st As String, LUT As Range)
    Dim arr() As String
    Dim j As Integer
    arr = Split(st, Chr(10))
    For j = 0 To UBound(arr)
        If Not IsError(Application.VLookup(arr(j), LUT, 1, 0)) Then
            BudgetItem = arr(j)
            Exit Function
        End If
    Next j
    BudgetItem = CVErr(xlErrNA)
End Function

PS про то что вопрос снят увидел уже после того как ответил

Изменено: webley - 06.04.2018 10:20:00
 
webley, здравствуйте, подскажите, пожалуйста, скопировал файл, в котором работал, в котором функции (ваша и ещё одна с просторов интернета) работали, переименовал, и теперь функция возвращает значение "#ИМЯ?", т.е. файл не понимает функции, хотя файл формата поддержания макросов и сами модули на месте.
Причём не только ваша функция не работает, но и та другая из интернета. Подскажите, пожалуйста, как восстановить их работу?
 
Добрый день. А можете из вашего нерабочего файла удалить информацию (оставить пару ячеек, с которыми должна работать функция) и выложить сюда в качестве примера - так будет проще разобраться.
 
webley, простите, я на нервяке, видимо, совершенно не обратил внимание на то, что я, видимо, несколько раз подряд, перезапуская файл снова и снова не включал содержимое) Вот VBA не работал, но благодарю, что откликнулись!
Страницы: 1
Наверх