5

スプレッド シートがあり、データが含まれている最後の列を探す必要があります。次に、この列をコピーして、次の空白の列にコピーする必要があります。

これを行う方法はありますか?

私は次を使用して行でそれを行うことができました:

lastrowSrc = Sheets("Overview").Range("B" & Rows.Count).End(xlUp).Row

ただし、これにより B12 が範囲内に配置されます。columns.count を使用すると、文字ではなく列の番号が単純に入力されます。

4

2 に答える 2

6

ワークシートの正確な列を取得するには、次のコードを使用します。

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim LastCol As Long

    Set ws = Sheets("Sheet1")

    '~~> This check is required else .FIND will give you error on an empty sheet
    If Application.WorksheetFunction.CountA(ws.Cells) = 0 Then
        LastCol = 1
    Else
        LastCol = ws.Cells.Find(What:="*", _
                After:=ws.Range("A1"), _
                Lookat:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByColumns, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False).Column
    End If

    Debug.Print LastCol
End Sub

編集:これは@brettdjの好意によるものです。範囲オブジェクトを使用して最後の列を見つけることもできます

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim LastCol As Long
    Dim rng As Range

    Set ws = Sheets("Sheet1")

    Set rng = ws.Cells.Find(What:="*", _
                After:=ws.Range("A1"), _
                Lookat:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByColumns, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False)

    If rng Is Nothing Then
        LastCol = 1
    Else
        LastCol = rng.Column
    End If

    Debug.Print LastCol
End Sub

特定の行の最後の列を取得するには、行 1 と言ってこれを使用します

    Debug.Print ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

ws は関連するワークシートです。

同様に行については、これを参照してください。

于 2012-08-09T12:26:19.713 に答える
0

ワークシートの他の行よりも短い行が最後にいくつかあるワークシートでは、一部の回答が機能しないことがわかりました。提供されたコードは、ワークシートの最後の行の最後の列を提供するだけです。代わりに、コードのループを使用して行の最後の列を検索し、Find の例を使用してブックの最後の行を取得しました。

Sub Sample()
    Dim ws As Worksheet
    Dim CurrRow, RowLastCol, LastRow, LastCol As Long

    Set ws = Sheets("Sheet1")

    '~~> This check is required else .FIND will give you error on an empty sheet
    If Application.WorksheetFunction.CountA(ws.Cells) = 0 Then
        LastCol = 1
    Else
        LastCol = 0
        LastRow = ws.Cells.Find(What:="*", _
                After:=ws.Range("A1"), _
                Lookat:=xlPart, _
                LookIn:=xlFormulas, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False).Row
        ' Loop through all the rows of the sheet saving off the highest column count
        For CurrRow = 1 to LastRow
            RowLastCol = ws.Cells(CurrRow, Columns.Count).End(xlToLeft).Column
            If RowLastCol > LastCol Then
                LastCol = RowLastCol
            End If
        Next CurrRow
    End If

    Debug.Print LastCol
End Sub
于 2016-08-23T21:46:10.597 に答える