【问题标题】:Return column headers if cells are empty如果单元格为空,则返回列标题
【发布时间】:2017-06-28 01:54:17
【问题描述】:

工作表有大约 100 个列标题和 800 多行。我想使用一个函数或创建一个宏来获取列标题并将这些标题汇总在一个单独的列中,用逗号分隔。

以上面截图的第 2 行为例,Criteria 2、Criteria 5 和 Criteria 7 为空。我想在名为“Missing”的列中显示这些缺失的条件,值为“Criteria 2, Criteria 5, Criteria 7”。

【问题讨论】:

  • 向我们展示您尝试过的内容以及遇到问题的地方。如果您有 Excel 2016,则可以使用 TEXTJOIN 函数而无需 VBA。

标签: vba excel multiple-columns


【解决方案1】:

此代码添加新工作表,并显示结果。

Sub test()
    Dim Ws As Worksheet, outWs As Worksheet
    Dim vDB, vR(), vResult()
    Dim r As Long, c As Long, i As Long, j As Long

    Set Ws = ActiveSheet
    With Ws
        r = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        c = .Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
        vDB = .Range("a1", .Cells(r, c))
    End With
    ReDim vResult(1 To r, 1 To 4)
    For i = 1 To r
        n = 0
        For j = 1 To c
            If j < 4 Then
                vResult(i, j) = vDB(i, j)
            End If
            If IsEmpty(vDB(i, j)) Then
                n = n + 1
                ReDim Preserve vR(1 To n)
                vR(n) = vDB(1, j)
            End If
        Next j
        vResult(i, 4) = Join(vR, ",")
    Next i
    vResult(1, 4) = "Missing"
    Set outWs = Sheets.Add '<~~ your specific sheets : Sheet("your sheet name")
    With outWs
        .Range("a1").Resize(r, 4) = vResult
        .Columns.AutoFit
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多