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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Vba 如何有条件地将一行Excel数据从一个工作表附加到另一个工作表?_Vba_Excel_Excel Formula - Fatal编程技术网

Vba 如何有条件地将一行Excel数据从一个工作表附加到另一个工作表?

Vba 如何有条件地将一行Excel数据从一个工作表附加到另一个工作表?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我不经常使用Excel,但我希望有一个相当简单的方法来解决这个问题。我查看了许多其他涉及将数据从一个工作表粘贴到另一个工作表的解决方案,但我找不到任何允许我(1)将单元格从一个工作表匹配到另一个工作表,然后(2)有条件地附加或连接数据,而不是简单地将其粘贴在上面的解决方案 我有一个Excel文档和两张数据表。两张图纸都包含一个数字ID列。 我基本上需要将Sheet2中的ID匹配到Sheet1,然后将Sheet2中的行数据附加到Sheet1中的匹配行。我可以想象它会像这样: If Sheet2 C

我不经常使用Excel,但我希望有一个相当简单的方法来解决这个问题。我查看了许多其他涉及将数据从一个工作表粘贴到另一个工作表的解决方案,但我找不到任何允许我(1)将单元格从一个工作表匹配到另一个工作表,然后(2)有条件地附加或连接数据,而不是简单地将其粘贴在上面的解决方案

我有一个Excel文档和两张数据表。两张图纸都包含一个数字ID列。 我基本上需要将Sheet2中的ID匹配到Sheet1,然后将Sheet2中的行数据附加到Sheet1中的匹配行。我可以想象它会像这样:

If Sheet2 ColumnA Row1 == Sheet1 ColumnA RowX
  Copy Sheet2 Row1 Columns
  Paste (Append) to Sheet1 RowX (without overwriting the existing columns).
很抱歉,如果有更好的方式来形成这个问题。我一直在想我自己,现在我觉得我脸上有一种困惑的奈杰尔·塔夫奈尔的表情

[更新:更新以澄清要复制的单元格。]

这应该可以:

For Each cell2 In Sheet2.UsedRange.Columns(1).Cells
    For Each cell1 In Sheet1.UsedRange.Columns(1).Cells
        If cell2.Value = cell1.Value Then
            Sheet1.Range("B" & cell1.Row & ":Z" & cell1.Row).Value = Sheet2.Range("B" & cell2.Row & ":Z" & cell2.Row).Value
        End If
    Next cell1
Next cell2

我想这就是你想要做的

代码未经测试。我相信它应该起作用。如果你有任何错误,让我知道,我们将采取它的形式在那里

Sub Sample()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim ws1LR As Long, ws2LR As Long
    Dim i As Long, j As Long, LastCol As Long
    Dim ws1Rng As Range, aCell As Range
    Dim SearchString

    Set ws1 = Sheets("Sheet1")
    '~~> Assuming that ID is in Col A
    '~~> Get last row in Col A in Sheet1
    ws1LR = ws1.Range("A" & Rows.Count).End(xlUp).Row
    '~~> Set the Search Range
    Set ws1Rng = ws1.Range("A1:A" & ws1LR)

    Set ws2 = Sheets("Sheet2")
    '~~> Get last row in Col A in Sheet2
    ws2LR = ws2.Range("A" & Rows.Count).End(xlUp).Row

    '~~> Loop through the range in Sheet 2 to match it with the range in Sheet1
    For i = 1 To ws2LR
        SearchString = ws2.Range("A" & i).Value

        '~~> Search for the ID
        Set aCell = ws1Rng.Find(What:=SearchString, LookIn:=xlValues, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

        '~~> If found
        If Not aCell Is Nothing Then
            LastCol = ws2.Cells(i, ws2.Columns.Count).End(xlToLeft).Column

            '~~> Append values
            For j = 2 To LastCol
                ws1.Cells(aCell.Row, j).Value = ws1.Cells(aCell.Row, j).Value & " " & ws2.Cells(i, j).Value
            Next j
        End If
    Next i
End Sub


Sid

如果在第X行中找到匹配项,则是否要将其添加到第Z行?i、 e位于(n+2)的位置,其中n与X相同。我的理解正确吗?对不起,让人困惑。我所说的“Sheet1 ColumnA RowX”只是指与“Sheet2 ColumnA Row1”中的数据相匹配的任何行。当你说“附加”时,你的意思是如果单元格有“SAMPLE1”,那么它应该附加到单元格中,使其看起来像“SAMPLE1 SAMPLE2”?