如何使用以下代码中的列标题跳过几列

时间:2019-04-15 10:10:55

标签: excel vba

我有多个具有不同标题的列,我想使用列标题跳过几列,不确定它们的位置,它们将在下面的代码的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

1 个答案:

答案 0 :(得分:0)

嗯,没有数据示例,因此我自己编写了一个示例。我仅从A1和5列开始进行了一系列数据处理。 B列的标题为XYZ

enter image description here

红色单元格为空白单元格。我们想要做的事情是将范围内的所有空白单元格排除,但标头等于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" ThenXYZ

,诸如ABC之类的内容将跳过空白单元格

希望您可以根据自己的需要对此进行调整。