Не могу применить формулу в Excel

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

Я хочу, чтобы сообщение под таблицей появлялось автоматически после ввода счетчика.

Я попробовал применить условие IF(), но получилось.

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
114
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ваш вопрос немного расплывчатый, но мне кажется, я понял, чего вы хотите; просто нужно знать, вы обновляете саму дату? Или вы добавляете новую строку каждый день?

Предполагая, что ваш лист начинается с «A1», а текстовая строка начинается с «A6», попробуйте эту формулу в «A6»:

=TEXT(A3,"dd/mmm") & "Uptrend observed in" & IF(B3>B2 , "CC(" & B2 & "," & B3 & "), " , "") & IF(C3>C2 , "Pune Distribution(" & C2 & "," & C3 & ")" , "") & IF(D3>D2 , "Mumbai Distribution(" & D2 & "," & D3 & ")" , "") & IF(E3>E2 , "Quality(" & E2 & "," & E3 & ")" , "") & IF( F>F2 , "Production(" & F2 & "," & F3 & ")" , "") & IF(G3>G2 , "Website(" & G2 & "," & G3 & ")" , "") & IF(H3>H2 , "Online Payment(" & H2 & "," & H3 & ")" , "") & IF(I3>I2 , "IT(" & I2 & "," & I3 & ")", "") 

Он не даст вам «и» в конце последнего, но я надеюсь, что это приблизит вас к тому, что вам нужно.

Я подумаю о другом методе, когда найду еще немного времени.

Сэр, я сам обновляю дату. Но не имеет значения, будет ли это обновление даты автоматическим или ручным. Большое спасибо, сэр, за ваш ответ!

Vivek 11.03.2024 10:22

Если у вас есть Excel 365, вы можете использовать эту формулу:

=LET(tbl,db[#All],
data,TAKE(DROP(tbl,1),-2),
header,TAKE(tbl,1),
diffByColumn,BYCOL(data,LAMBDA(c,INDEX(c,1,1)<INDEX(c,2,1))),
colsWithUptrend,DROP(FILTER(data,diffByColumn),,1),
headerWithUptrend,DROP(FILTER(header,diffByColumn),,1),
textUptrend,BYCOL(SEQUENCE(,COLUMNS(colsWithUptrend)),
                  LAMBDA(i,INDEX(headerWithUptrend,1,i)&" ("&TEXTJOIN(",",TRUE,CHOOSECOLS(colsWithUptrend,i))&"),")),
message,REDUCE(TEXT(INDEX(data,2,1),"tt.MM.")&" - Uptrend observed in ",textUptrend,LAMBDA(r,c,r&" "&c)),
LEFT(message,LEN(message)-1))

Я использую таблицу (называемую db), поэтому она расширяется за день, который вы добавляете, и вам не нужно корректировать формулу.

data возвращает две последние строки таблицы, которые затем сравниваются (diffByColumn который возвращает массив true и false)

textUptrend создает части текста для каждого столбца, имеющего восходящий тренд.

Поскольку TEXTJOIN нельзя применять к textUptrend, REDUCE он используется для объединения частей текста.

Вам придется настроить часть "tt.MM." в соответствии с вашими региональными настройками: TEXT(INDEX(data,2,1),"tt.MM.")

Мэм, я думаю, что это опечатка, Pune Distribution быть не должно, а Quality пропущено. Возможно, вам придется это исправить.

Mayukh Bhattacharya 07.03.2024 14:09

Большое спасибо @MayukhBhattacharya Никогда не углублялся в Excel. Благодаря этому я многому научился...!!!

Vivek 11.03.2024 11:27

Большое спасибо @Ike Никогда не углублялся в Excel. Благодаря этому я многому научился...!!!

Vivek 11.03.2024 11:27

Я думаю, вы имеете в виду, что хотели бы автоматически генерировать текст сводки восходящего тренда?

Эта строка текста состоит из нескольких частей:

  1. максимальная дата (или последняя строка данных...)
  2. для любого столбца, где тренд > 0, вам нужен текст заголовка столбца
  3. для любого столбца, где тренд > 0, вам нужны значения двух последних точек/строк данных.

Я предлагаю вам разбить предложение и посчитать каждый компонент отдельно в других строках или столбцах или (что еще лучше) вообще в другой вкладке. Хотя решения, основанные на одной формуле, выглядят очень эффективными, я обычно предполагаю, что подход, основанный на компонентах, будет легче проверять на ошибки, изменять, передавать коллегам и может привести к появлению инструментов или подходов, которые вы сможете повторно использовать позже.

Предполагая, что вы должны оставить эти данные в этом формате... Я предлагаю вам добавить строки внизу данных (после строки тренда) и поместить туда расчеты компонентов. Затем скройте эти строки и укажите их в формуле предложения.

Это самое быстрое решение, которое пришло в голову. Он не совсем соответствует желаемому тексту, но его должно быть легко добавлять или удалять столбцы данных, а также поддерживать иным образом:

Для производственного отчета или ежедневного использования скройте строки 5–7. Чтобы сделать все грамматически правильными (запятые, закрывающее «и» и т. д.), вы можете дополнительно улучшить текст, используя различные условия IF(). Это не выглядит главным вопросом, о котором идет речь.

Ваши формулы могут быть еще короче и понятнее, если:

  • поместите данные тренда и сводное предложение вверху таблицы, затем измените порядок дат (самые новые сверху)

  • Используйте относительный аргумент строки/столбца ADDRESS().

    Ячейки тренда: =ДВССЫЛ(АДРЕС(СТРОКА()-1, СТОЛБЕЦ()))-ДВССЫЛ(АДРЕС(СТРОКА()-2, СТОЛБЕЦ()))

    Ячейки сводки: =ДВССЫЛ(АДРЕС(1, СТОЛБЕЦ()))&" ("&ДВССЫЛ(АДРЕС(СТРОКА()-3, СТОЛБЕЦ()))&", "&ДВССЫЛ(АДРЕС(СТРОКА()-2, СТОЛБЕЦ() )))&")"&", "

    Ячейки восходящего тренда: =ЕСЛИ(ДВССЫЛ(АДРЕС(СТРОКА()-2,СТОЛБЕЦ()))>0,ДВССЫЛ(АДРЕС(СТРОКА()-1,СТОЛБЕЦ())), "")

    Ячейка отчета: =TEXT(INDIRECT(ADDRESS(ROW()-5,COLUMN()-1,)),"DD MMM")&" - Восходящие тенденции наблюдаются в: "&CONCAT(INDIRECT(ADDRESS(ROW()-2, COLUMN())&":"&ADDRESS(ROW()-2,COLUMN()+7)))

