2

「S4」から始まる列を特定の名前のワークシートにコピーする必要がある複数のスプレッドシートがあり、データを含むその列のセル(S4とその下のすべて)のみが必要です。

そのデータをコピーして、特定のワークシートのA2から始まる「メイン」スプレッドシートに貼り付ける必要があります。これは1つのスプレッドシートで実行できますが、発生している問題は、A列の最後のセルで値があり、その下のセルに新しいデータの貼り付けを開始するためにVBAが必要です。他のスプレッドシートを見ると、メインのスプレッドシートのデータを上書きしているだけです。

S4:S2000の指定された範囲に気付くでしょう-その目的は単一のスプレッドシート用でした。2000年以降のデータはなかったので問題なく機能しましたが、実際にはセル値を探してそれらを取得する必要があります。

これは私が問題を抱えているコードのチャンクです。A2から検索して(列ヘッダーをスキップして)、値を持つ最後のセルを探し、S4から始まる値のセルを他のワークシートに貼り付けます。

On Error Resume Next
        Set wbkCS = Workbooks.Open(strCutSheetFile(i))
        On Error GoTo 0
    If Not wbkCS Is Nothing Then
        With wbkVer.Sheets("Cutsheets")
             .Range(.Cells(2,1)).End(xlUp).Row = wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Value

保護されたファイルを使用しているため、少し調整する必要がありましたが、これは機能しました。

Set copyRng1 = Worksheets("Cutsheets").Range("A2")

If copyRng1 = "" Then
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Locked = False
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy Destination:=wbkVer.Worksheets("Cutsheets").Range("A2")
    Else
        wbkCS.Worksheets("Cut Sheet").Range("S4:S2000").Copy Destination:=wbkVer.Worksheets("Cutsheets").Range("A" & wbkVer.Worksheets("Cutsheets").Range("A65536").End(xlUp).Row + 1)

    End If
4

2 に答える 2

0

これが正しい方向にあなたを押すかもしれない例です...

ブック内の他のすべてのワークシートのデータをSheet1使用してデータを集約するとします。S4:S2000

Sub CopyAndStack()
    Dim wkShtIndex As Integer, copyRng As Range

    Set copyRng = Worksheets(1).Range("A2")

    For wkShtIndex = 2 To Worksheets.Count
        If copyRng = "" Then
            Worksheets(wkShtIndex).Range("S4:S2000").Copy Destination:=copyRng
        Else
            Worksheets(wkShtIndex).Range("S4:S2000").Copy Destination:=Range("A" & copyRng.End(xlDown).Row + 1)
        End If
    Next wkShtIndex
End Sub

I check if A2 is empty and if so I paste the first lot of data.

If A2 is not empty I get the next empty cell in column A and paste it there.

于 2012-12-22T19:16:52.707 に答える
0

Sに入力された行を正確に取得する方法は次のとおりです。

Dim StrRange As String

. . .

'Get range
strRange = "S4:S" & Worksheets(wkShtIndex).UsedRange.Columns("S:S").Rows.Count  
'Do something with range
Worksheets(wkShtIndex).Range(strRange)
于 2012-12-22T20:47:56.410 に答える