Ответы пользователя по тегу Excel
  • Как сделать правильно выборку IFS?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Может помочь это - реализация кусочно-константной функции
    /**
     * Рассчитывает кусочно-константную функцию
     *
     * @author Boew Grigory (ff.nspu@gmail.com)
     * @param {Array} data Входные данные (аргумент)
     * @param {Array} criteria Массив критериев [от, до, значение]
     * @param {any} [defaultValue=""] Значение по умолчанию - то что подставляется, если аргумент не подходит ни под один из критериев
    */
    function piecewiseConstant(data, criteria, defaultValue="-"){
      criteria = criteria
                  .map(cr=>({ // convert to objects
                    fromValue: cr[0],
                    toValue: cr[1],
                    value: cr[2],
                  }))
                  .filter(cr=>cr.fromValue!=="" && cr.toValue!==""); // filter empty criteria
      return data.map(row=>row.map(el=>{
        let foundCriteria = criteria.find(cr=>(el>=cr.fromValue)&&(el<cr.toValue));
        if (foundCriteria!==undefined){
          return foundCriteria.value;
        }else{
          return defaultValue;
        };
      }));
    };
    Ответ написан
    Комментировать
  • Как приравнять несколько слов?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Задача непростая, а если в общем смысле - ещё и нерешаемая, т.к. только вам известно что такое правильно.
    А по теме можно почитать про расстояние Левенштейна
    Ответ написан
    Комментировать
  • Как распарсить XML в таблицу?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Есть как минимум два способа: подключить библиотеку для работы с XML или парсить вручную, вплоть до того, чтобы не использовать VBA, а просто формулами
    Ответ написан
    Комментировать
  • Importrange + query = Error?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    1) Попробуйте имя листа в кавычки взять
    '3.0 Сделки GF'!A1:Z
    2) Если локаль не требует запятой в качестве разделителя, то скорее всего там надо поставить точку с запятой (для русской локали по умолчанию). Где-то точно стоит неправильный разделитель - в формуле есть и точка и точка с запятой одновременно
    ...GF!A1:Z") , "select ...
    т.е. попробуйте в итоге
    =query(IMPORTRANGE("https://docs.google.com/spreadsheets...";"'3.0 Сделки GF'!A1:Z"); "select * where Col6 contains 'К1П1'")
    Ответ написан
    Комментировать
  • Как настроить условное форматирование, дата больше на несколько дней?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Вероятно нужно убрать абсолютные ссылки
    =$i$11+день($d2)
    Хотя непонятно зачем вообще функция день() от числа берётся
    И если надо брать значение из той же строки, то надо ставить 1
    Например:
    A1 - это текущая ячейка
    B1 - ячейка справа от текущей [B-A=+1 столбец], но в той же строке[1-1=0 строк]
    C2 - ячейка справа на 2 столбца от текущей [C-A=+2 столбца], в строке ниже[2-1=+1 строка]
    $B1 - ячейка столбца B(зафиксирован), но в той же строке[1-1=0 строк]
    $D$1 - ячейка $D$1(зафиксирована)
    Или универсальный вариант:
    indirect("R"&(СТРОКА()+2)&"C"&(СТОЛБЕЦ()+3);0) - ячейка со смещением на 2 строки и 3 столбца от текущей вправо и вниз
    indirect("R"&(СТРОКА()-2)&"C"&(СТОЛБЕЦ()-3);0) - ячейка со смещением на 2 строки и 3 столбца от текущей влево и вверх
    Ответ написан
    Комментировать
  • Как выделить артикулы Excel?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Проще всего тут - использовать Regex
    Проходите циклом по ячейкам, обрабатываете
    Ответ написан
    Комментировать
  • Как сделать условное форматирование через формулу?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Надо сделать два условных форматирования - для красного и зелёного соответственно.
    Как пример, для столбца A:A: слово справа = "красный"
    Условное форматирование - Своя формула
    =B1="красный"
    А так, уже всё придумано и используется. При копировании ячеек и/или формата условное форматирование тоже копируется, и никакой проблемы нет.
    Ответ написан
    Комментировать
  • Как сделать гистограмму в виде гонок?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    1) Использовать внешний сервис, который сгенерирует картинку по данным, и получить её с помощью IMAGE(). Сомневаюсь что есть уже готовое, но что-то похожее стоит поискать.
    2) Посмотреть в сторону chart-api, возможно если углубиться в кастомизацию, что-то подобное можно нарисовать, но это не точно.
    3) Нарисовать диаграмму ячейками, их границами и т.п. Это самый простой способ, хотя и костыльный.
    Ответ написан
    1 комментарий
  • Можно ли склонять слова автоматически в Excel?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    1000 лет назад делал что-то подобное на VBA. Число-в-текст, склонения/спряжения и т.п. Поищите, есть расширения для Excel которые подобным занимаются.
    Другой вариант - использовать готовое: слать запрос с какому-нибудь серверу и получать в ответ то что нужно, наверняка уже есть такие сервисы, возможно даже открытые.
    Ответ написан
    Комментировать
  • Как ускорить работу эксель?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Что-то тут не так...
    без уменьшения количества формул

    мне нужны только csv-шки


    А вообще, есть несколько путей.
    1) Убрать условное форматирование или форматирование вообще, оставить только данные
    2) Уменьшить сложность алгоритмов расчёта. Присмотритесь, возможно где-то сидит O(n^3)
    3) Кэшировать данные. Например, если по всему столбцу есть расчёт какого-то показателя для которого надо перешерстить целую таблицу, то логично этот расчёт вынести в отдельный столбец, или даже в ячейку.
    3) Данные, по которым ищет ВПР и прочие подобные функции - отсортировать по 1му столбцу и указать это в ВПР - это значительно ускорит поиск
    4) Если есть навык и документ для внутреннего пользования - перепишите критические по скорости области на VBA, иногда это помогает
    5) На крайний случай - отключить автоматический расчёт формул
    Ответ написан
    Комментировать
  • Как динамически подставлять названия страниц в формулу из соседней ячейки?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    ДВССЫЛ(A1&"!A:C";1)
    Ответ написан
    Комментировать
  • Как сделать поиск по строке всех пустых ячеек и вернуть массив номеров столбцов (формулой)?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    В новых ревизиях есть TEXTJOIN()
    Можно получить последовательность индексов так(вводится формулой массива 1*5 через Ctrl+Shift+Enter):
    =ЕСЛИ(A1:E1<>"";{1;2;3;4;5};{"";"";"";"";""})
    В Google Sheets можно использовать JOIN()
    Ответ написан
  • Как задать в формуле имя листа, взятый из текста в ячейке?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    =INDIRECT("'"&A1&"'!A:Z")
    A1 - тут лежит имя листа
    A:Z - импортируемый диапазон
    Ответ написан
    Комментировать
  • Функция замен символов VBA?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Если не морочться с регулярками (а по идее, надо бы), то достаточно поменять строку
    Worksheets("Sheet1").Range("A" & i) = Replace(xcell, " ", x)

    на что=-то вроде
    xcell = Replace(xcell, ".", x)
    xcell = Replace(xcell, ",", x)
    xcell = Replace(xcell, "(", x)
    xcell = Replace(xcell, ")", x)
    xcell = Replace(xcell, " ", x)
    Worksheets("Sheet1").Range("A" & i) = xcell


    Но вообще, как и говорил, лучше подключить регулярки (это минутное дело) и использовать их
    Вот, например, статья на русском
    Ответ написан
    Комментировать
  • Как по клику по строчке показывать определенные данные?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Для Google sheets есть onSelectionChange(event).
    1. Получаете адрес ячейки, и содержимое
      let value = range.getCell(1, 1).getValue()

    2. Ищите данные по этому запросу
      data.filter(row=>row[0]===value)

    3. И пишите результат в нужные ячейки
      range.setValues(outData)


    Или можно выделить одну ячейку для текущего значения выделения, а искать значения формулами с ВПР/FILTER, такой гибридный способ и быстрее работать будет и более устойчив к редактированию структуры таблицы
    Если нужно готовое решение - пишите в личку
    Ответ написан
    Комментировать
  • Множественный ВПР в одной ячейке по части текста?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    В Excel на VBA что-то возможно подобное сделать.
    В Google таблицах есть шанс обойтись формулами, хотя и пользовательскую функцию там проще сделать.
    на формулах это жутко выглядит, да и ошибиться можно на раз. Формула для 3х итераций

    =join(
            "/"
            ;ТРАНСП(unique(
                    ТРАНСП(split(
                            join(
                                    "/"
                                    ;ArrayFormula(
                                            ЕСЛИОШИБКА(
                                                    ВПР(
                                                            split(
                                                                    join(
                                                                            "/"
                                                                            ;ArrayFormula(
                                                                                    ЕСЛИОШИБКА(
                                                                                            ВПР(
                                                                                                    split(
                                                                                                            ВПР(A1;FILTER(A:B;A:A<>"");2;0)
                                                                                                            ;"/"
                                                                                                    )
                                                                                                    ;FILTER(A:B;A:A<>"")
                                                                                                    ;2
                                                                                                    ;0
                                                                                            )
                                                                                            ;split(
                                                                                                    ВПР(A1;FILTER(A:B;A:A<>"");2;0)
                                                                                                    ;"/"
                                                                                            )
                                                                                    )
                                                                            )
                                                                    )
                                                                    ;"/"
                                                            )
                                                            ;FILTER(A:B;A:A<>"")
                                                            ;2
                                                            ;0
                                                    )
                                                    ;split(
                                                                    join(
                                                                            "/"
                                                                            ;ArrayFormula(
                                                                                    ЕСЛИОШИБКА(
                                                                                            ВПР(
                                                                                                    split(
                                                                                                            ВПР(A1;FILTER(A:B;A:A<>"");2;0)
                                                                                                            ;"/"
                                                                                                    )
                                                                                                    ;FILTER(A:B;A:A<>"")
                                                                                                    ;2
                                                                                                    ;0
                                                                                            )
                                                                                            ;split(
                                                                                                    ВПР(A1;FILTER(A:B;A:A<>"");2;0)
                                                                                                    ;"/"
                                                                                            )
                                                                                    )
                                                                            )
                                                                    )
                                                                    ;"/"
                                                            )
                                            )
                                    )
                            )
                            ;"/"
                    ))
            ))
    )


    Демонстрационная таблица
    Ответ написан
    5 комментариев
  • Как можно узнать маленькие буквы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Можно так, если надо массово. Формула на маленькие латинские буквы
    =ArrayFormula(1=ЕСЛИ(КОДСИМВ(ЛЕВСИМВ(B6:B;1))>=97;1;0)*ЕСЛИ(КОДСИМВ(ЛЕВСИМВ(B6:B;1))<=122;1;0))
    Ответ написан
    2 комментария
  • Как переделать макрос объединения ячеек?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Selection - это объдиняется. Передайте вместо него другой Range и отработает так же
    .Item(1).Value - тут присваивается значение (в перувю ячейку)
    PS: Если надо в другую ячейку писать, за зачем вообще объединять? Просто конкатенируйте значения и кладите в ячейку без их объединения
    Ответ написан
    1 комментарий
  • Как посчитать процент относительно наибольшего количества цифр в трех ячейках?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    =ArrayFormula(ДЛСТР(G1:G3)/МАКС(ДЛСТР(G$1:$G$3)))
    И поставьте процентный формат, потому что значения будут от 0 до 1
    Ответ написан
    1 комментарий
  • Как из такого списка вытащить только Имя и Фамилию?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Серебряной пули тут нет. Я бы скопировал всё в Google Sheets(там больше возможностей), и там с помощью REGEXTRACT() вытаскивал бы данные, возможно по частям.
    Можно, например, искать слова с большой буквы среди предложения, или слова с "ич" или "вна".
    Ответ написан
    1 комментарий