繁体   English   中英

有Excel自动在空白行中填充列标题(VBA吗?)

[英]Have Excel Auto Populate Column Headings in Blank Rows (VBA?)

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

             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是否可行。 但是,如果有某种方法可以在没有公式的情况下,或者至少在没有循环引用的情况下,达到相同的结果,那就是我要寻找的。 非常感谢您的协助。

您正在寻找这样的东西:

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

此代码应工作:

之前看过:

我的图片

之后:

我的图片

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. 我的图片

  2. 我的图片

  3. 我的图片

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM