У меня есть лист Excel, который имеет почти 100 столбцов с именами заголовков столбцов:

таблица

На этом изображении 11 значений / имен заголовков столбцов, начиная с A до L. (А находится в B2). Мне нужна формула для добавления в столбец "Результаты" X котором отображаются все имена заголовков столбцов со значением "1". Вы можете видеть, что в первом значении ячейки "Результаты" есть A, C, F, H, J, потому что они содержат "1".

Я попытался сделать это по формуле IF но используя этот способ, мне нужно поставить IF для каждого значения столбца, что будет непростой задачей, так как я получил более 100 столбцов, поэтому я хочу, чтобы механизм просто выбирал диапазон и применял его.

Не эксперт в VBA, но если это должно быть решением, то, учитывая код, я могу скопировать и вставить его.

Любые вопросы, дайте мне знать, пожалуйста.

3 ответа3

0

Вам нужно создать пользовательскую функцию UDF в VBA и использовать ее как функцию в столбце X. Следующий код создает новый модуль в вашей рабочей книге.

Public Function concatcell(Lookupvalue As String, LookupRange As Range, RowNumber As Integer)
Dim i As Long
Dim J As Long
Dim Result As String
Result = ""
J = LookupRange.Columns.Count
For i = 1 To J

If LookupRange.Cells(RowNumber, i) = Lookupvalue Then
Result = Result & LookupRange.Cells(1, i) & ";"
End If
Next i
concatcell = Result
End Function

В Х2 напишите:
=concatcell(1,$B$1:$L2,ROW())
перетащите его вниз
$ B $ 1:$ L2 - это первые 2 строки, которые заменяют ваши ссылки на данные, но оставьте $ как есть, чтобы автоматически изменить диапазон (строка B содержит метку для возврата) 1 - это значение, которое вы ищете
Row () - это номер строки, который будет автоматически изменяться при его перетаскивании.
Не забудьте сохранить рабочую книгу как включенный макрос (чтобы в следующий раз вы открыли ее)

0

Я думаю, что этого должно быть достаточно.

Формула для строки "a1": =CONCATENATE(O2,IF(B2=1,B$1,"")) которая будет вставлена в 2 столбца справа от последнего столбца в этом примере. Скопируйте эту формулу (с соответствующей ссылкой), а затем вставьте ее во все оставшиеся ячейки после того, как начальная формула будет на месте. Обратите внимание на символ $, это важно для копирования / вставки.

=CONCATENATE(O2,IF(B2=1,B$1,""))

    - ссылка O2 выше, в вашем случае может быть FW , FX , ... или AAB зависимости от того, сколько у вас столбцов, конечно.

Затем просто укажите последний столбец как РЕЗУЛЬТАТ; показывает в нижней половине изображения. В этом примере: =AA2

Вам придется пропустить столбец. Вот скриншот.

-1

Формула, которую вам нужно использовать, довольно проста, хотя и долго. Вот формула (которая должна идти в N2 а затем перетаскиваться до тех пор, пока у вас нет данных):

=IF(B2>0,$B$1&";","")&IF(C2>0,$C$1&";","")&IF(D2>0,$D$1&";","")&IF(E2>0,$E$1&";","")&IF(F2>0,$F$1&";","")&IF(G2>0,$G$1&";","")&IF(H2>0,$H$1&";","")&IF(I2>0,$I$1&";","")&IF(J2>0,$J$1&";","")&IF(K2>0,$K$1&";","")&IF(L2>0,$L$1&";","")&IF(M2>0,$M$1&";","")

(Это немного отличается от вашего примера, потому что я вижу, что вы пропустили заголовок D )

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

Я добавил образец документа с готовой формулой, если вы хотите его увидеть https://1drv.ms/x/s!Ao8EzDmtlA0JhibEB9Wnq4GkXapp

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .