Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 搜索列名并复制数据_Excel_Vba - Fatal编程技术网

Excel 搜索列名并复制数据

Excel 搜索列名并复制数据,excel,vba,Excel,Vba,我的第一个工作簿工作表中有7列,我想将它们复制到第二个工作簿工作表中的相应列中 我需要的列的列号可能会更改。因此,我不想通过诸如w=“B”之类的列来声明变量。相反,我希望搜索名称为“LineID”的列,如果名称与列名匹配,则将数据复制到其他工作簿工作表中的列 第1页中的这些列不整齐,因为它们之间有许多列。列的顺序也会根据输入数据的管理员而改变。因此,我想搜索带有名称的列,并获取下面的数据。然后把它复制到另一张纸上 我通过指定要复制的每个列来复制数据,但如果列发生更改,我必须返回代码并更改列值。相

我的第一个工作簿工作表中有7列,我想将它们复制到第二个工作簿工作表中的相应列中

我需要的列的列号可能会更改。因此,我不想通过诸如w=“B”之类的列来声明变量。相反,我希望搜索名称为“LineID”的列,如果名称与列名匹配,则将数据复制到其他工作簿工作表中的列

第1页中的这些列不整齐,因为它们之间有许多列。列的顺序也会根据输入数据的管理员而改变。因此,我想搜索带有名称的列,并获取下面的数据。然后把它复制到另一张纸上

我通过指定要复制的每个列来复制数据,但如果列发生更改,我必须返回代码并更改列值。相反,如果通过标题来标识列,则会更容易


我不擅长VBA,非常感谢您提供的任何帮助。

您可以将以下代码复制并粘贴到新模块中。它可以放在新工作簿中,也可以放在您要复制到/从中复制的任何一本工作簿中

如内联注释中所述,您需要更新Set wsSrc和Set wsDest行以匹配工作簿和工作表名称

要使其在无需进一步修改的情况下工作,您需要打开两个工作簿(从源复制的工作簿和粘贴到目标的工作簿)。此外,您的标题需要位于第1行

Workbook1 - Sheet 1:
Unique ID (Column D) | Line ID (Column Q) | Date1 (Column AL) | Date2 (Column AN) | Date3 (Column AO)| Date4 (Column AP)| Date5 (Column AQ)

Workbook 2 - Sheet 2: 
Unique ID (Column B) | Line ID (Column C) | Date1 (Column E) | Date2 (Column F) | Date3 (Column G)| Date4 (Column H)| Date5 (Column I)

不需要VBA。您可以使用
MATCH
功能确定列;和
INDEX
返回该列中的所有行。
Option Explicit

Public Sub CopyData()

    ' DECLARE VARIABLES
    Dim i As Integer            ' Counter
    Dim j As Integer            ' Counter
    Dim colsSrc As Integer      ' Source worksheet columns
    Dim colsDest As Integer     ' Destination worksheet columns
    Dim rowsSrc As Long         ' Source worksheet rows excluding header
    Dim wsSrc As Worksheet      ' Source worksheet
    Dim wsDest As Worksheet     ' Destination worksheet
    
    ' SET VARIABLES
    Set wsSrc = Workbooks("Source.xlsx").Sheets("Sheet1")           ' Source worksheet (change Source.xlsx and Sheet1 to match your workbook name and worksheet name)
    Set wsDest = Workbooks("Destination.xlsx").Sheets("Sheet1")     ' Destination worksheet (change Destination.xlsx and Sheet1 to match your workbook name and worksheet name)
    colsSrc = wsSrc.Cells(1, Columns.Count).End(xlToLeft).Column    ' Source worksheet columns (assumes header is row 1)
    colsDest = wsDest.Cells(1, Columns.Count).End(xlToLeft).Column  ' Destination worksheet columns (assumes header is row 1)
    rowsSrc = wsSrc.Range("A1").CurrentRegion.Rows.Count - 1        ' Source worksheet rows excluding header (assumes header is row 1
    
    ' COPY DATA FROM SOURCE WORKSHEET TO DESTINATION WORKSHEET _
    - Compares each column header in your destination workbook to each column in your source workbook _
    - If a match is found, copies the column from the source workbook and pastes it into the destination workbook
    For i = 1 To colsDest
        For j = 1 To colsSrc
            If wsSrc.Cells(1, j) = wsDest.Cells(1, i) Then
                wsSrc.Cells(2, j).Resize(rowsSrc, 1).Copy wsDest.Cells(2, i)
                Exit For
            End If
        Next j
    Next i

End Sub