2016-01-15 127 views
0

我很新的VBA和需要帮助的以下内容:VBA代码从一个单元格复制值到特定的列

  1. 从细胞B3,B4,B5,B6,B7在工作表复制值“工作“
  2. 将单元格的值分别粘贴到工作表”跟踪“中的范围(F2,lastrow),(G2,lastrow),(H2,最后一行),(I2,lastrow),(J2,lastrow)

*工作表“跟踪”中的“lastrow”将始终变化

*细胞B3,B4,B5,B6,B7将总是具有不同的值

例如

表 “工作”

B3 is A1234 
B4 is A 
B5 is B 
B6 is 1 
B7 is XX 

表 “跟踪” LASTROW确定使用为4代码lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

期望的输出如下所示

  F   G   H   I   J 
(Row 1) 
(row 2) A1234  A   B   1   XX 
(row 3) A1234  A   B   1   XX 
(row 4) A1234  A   B   1   XX 

希望有人能帮助我!谢谢!!

发现的解决方案

Sub data_transpose 
Dim i As Integer 
Dim lastrow As Long 
Dim copyRange As Range 
Dim sh As Worksheet 
Set copyRng = Worksheets("WORKING").Range("B3:B7") 
Set sh = Worksheets("TRACKING") 

lastrow = sh.Range("A2", sh.Range("A2").End(xlDown)).Rows.Count + 1 

For i = 2 To lastrow 
copyRng.Copy 
sh.Cells(i, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,  
_SkipBlanks:=False, Transpose:=True 
Next i 

End Sub 
+0

您是否尝试录制宏?这会给你一个开始的好地方 – Johan

+0

尝试过的记录marco,但没有达到我想要的...我正在玩阵列(从这里找到的答案),但它没有达到我想要的。 –

回答

0

这可能会为你

for jj=1 to #number_of_lines_you_want 
for j = 6 to 10 
    for i = 3 to worksheets("WORKING").cells(2,2).End(xlDown).Row 
     lastrow = worksheets("TRACKING").cells(2,j).End(xlDown).Row 
     worksheets("TRACKING").cells(i,j) = worksheets("WORKING").cells(i,2).value 
    next i 
next j 
next jj 

末(xlDown).row会给你的最后一个条目的行工作。

这是怎么回事?

for i = 3 to 7 
worksheets("WORKING").range("B3:B7").Copy 
Worksheets("TRACKING").cells(i,6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=True 
+0

嗨!我厌倦了代码,但它似乎只添加了一行。我编辑了我的问题,也许它可能会使它更清晰我想实现的目标。 –

+0

你知道多少次要添加行到“跟踪”? –

+1

您好faurillou,你的方法让我思考转置,向下移动,我找到了一个可行的解决方案! –

0

这里是一个选项,让你开始:

Sub CopyData() 
    Dim copyRng As Range, cl As Range, col As Integer, lastRow As Integer 

    Set copyRng = Worksheets("Working").Range("B3:B7") 
    col = 6 ' Denotes column F 

    With Worksheets("Tracking") 
     lastRow = .Cells(Rows.Count, "F").End(xlUp).Row 

     For Each cl In copyRng 
      .Range(.Cells(2, col), .Cells(lastRow, col)) = cl 
      col = col + 1 
     Next cl 
    End With 
End Sub 
+0

嘿亚历克斯!!!我尝试了你的代码,但它似乎只添加在最后一行..你的想法让我想通过设置'dim row as integer'然后在 '对于行= 1到lastrow 对于每个CL在copyRng targetRng.offset(0,列)= CL 山坳=山坳+ 1 接下来CL 未来row' 太糟糕了它不工作就意味着有什么错我的代码会..你能帮忙吗? –

+0

@IsabelLim - 查看更新的代码。我认为这实现了你所需要的。 –

+0

嘿亚历克斯thx这么多的帮助!你的方法让我思考vba的基础!哈哈我发现了一个可行的解决方案,以满足我的需求..绝对不是优雅,但仍然是我想要的 –

相关问题