Excel VBA:如何创build循环并保存范围内的每个值的输出?

我试图在Excel中创build一个循环,但我卡住了。

我的循环的目的是 – 通过一系列的值,例如A1:A8760,并插入单元格,例如B10 – 对于每个值的范围,我想保存输出并将其复制到一个新的列,例如C.

我试图logging一个macros,并从中创build一个循环。 但它只是错了,

gg = 1 Dim myRange As Range Dim i As Long, j As Long Set myRange = Range("AJ4:AJ8763") For i = 1 To myRange.Rows.Count For j = 1 To myRange.Columns.Count myRange.Cells(i, j).Select Selection.Copy Range("D10").Select ActiveSheet.Paste Range("O7").Select Application.CutCopyMode = False Selection.Copy myRange.Cells(i, j + gg).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next j Next i End Sub 

上面的代码示例是我迄今为止添加的内容。 所以我的想法是通过从AJ4到AJ8763的一系列值,并将其插入到单元格D10中。接下来的步骤是复制单元格O7的输出并将其插入单元格AK4到AK8763。

添加了更正版本

据我所知,在O10有一个公式,有一个或多个先例,包括D10。 这意味着当一个新值进入D10时,新的结果在O10中,并且你想把结果保存到一个新的列中。

最快的方法是将AJ4:AJ8763中的所有值收集到variables数组中。 循环访问VBA中的variables数组,并使用math和函数重新计算值,就像O10中的公式一样。

完成后,只需将variables数组中的新值删除回AK4:AK8763即可。

 Dim rws As Long, cls As Long, v As Long, vAJs As Variant rws = 8760 cls = 1 With ActiveSheet vAJs = .Range("AJ4").Resize(rws, cls).Value2 For v = LBound(vAJs) To UBound(vAJs) 'something with Application.NPV on next line vAJs(v, 1) = vAJs(v, 1) * 2 'simple computation. If you need help with this line, show us the formula being used in O10. Next v .Range("AK4").Resize(rws, cls) = vAJs End With 

我使用了一个非常简单的计算作为占位符,以实际工作应该发生的地方。 以这种方式运行你的代码相比于循环遍历每个单元格,将其复制到一个新的位置,然后拿起公式的结果并将其粘贴到一个新的列中快速致盲。

对不起 – 现在编辑,我运行在我的机器上应该

 myRange.Cells(i, j).Select 

我认为这应该做到这一点,我没有实际检查它是否在逻辑层面上工作,只是确保它编译。 你有两条这样的线。


如果我没有弄错 – 我还是一个帮助别人的新手

 Range("myRange.Cells(i, j)").Select 

是有问题的 – 你必须在这样的代码中添加“&”的variables:

 Range("myRange.Cells(" & i & ", " & j & ")").Select 

希望有所帮助。

你用myRange使事情变得不必要复杂,试试这个:

 Sub S() Dim i As Long, j As Long For i = 1 To 8763 For j = 36 To 36'AJ=36 Cells(i, j).Select Selection.Copy Range("D10").Select ActiveSheet.Paste Range("O7").Select Application.CutCopyMode = False Selection.Copy Cells(i, j).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next j Next i End Sub