让Excel自动填充空行的列标题(VBA?)

时间:2018-05-16 15:32:26

标签: excel vba excel-vba excel-formula automation

我有一个看起来像这样的电子表格:

             A       B       C       D       E       F       
    1     Program  Year    Cycle   Date    Panel  Mtg Rep
    2       AAA    2019      1     5/21     ABA     Tom
    3       AAA    2019      1     5/23     ABB     Erin
    4
    5       BBB    2019      2     6/4      BAB     Jim
    6
    7       CCC    2019      3     7/16     CAB     Tom
    8       CCC    2019      4     8/27     CBB     Kate
    9
    10

我想要做的是,每次跳过一行时,该空白行将自动填充列标题。因此,在上面的示例表中,第4行和第6行将包含列标题,而第9行将保持空白,直到在第10行输入信息为止。我已经完成了我能想到的所有可能的搜索,并且没有找到任何内容似乎适用。我对VBA不太熟悉,所以我提出了以下一系列公式:

A3) =IF(AND($A2<>"",$A4<>"",$A2<>$A$1),$A$1,"")
B3) =IF(A3=A$1,B$1,"")
C3) =IF(B3=B$1,C$1,"")
D3) =IF(C3=C$1,D$1,"")
E3) =IF(D3=D$1,E$1,"")
F3) =IF(E3=E$1,F$1,"")

然后将这些公式扩展到工作表的其余部分。这就是我想要它做的事情,但它也用公式填充8,000多个单元格,包括循环引用。除了必须处理被提醒的循环引用外,它们还会影响我的工作表的其他方面,例如条件格式,识别重复的条目等。

正如我所说,我对VBA并不是很熟悉,所以我甚至不知道这是否可以使用VBA。但是如果有一些方法可以在没有公式的情况下实现相同的结果,或者至少没有循环引用,那就是我正在寻找的。非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这就是你要找的东西:

Sub tgr()

    Dim ws As Worksheet
    Dim rHeaders As Range
    Dim rDest As Range
    Dim ACell As Range

    Set ws = ActiveWorkbook.ActiveSheet
    Set rHeaders = ws.Range("A1:F1")

    For Each ACell In ws.Range("A1", ws.Cells(ws.Rows.Count, "A").End(xlUp)).Cells
        If Len(Trim(ACell.Value)) = 0 Then
            If Not rDest Is Nothing Then
                Set rDest = Union(rDest, ACell)
            Else
                Set rDest = ACell
            End If
        End If
    Next ACell

    If Not rDest Is Nothing Then rHeaders.Copy rDest

End Sub

答案 1 :(得分:0)

此代码应该有效:

见之前:

MyImage

之后:

MyImage

Sub addHeaders()

Dim ws As Worksheet
    Set ws = Sheets("Sheet3")

Dim lastRow As Integer
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Dim header As Range
    Set header = ws.Range("A1:F1")

For rowNum = 2 To lastRow
    If ws.Cells(rowNum, 1) = "" Then
        If ws.Cells(rowNum + 1, 1) <> "" Then
             ws.Range("A" & rowNum & ":F" & rowNum) = header.Value
         End If
     End If
Next rowNum
End Sub

既然你说你是vba的新手,可以快速了解如何运行程序:

  1. MyImage

  2. MyImage

  3. MyImage