1

以下のコードは機能しています。シート内のすべての列を処理し、その中のデータを 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
4

1 に答える 1

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
于 2012-04-04T03:34:14.647 に答える