Справка Excel - ЕСЛИ данные в указанном c диапазоне ячеек, ТО возвращают заголовки столбцов в той же ячейке - PullRequest
0 голосов
/ 30 января 2020

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

Я приложил изображение, чтобы лучше показать, что я имею в виду, на рисунке Я просто ввел даты. Я хотел бы формулу, может быть, VBA? это может сделать это для меня, но это оказывается сложнее, чем я думал.

Какой конечный результат должен выглядеть

Очень ценю любую помощь! Спасибо

** редактировать: я нашел формулу, которая работает, но будет невероятно долго. Конечно, есть способ объединить и сократить?

= IF (C5 <> 0, TEXT (C1, "dd / mm") & "|", "") & IF (D5 <> 0, TEXT (D1, "dd / mm") & "|", "") & IF (E5 <> 0, TEXT (E1, "dd / mm"), "")

Приведенный выше код работает только в 3 столбца тоже ... Не требуется 60 плюс!

1 Ответ

0 голосов
/ 30 января 2020

Вставьте этот код в модуль и в ячейку B2 введите =IFERROR(getNonBlankCells($C$1:$K$1,C2:K2),"") и перетащите его вниз до B5.

Function getNonBlankCells(Rng1 As Range, Rng2 As Range) As Variant
    Dim i As Integer, j As Integer, n As Integer, test As String
    Dim A As Variant, B As Variant, ret(), newret(), t As Integer, p As Integer
    n = Rng1.Columns.Count
    ReDim ret(1 To n, 0)
    A = Rng1.Value2
    B = Rng2.Value2
    i = 1
    For j = 1 To n
        If B(1, j) <> "" Then
            ret(i, 0) = A(1, j)
            i = i + 1
        End If
    Next j
    ReDim newret(LBound(ret) To UBound(ret))
    For t = LBound(ret) To UBound(ret)
        If ret(t, 0) <> "" Then
            p = p + 1
            newret(p) = ret(t, 0)
        End If
    Next t
    ReDim Preserve newret(LBound(newret) To p)
    getNonBlankCells = Join(newret, ", ")
End Function
...