我有一个看起来像这样的电子表格:
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。但是如果有一些方法可以在没有公式的情况下实现相同的结果,或者至少没有循环引用,那就是我正在寻找的。非常感谢您的帮助。
答案 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)
此代码应该有效:
见之前:
之后:
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的新手,可以快速了解如何运行程序: