复制多个工作表列中的仅值单元格并粘贴到一列中

时间:2012-12-22 18:19:10

标签: excel vba

我需要在一个特别命名的工作表上复制从“S4”开始的列的多个电子表格,我只需要包含数据的该列中的单元格(从S4开始及其下面的所有内容)。

我需要复制该数据并将其粘贴到我的“主”电子表格中,从特定工作表上的A2开始。我可以用一个电子表格做到这一点,但是我遇到的问题我需要VBA找到A列中有一个值的最后一个单元格并开始将新数据粘贴到它下面的单元格中等等...否则,当它是查看其他电子表格,它只是覆盖了我的主电子表格中的数据。

你会注意到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

2 个答案:

答案 0 :(得分: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

我检查A2是否为空,如果是,我粘贴第一批数据。

如果A2不为空,我会在A列中找到下一个空单元格并将其粘贴到那里。

答案 1 :(得分: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)