2012-03-29 6 views
1

私はExcelを頻繁に使用していませんが、これを行うにはかなり簡単な方法が必要です。私は、あるシートから別のシートにデータを貼り付けることを含む多くの他の解決策を検討しましたが、(1)シートを別のシートにセルをマッチングさせ、次に(2)条件付きでデータを追加または連結する単純に貼り付けるのではなく、1つのシートから別のシートにExcelデータの行を条件付きで追加するにはどうすればよいですか?

私は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). 

申し訳ありませんが、この質問を形成するより良い方法があれば。私は自分自身をサークルで考えることができましたが、今は混乱したナイジェル・トゥフネルを私の顔に見せているような気がします。

[更新:コピーするセルを明確にするために更新しました。]

+0

一致が行Xで発見された場合、あなたはそれを追加したいです行Z?すなわち(n + 2)の位置で、nはXと同じです。私の理解は正しいですか? –

+0

ご迷惑をおかけして申し訳ございません。 "Sheet1 ColumnA RowX"によって私はちょうど "Sheet2 ColumnA Row1"からのデータと一致するすべての行を参照しています。 – Bijan

+0

あなたがappendと言うとき、Cellに "SAMPLE1"があれば "SAMPLE1 SAMPLE2"のように追加するべきですか? –

答えて

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 
関連する問題