2016-06-08 124 views
0

我無法解決這個問題。我將rowA2:C2中的單元格從一張紙複製到另一張紙上,但我想根據填充在相鄰的columnD上的單元格將它們粘貼到多個rows中。我可以使用適當的範圍填充columnD。 我的問題是如何確定範圍長度並粘貼細胞A2:C2很多次。這是我試圖寫的代碼。我declared所有的variables之前。這是我遇到問題的代碼的一部分。謝謝你們! Excel Sheet Here根據excel vba中的範圍多次粘貼一行

lastrow1 = Sheets("ResourcesLib").Range("A" & Rows.Count).End(xlUp).row 

For i = 1 To lastrow1 
    resources = Sheets("ResourcesLib").Cells(i, "A").Value 
    Sheets("sheet3").Activate 
    lastrow2 = Sheets("sheet3").Range("B" & Rows.Count).End(xlUp).row 

For j = 2 To lastrow2 
    If Sheets("sheet3").Cells(j, "B").Value = resources Then 
     Sheets("ResourcesLib").Activate 
     NoCell = rsrcl.Cells(i, rsrcl.Columns.Count).End(xlToLeft).Column 
     rsrcl.Range(rsrcl.Cells(i, 2), rsrcl.Cells(i,rsrcl.Cells(i,Columns.Count).End(xlToLeft).Column)).Copy 
     rsrca.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
     Sheets("sheet3").Activate 
     Sheets("sheet3").Cells(j, "A").Copy 
     rsrca.Range(Cells(k, 1), Cells(m + (NoCell - 1), 1)).PasteSpecial 
     Sheets("sheet3").Cells(j, "B").Copy 
     rsrca.Range(Cells(k, 2), Cells(m + (NoCell - 1), 2)).PasteSpecial 
     Sheets("sheet3").Cells(j, "C").Copy 
     rsrca.Range(Cells(k, 3), Cells(m + (NoCell - 1), 3)).PasteSpecial 
    End If 

Next j 
k = (NoCell - 2) + k 
m = k 
Application.CutCopyMode = False 
Next i 
+0

聽起來像你在這裏有一個真正的問題,你可以擴展代碼中發生的事情,我遵循'NoCell'和'rsrcl'。 –

+0

@GaryEvans所以在rsrcl之後,單元格從該表單複製並粘貼到rsrca列D(轉置)中。這條線後是問題。我需要從「Sheet3」複製單元格A3:C3單元格(j = 3),並將rsrca A粘貼到C列,但粘貼多次,直到上一步中粘貼列「D」(轉置)的末尾。我希望你有個想法。 所以我做的是我複製單元格指定範圍與NoCell作爲for循環的上限,但似乎不工作。 我可以發送給您ecel文件以便更好地理解。謝謝! – adr0327

+0

非常抱歉,在這裏我沒有足夠的理解你在嘗試什麼,希望別人能比我更好地跟着它。 –

回答

0

這應該爲你做。

Sub Transfer() 

Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long, Lastcolumn As Long, k As Long, m As Long 
Dim Firstrow As Long, Lastrow As Long, NoCell As Long 
Dim activity As String, resources As String 
Dim rsrcl As Worksheet, rsrca As Worksheet 
Dim aRsrclRange 
Dim iRangeLength 
Dim lastrowtemp As Long 

Set rsrcl = Sheets("ResourcesLib") 
Set rsrca = Sheets("Resources") 
k = 2 
m = 1 
NoCell = 2 
iRangeLength = 1 ' default to 1 for the lines that only have a single value ... they won't be arrays 

'Adding Resources to activities 
lastrow1 = Sheets("ResourcesLib").Range("A" & Rows.Count).End(xlUp).row 

For i = 1 To lastrow1 
    resources = Sheets("ResourcesLib").Cells(i, "A").Value 
    Sheets("sheet3").Activate 
    lastrow2 = Sheets("sheet3").Range("B" & Rows.Count).End(xlUp).row 
    For j = 2 To lastrow2 
     If Sheets("sheet3").Cells(j, "B").Value = resources Then 
      Sheets("ResourcesLib").Activate 
      NoCell = rsrcl.Cells(i, rsrcl.Columns.Count).End(xlToLeft).Column 
      rsrcl.Range(rsrcl.Cells(i, 2), rsrcl.Cells(i, rsrcl.Cells(i, Columns.Count).End(xlToLeft).Column)).Copy 'put range into clipboard for paste transpose 
      aRsrclRange = rsrcl.Range(rsrcl.Cells(i, 2), rsrcl.Cells(i, rsrcl.Cells(i, Columns.Count).End(xlToLeft).Column)) 'put range into array for ubound calculation 
      If IsArray(aRsrclRange) Then iRangeLength = UBound(aRsrclRange, 2) 'get the length of the range that was copied 
      rsrca.Range("D" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Transpose:=True 
      Sheets("sheet3").Activate 
      Sheets("sheet3").Range(Cells(j, "A"), Cells(j, "C")).Copy 'Copy a through c at the same time since you are pasting them in a row 
      lastrowtemp = Sheets("Resources").Range("B" & Rows.Count).End(xlUp).row 'get current last row on resources 
      While iRangeLength > 0 'paste on last line number of times equal to array length 
       lastrowtemp = lastrowtemp + 1 
       rsrca.Activate 
       If IsArray(aRsrclRange) Then 
        rsrca.Range(Cells(lastrowtemp, 1), Cells(lastrowtemp, UBound(aRsrclRange, 2))).PasteSpecial 
       Else 
        rsrca.Range(Cells(lastrowtemp, 1), Cells(lastrowtemp, 1)).PasteSpecial 
       End If 
       iRangeLength = iRangeLength - 1 
      Wend 
      iRangeLength = 1 'back to 1 for the lines with only 1 value 
     End If 
    Next j 
    k = (NoCell - 2) + k 
    m = k 
    Application.CutCopyMode = False 
Next i 
End Sub 
+0

你是一個天才! – adr0327

+0

樂意幫忙! :-)希望這些評論會告訴你如何完成下一次你自己做到的。 :-) – Rodger