当没有数据重新发送且未输入0时,宏循环将数据从工作表拉到工作表

时间:2016-06-29 09:35:57

标签: excel vba excel-vba spreadsheet

我试图从“订单”中获取第15行中的行G,H和I中的数据(在没有数据时停止),将其粘贴到M列中名为“数据”的工作表中,Q和R从第8行开始。

我试过录制一个宏,但是当这个数据每天都在变化时,我的录制宏保持不变,我不知道如何在没有数据的情况下在宏中放置一个IF公式来阻止它在原始细胞中。有一天,数据将从订单中的第15行到第50行,接下来的15到71(始终从15开始)。当我做200行的宏,所以它确实覆盖了所有行,无论它可能有多少行,当订单单元格中没有任何行时,它会在数据表中放置零。如果订单单元格中没有数字,我希望它留空。

e.g。 “订单表”列粘贴到“数据表”(从订单表上的第15行开始,数据表上的第8行) G到M / H到Q / 我到R

e.g。 G15到M8 / H16至Q9 / I17到R10

将基本录像机宏视为一个想法。

提前致谢

ActiveWindow.SmallScroll Down:=-15
Range("M8").Select
ActiveCell.FormulaR1C1 = "='Order Sheet'!R[7]C[-6]"
Range("M8").Select
Selection.AutoFill Destination:=Range("M8:M159"), Type:=xlFillDefault
Range("M8:M159").Select
ActiveWindow.SmallScroll Down:=-135
Range("Q8").Select
ActiveCell.FormulaR1C1 = "='Order Sheet'!R[7]C[-9]"
Range("Q8").Select
Selection.AutoFill Destination:=Range("Q8:Q159"), Type:=xlFillDefault
Range("Q8:Q159").Select
ActiveWindow.SmallScroll Down:=-132
Range("R8").Select
ActiveCell.FormulaR1C1 = "='Order Sheet'!R[7]C[-9]"
Range("R8").Select
Selection.AutoFill Destination:=Range("R8:R159"), Type:=xlFillDefault
Range("R8:R159").Select
ActiveWindow.SmallScroll Down:=-123
Range("I3").Select

1 个答案:

答案 0 :(得分:1)

以下是将所有值从G15向下复制到M8向下的方法

Dim sourceSht As Worksheet 'sheet you want to copy from 
Dim targetSht As Worksheet 'sheet you want to copy too
Dim sourceRng As Range 'what you want to copy
Dim targetRng As Range 'where you want to copy to
Dim lastRow As Long 'the last row that holds data

Set sourceSht = Sheets("Order Sheet")
Set targetSht = Sheets("Data")

With sourceSht
    lastRow = .Cells(.Rows.Count,7).End(xlUp).Row '7 is the column number
End With

Set sourceRng = sourceSht.Range("G15:G" & lastRow)
Set targetRng = targetSht.Range("M8").Resize(sourceRng.Rows.Count, 1) ' Range("M8:M"& lastRow - 7) would also be possible
targetRng.Value = sourceRng.Value

您可能希望引入变量来保存列索引和行号(如15和8)。您还可以让范围包含多个列,以便一次复制更多数据。