Ответ принят как подходящий

Если предположить, что в соответствии с опубликованными тегами нет Excel Constraints, то для получения желаемого результата должна работать следующая формула.

Следующая формула не использует никаких LAMBDA() вспомогательных функций для выполнения custom calculations и не использует никаких volatile functions, которые будут recalculate что-либо делать в любое время, когда в любой открытой книге происходят изменения, а также volatile функции, замедляющие работу engine/capacityExcel.

Это сказано:


• Формула, используемая в ячейке A6

=LET(
     _Data, DailyDashBoard[#All],
     _Header, TAKE(_Data,1,COLUMNS(_Data)-1),
     _DataBody, DROP(TAKE(_Data,-2),,-1),
     _Filtered, FILTER(VSTACK(_Header,_DataBody),TAKE(_DataBody,1)<TAKE(_DataBody,-1)),
     _LastDay, TAKE(_Filtered,-1,1),
     _CustomDate, DAY(_LastDay)&
                  LOOKUP(DAY(_LastDay),ORDINALS)&" "&
                  TEXT(_LastDay,"mmm - ")&"Uptrend Observed in ",
     _Joined, TEXTJOIN({"(",",","), "},,WRAPROWS(TOCOL(DROP(_Filtered,,1),,1),3))&")",
     SUBSTITUTE(_CustomDate&_Joined,"), ",") and ",MAX(LEN(_Joined)-LEN(SUBSTITUTE(_Joined,"),",))-2,1)))

  • Чтобы объяснить, я начну с преобразования диапазонов в Structured References или Tables, на этом форуме мы обычно предлагаем использовать то же самое. Потому что он может изменять размеры строк/столбцов, не затрагивая диапазоны/массивы, взятые в формулах.
  • Использование функции LET() облегчает чтение, присваивает определенные переменные, исключает избыточные вычисления.
  • Переменная _Data определена для всего Structured ReferencesDailyDashBoard[#All]
  • Использование функции TAKE(), динамически извлекающей _Header.
  • Использование DROP() и TAKE() для извлечения _DataBody, представляющего числа и даты, исключая Totals
  • Используя переменную _Filtered, мы используем функцию FILTER() для извлечения _Header, а также _DataBody, сложенного с помощью VSTACK(), чтобы получить данные в соответствии с вышеупомянутыми условиями.
  • Переменная _LastDay извлекает дату с помощью функции TAKE(), и нам нужен только последний день, а не предыдущий.
  • Переменная _CustomDate — это не что иное, как объединение дня и порядковых значений вместе со строкой, которая должна следовать за ней.
  • Переменная _Joined использует функцию TEXTJOIN(), прежде чем преобразовать массив в одиночный с помощью TOCOL(), а затем в массив 2-dimensional, чтобы упростить объединение.
  • И последнее, но не менее важное: соединение _CustonDate с _Joined для получения желаемого результата, но если внимательно отметить, то он использует функцию SUBSTITUTE() дополнительно, чтобы позаботиться о and, которая необходима, если имеется более одного массива данных.

Тестовый пример_1:


Тестовый пример_2:


Приложение:

Забыл упомянуть о ORDINALS в функции LOOKUP(), используемой для переменной _CustomDate, это определенное имя в Name Manager с использованием VSTACK()


=VSTACK(
    {1, "st"},
    {2, "nd"},
    {3, "rd"},
    {4, "th"},
    {21, "st"},
    {22, "nd"},
    {23, "rd"},
    {24, "th"},
    {31, "st"}
)

Другие вопросы по теме