EXCEL:在循环遍历列以更改数字格式时,如何忽略多个标题行?

时间:2012-04-04 03:20:19

标签: excel excel-vba vba

以下代码正常运作。它将遍历工作表中的所有列,并根据第2行中找到的数字将其中的数据更改为固定长度的数量。

我的问题是它在执行此操作时会选择整个列。这对我来说是一个问题,因为我有4个标题行,我不想转换。

我的第一个想法是偏移/调整选择大小并对所有单元格应用更改,但我只是没有运气。

任何人都可以修改此代码,以便在它通过列的过程中忽略前4个标题行吗?

注意:lastCol是一个单独的函数,它只返回一个整数值,其中包含工作表中最后一个使用过的列的编号。

Sub FormatFixedNumber()

    Dim i As Long

    Application.ScreenUpdating = False

    For i = 1 To lastCol 'replace 10 by the index of the last column of your spreadsheet
        With Columns(i)
            .NumberFormat = String(.Cells(2, 1), "0") 'number length is in second row
        End With
    Next i
    Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

这应该这样做。我添加了一个常量来保持标题行计数。

编辑:添加代码以按要求转到最后一行。还检查LastRow是否大于HEADER_ROWS。并修复了调整大小/偏移中的一些复杂的HEADER_ROWS加法和减法。

Sub FormatFixedNumber()
Const HEADER_ROWS As Long = 4
Dim i As Long
Dim LastRow As Long

Application.ScreenUpdating = False
For i = 1 To LastCol    'replace 10 by the index of the last column of your spreadsheet
    With Columns(i)
        LastRow = .Cells(Rows.Count).End(xlUp).Row
        If LastRow > HEADER_ROWS Then
            With .Resize(LastRow - HEADER_ROWS).Offset(HEADER_ROWS)
                .NumberFormat = String(.EntireColumn.Cells(2, 1), "0")    'number length is in second row
            End With
        End If
    End With
Next i
Application.ScreenUpdating = True
End Sub