Excel 搜索并将列从sheet1粘贴到sheet2

Excel 搜索并将列从sheet1粘贴到sheet2,excel,vba,Excel,Vba,我尝试从sheet1搜索、复制并粘贴到sheet2。首先,我需要搜索sheet2中某列的值,然后匹配sheet1中的值,然后复制整行,然后将其粘贴到sheet2。例如,我有下面的数据 表2 A B C D E F 1200-24 1201-24 120-24 1218-24

我尝试从sheet1搜索、复制并粘贴到sheet2。首先,我需要搜索sheet2中某列的值,然后匹配sheet1中的值,然后复制整行,然后将其粘贴到sheet2。例如,我有下面的数据

表2

A   B    C         D    E   F
        1200-24                 
        1201-24                 
        120-24                  
        1218-24                 
表1

A  B   C           D     E      F   
2 345  1200-24     ABD   1er    3.4     
3 456  1201-24     CDF   de3    6.6     
7 780  120-24      EFg   d45    9.6 
9 657  1218-24     VGA   9ml    8.7
因此,我希望在第1页上搜索第2页c1中的所有数据,如果匹配,则粘贴到第2行第2页,在第1页上搜索第2页c2中的所有数据,如果匹配,则粘贴到第3行第2页,以此类推

我从该站点找到了以下代码:

Sub SearchForString()

Dim LCopyToRow As Integer


On Error GoTo Err_Execute


'Start copying data to row 2 in Sheet2 (row counter variable)
LCopyToRow = 2

Dim sheetTarget As String: sheetTarget = "sheet2"
Dim sheetToSearch As String: sheetToSearch = "sheet1"
Dim targetValue As String: targetValue = Sheets(sheetTarget).Range("C2").Value  'Value in sheet2!A1 to be searched in sheet1
Dim columnToSearch As String: columnToSearch = "C"
Dim iniRowToSearch As Integer: iniRowToSearch = 2
Dim LSearchRow As Long 'As far as it is not clear the number of rows you will be considering, better relying on the long type
Dim maxRowToSearch As Long: maxRowToSearch = 2000 'There are lots of rows, so better setting a max. limit

If (Not IsEmpty(targetValue)) Then
    For LSearchRow = iniRowToSearch To Sheets(sheetToSearch).Rows.Count

        'If value in the current row (in columnToSearch in sheetToSearch) equals targetValue, copy entire row to LCopyToRow in sheetTarget
        If Sheets(sheetToSearch).Range(columnToSearch & CStr(LSearchRow)).Value = targetValue Then

            'Select row in Sheet1 to copy
            Sheets(sheetToSearch).Rows(LSearchRow).Copy

            'Paste row into Sheet2 in next row
            Sheets(sheetTarget).Rows(LCopyToRow).PasteSpecial Paste:=xlPasteValues

            'Move counter to next row
            LCopyToRow = LCopyToRow + 1
        End If

        If (LSearchRow >= maxRowToSearch) Then
            Exit For
        End If

    Next LSearchRow

    'Position on cell A1
    Application.CutCopyMode = False
    Range("A1").Select

    MsgBox "All matching data has been copied."
End If

Exit Sub

Err_Execute:
MsgBox "An error occurred."

End Sub
但它不允许我在sheet2上从c2移动到c3,也不允许代码LCopyToRow=LCopyToRow+1,不允许移动到sheet2上的下一行。 非常感谢你的帮助。 多谢各位

编辑:
我将行Dim targetValue更改为String:targetValue=sheetsheetTarget.RangeC2.Value->它是范围A2。谢谢

如果您希望将所有单元格从一行复制到另一行,请学习使用匹配和索引功能

match函数将返回与您正在搜索的内容匹配的行号。将match函数放在一列中以定位行。然后使用索引公式从行中复制数据。使用match row column值作为row参数,对所需的每一列重复index函数

这是非常有效的,因为您搜索每个值一次,但通过索引多次复制数据。它也比使用嵌套循环进行查找更快

设置用于链接和提取数据的公式后,可以使用宏记录器将公式存储在代码中,以便可以将公式从上到下复制到电子表格中以传输值。之后,您可以将粘贴值复制到整个工作表中,只留下数据


您还可以将公式保留在第二行中,以便将工作表用作未来副本的模板。然后,您只需粘贴在“搜索值”列中并复制公式即可。我是否提到过,您可以按照与源工作表不同的顺序排列列,也可以随时对新工作表进行排序,并将行正确链接到源数据。

您写过吗?还是录制了宏?对于您所描述的,我将从宏记录器开始。。看看它吐出了什么,然后根据需要调整一下。尝试宏录制器:开始录制,执行搜索/复制/粘贴,然后停止并查看代码。我通过谷歌搜索得到此代码,我没有使用宏,而是使用F8运行它,并逐行调试代码,它显示仅为C2列指定的值,但不会移动到C3,如果手动将目标值更改为C3,LCopytrow不会移动到下一行。谢谢你的回复