我有多个具有不同标题的列,我想使用列标题跳过几列,不确定它们的位置,它们将在下面的代码的B或C列中 Array(“ A”,“ B”,“ C”,“ D”,“ E”)
下面的代码可以很好地用较高的值(例如filldown)填充空白 请帮助
Sub FillRows()
Const SheetName As String = "Close Price"
Dim lastRow As Long, x As Long, y
Dim arColumns
arColumns = Array("A", "B", "C", "D", "E")
With Worksheets(SheetName)
lastRow = .Rows(Rows.Count).End(xlUp).Row
For x = 3 To lastRow
For y = 0 To UBound(arColumns)
If IsEmpty(.Cells(x, arColumns(y)).Value) Then .Cells(x, arColumns(y)).Value = .Cells(x - 1, arColumns(y)).Value
Next
Next
End With
End Sub
答案 0 :(得分:0)
嗯,没有数据示例,因此我自己编写了一个示例。我仅从A1
和5列开始进行了一系列数据处理。 B列的标题为XYZ
红色单元格为空白单元格。我们想要做的事情是将范围内的所有空白单元格排除,但标头等于XYZ
的列中的空白单元格除外。
因此,我的代码首先获取范围的最后一行,然后立即选择所有空白单元格,然后按1乘1的方式检查标头是否为XYZ
。如果没有,那么它将执行某些操作(在我的代码中,只需打印这些空白单元格的地址即可。)
Dim sCell As Range
Dim LastRow As Long
Dim i As Long
Dim arColumns As Variant
arColumns = Array("A", "B", "C", "D", "E")
'we need to get the real last row of complete range
'so we need to check all columns because it could be
'that last cell of a column is a blank
For i = 0 To UBound(arColumns) Step 1
If Range(arColumns(i) & Rows.Count).End(xlUp).Row > LastRow Then
LastRow = Range(arColumns(i) & Rows.Count).End(xlUp).Row
End If
Next i
Range("A1:E" & LastRow).SpecialCells(xlCellTypeBlanks).Select 'we select all blank cells only
For Each sCell In Selection
If Cells(1, sCell.Column).Value <> "XYZ" Then
'If first cell in this same column IS NOT = XYZ then do something
'You can add to skip extra columns adding OR conditions to IF
Debug.Print sCell.Address(False, False)
End If
Next sCell
执行此代码仅输出空白单元格地址,但它们都不在B列上,因为B列中的标头为XYZ
。
C2
D2
A3
E3
A5
C8
E9
E10
D11
A13
C15
C17
E17
A19
D19
A23
E23
好处是,如果需要,可以在带有OR / AND条件的IF部分中添加额外的检查。如果标头为If Cells(1, sCell.Column).Value <> "XYZ" Or Cells(1, sCell.Column).Value="ABC" Then
或XYZ
ABC
之类的内容将跳过空白单元格
希望您可以根据自己的需要对此进行调整。