Excel VBA从不同的工作表复制特定的列

时间:2018-07-24 07:58:02

标签: excel vba excel-vba

我目前正在使用VBA在Excel中开发监视工具,并且在复制数据时遇到了一些困难。

当前代码:

Sub CopyID()
    'Copies entire Row of IDs from "Sheet 2" to main Sheet "Main Sheet"

    Dim lastCell As Long
    LastCell = Cells(Rows.Count,'Sheet 2':M).End(xlUp).Row

    'Missing here: Copy to Column 1 at Row 3!

    Sheets("Sheet 2").Columns(M).Copy Destination:=Sheets("Main Sheet").Columns(1)

End Sub

应该做什么: 从第2行开始复制Sheet2_Column M的数据 至 主表列A在第3行发声

此外,我也不知道是否可以为目的地使用特定的公式(格式为:=LEFT(Data,10)

对于对此的任何响应,我感到很高兴,因为我想详细了解这些“复制方法”的工作方式,并对有关这些方法的任何提示和技巧感到高兴。

编辑// 复制部分应该像这样

Sheet 2包含一个具有标头单元格的Colum和具有相似格式值的X单元格。

工作表2内容示例

Example of the Sheet 2 Contents

这是工作表2中的一行。我只需要单元格内容的前10位。是否可以将其作为类似于

的公式
=Left(Sheet 2:M2,10)

所以它是这样的:

“工作表2”单元格内容:“ 1234567891_1_123X”复制为“ 1234567891”到“主工作表”

1 个答案:

答案 0 :(得分:0)

定义源和目标工作表。范围/列名称也可以像"M"这样的字符串提交。

Sub CopyID()
    'Copies entire Row of IDs from "Sheet 2" to main Sheet "Main Sheet"
    Dim WsSource As Worksheet
    Set WsSource = ThisWorkbook.Worksheets("Sheet 2")    

    Dim WsDestination As Worksheet
    Set WsDestination = ThisWorkbook.Worksheets("Main Sheet")    


    Dim lastRow As Long
    lastRow = WsSource.Cells(WsSource.Rows.Count, "M").End(xlUp).Row

    'Missing here: Copy to Column 1 at Row 3!

    WsSource.Range("M2:M" & lastRow).Copy Destination:=WsDestination.Range("A3")
End Sub

编辑:

要仅复制每个单元格的前10个字符,则需要对每个值进行处理:

Option Explicit

Public Sub CopyID()
    'Copies entire Row of IDs from "Sheet 2" to main Sheet "Main Sheet"
    Dim WsSource As Worksheet
    Set WsSource = ThisWorkbook.Worksheets("Sheet 2")

    Dim WsDestination As Worksheet
    Set WsDestination = ThisWorkbook.Worksheets("Main Sheet")

    Dim lastRow As Long
    lastRow = WsSource.Cells(WsSource.Rows.Count, "M").End(xlUp).Row 'Find last row in column M

    Dim ArrSource As Variant
    ArrSource = WsSource.Range("M2:M" & lastRow).Value 'read column m values into array

    Dim i As Long
    For i = 1 To UBound(ArrSource) 'process each value in the array
        ArrSource(i, 1) = Left$(ArrSource(i, 1), 10) 'keep only left 10 characters
    Next i

    WsDestination.Range("A3").Resize(UBound(ArrSource), 1).Value = ArrSource 'write array into destination
End Sub

注意.Resize(UBound(ArrSource), 1)定义的目标与我们要插入的数组大小相同。