[英]VBA: Deleting rows that have a blank in a certain column and making a button in Excel
[英]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的新手,那么这里是快速快速介绍如何运行程序的信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.