Как я могу сформировать строку элементов, сгруппированных по соответствующему значению? (например, "Красный: яблоки, вишня") - PullRequest
2 голосов
/ 14 февраля 2020

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

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

Существует столбец для месяцев jan-de c и столбец рядом с ним, где пользователь может ввести число от 1 до 10 (и эти числа связаны со строками, которые найдены с помощью Vlookup на другом лист. Они в основном "коды ошибок", просто чтобы сохранить лист в чистоте. Но я просто опускаю эту часть, потому что она не нужна для этого вопроса)

Прямо сейчас, текст что заполняет показывает:

Jan: 1
Feb: 2
Apr: 1

Как можно сгруппировать их по значению вместо того, чтобы перечислять их отдельно? Что-то вроде:

1: Jan, Apr
2: Feb

Можно ли взять предметы из этого списка месяцев и поместить их в свои списки?


Это текущая формула для справки:

=if(countif(Calculator!B2:B13,">0"),CONCATENATE(C2:C13),"None")

(Калькулятор лист) B2: B13 -> столбец с числами

(Таблица данных) C2: C13 -> объединенная строка, которая содержит название месяца из одной ячейки и номер (или технически строку, связанную с этим номером, как я уже упоминал ранее)

Каждая ячейка в столбце C имеет Янв: 1, февраль: 2, а любой месяц без данных оставлен пустым. Когда я объединяю ячейки C вместе, автоматически пропускаются пустые ячейки, что полезно, но теперь я действительно хотел бы сгруппировать их по этому значению.

Вот пример лист, который отражает это

1 Ответ

2 голосов
/ 14 февраля 2020

удалить A15 и вставить это в A14 :

={""; ARRAYFORMULA(TEXTJOIN(CHAR(10), 1, REGEXREPLACE(TRIM(
 TRANSPOSE(QUERY(QUERY({A2:A13&",", B2:B13&":"}, 
 "select max(Col1) 
  where not Col2 matches ':' 
  group by Col1
  pivot Col2"),,9^9))), ",$", )))}

0


ОБНОВЛЕНИЕ:

если заказ имеет значение ...

={""; ARRAYFORMULA(TEXTJOIN(CHAR(10), 1, REGEXREPLACE(TRIM(
 TRANSPOSE(QUERY(QUERY({"♦"&ROW(A2:A13)&"♦"&A2:A13&",", B2:B13&":"}, 
 "select max(Col1) 
  where not Col2 matches ':' 
  group by Col1
  pivot Col2"),,9^9))), "♦\d+♦|,$", )))}

0


ОБНОВЛЕНИЕ:

={""; ARRAYFORMULA(JOIN(CHAR(10), SUBSTITUTE(REGEXREPLACE(TRIM(QUERY(QUERY({
 SORT(FILTER({SUBSTITUTE(A1:A12, "'", "/"&20)*1, B1:B12&":"}, B1:B12<>""), 2, 1, 1, 1)}, 
 "select max(Col1)
  group by Col1
  pivot Col2
  format max(Col1) 'Mmm♦yy,'"),,99^99)), ",$", ), "♦", CHAR(39))))}

0

...