2012-03-29 131 views
1

我不经常使用Excel,但我希望有一个相当直接的方法来解决这个问题。我研究了一些涉及将数据粘贴到另一个表格的其他解决方案,但我找不到任何可以让我(1)将单元格从一个表单匹配到另一个单元格,然后(2)有条件地追加或连接数据而不是简单地粘贴它。如何有条件地将一行Excel数据从一张表格附加到另一张表格中?

我有两张数据的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). 

对不起,如果有更好的方式来形成这个问题。我设法认为自己在圈子里,现在我觉得我的脸上有一种令人困惑的奈杰尔·图弗内尔。

[更新:更新澄清细胞被复制]

+0

如果行X中找到匹配的,那么你想将其添加到行Z?即在(n + 2)的位置,其中n与X相同。我的理解是否正确? – 2012-03-29 17:34:48

+0

抱歉,文字混乱。通过“Sheet1 ColumnA RowX”我只是指任何与“Sheet2 ColumnA Row1”中的数据相匹配的行。 – Bijan 2012-03-29 18:36:47

+0

当你说追加时,你是说如果单元格有“SAMPLE1”,那么它应该追加到它,所以它看起来像“SAMPLE1 SAMPLE2”? – 2012-03-29 19:02:38

回答

2

我觉得这是什么你想干什么?

该代码未经测试。我相信它应该起作用。如果你得到任何错误,让我知道,我们将会把它在那里形成...

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 

HTH

希德

0

这应该工作:

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 
相关问题