Объединение ячеек верхней строки, если столбец ниже имеет 1

Я смотрю на большую базу данных из 1s и 0s с именованными столбцами, например:

red blue green orange purple ────── ────── ────── ────── ────── 0 0 1 0 1 0 1 0 0 0 

Я хочу объединить все заголовки (по строке), где строка имеет «1» ниже этого заголовка. Поэтому в идеале первый будет равен «зеленый, фиолетовый», а второй будет просто «синим». У меня есть большой объем данных, поэтому ничего, nested из сотен функций «IF», ​​не имеет смысла.

я пробовал

= IF (B1: B5 = 1, CONCATENATE (A1: A5), “”)

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

Конкатенацию строк более чем на несколько ячеек лучше всего оставлять для пользовательской функции VBA (иначе UDF ) даже без установки критериев. Ваше положение о «гнезде» сотен «функций» IF , несомненно, поместило бы его в эту категорию.

Нажмите Alt + F11, и когда VBE откроется, немедленно используйте выпадающие меню, чтобы Вставить ► Модуль ( Alt + I , M ). Вставьте следующее в новую панель под названием « Book1 – Module1 (Code)» .

 Public Function conditional_concat(rSTRs As Range, rCRITs As Range, Optional sDELIM As String = ", ") Dim c As Long, sTMP As String For c = 1 To Application.Min(rSTRs.Cells.Count, rCRITs.Cells.Count) If CBool(rCRITs(c).Value2) Then _ sTMP = sTMP & rSTRs(c).Value & sDELIM Next c conditional_concat = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0)) End Function 

Нажмите Alt + Q, чтобы вернуться на рабочий лист. Используйте этот UDF, как любую собственную рабочую таблицу Excel. Синтаксис,

 conditional_concat(, , [optional] ) 

Условная конкатенация строк

Формула в G2 есть,

 =conditional_concat(A$1:E$1, A2:E2) 

Заполните, если необходимо.

Я бы сделал так, чтобы добавить пять дополнительных столбцов и явно ввести «красный», «синий», «зеленый», «оранжевый», «фиолетовый», где соответствующий столбец равен 1, чтобы вы могли:

Красный столбец «r»: =IF(col_red=1,"red,","")

Синий столбец «b»: =IF(col_blue=1,"blue,","")

Зеленый столбец «g»: =IF(col_green=1,"green,","")

оранжевая колонка «o»: =IF(col_orange=1,"orange,","")

Фиолетовый столбец «p»: =IF(col_purple=1,"purple,","")

и в другом столбце объединяют эти столбцы (изменяют ссылки на соответствующие столбцы и т. д.) =LEFT(F2 & G2 & H2 & I2 & J2,LEN(F2 & G2 & H2 & I2 & J2)-1) (я нашел конкатенат функция ошибочна из-за ошибочных строк

Дает этот результат: Результат функций, перечисленных выше в ответе

Я немного экспериментировал с функциями массива без каких-либо успехов, которые могут быть способом решить эту проблему.

  • Соответствие регулярных выражений в выражении Bash if
  • Как оценивается Swift IF LET?
  • Что лучше ? Несколько операторов if, или один, если с несколькими условиями
  • Разница в производительности между IIf () и If
  • Значение ошибки , если (квадратные скобки)
  • Когда квадратные скобки требуются в инструкции Bash if?
  • Почему утверждение «если» считается злым?
  • if else в шаблонах AngularJS
  • Ошибка пакетного файла Windows. Как может 30000000000000 равняться 40000000000?
  • Рефакторинг if / else логики
  • Как избежать цепей «если»?
  • Давайте будем гением компьютера.