2016-06-08 120 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