我正在尝试在excel中创建一个循环,但是我被卡住了。
我的循环的目的是 - 浏览一系列值,例如A1:A8760并将其插入单元格,例如B10 - 对于每个值范围,我想保存输出并将其复制到新列中,例如C.
我试图录制一个宏并从中创建一个循环。但它出错了,
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。
添加了更正后的版本
答案 0 :(得分:1)
抱歉 - 现在编辑,我在我的机器上运行它 应该
myRange.Cells(i, j).Select
我认为应该这样做,我还没有真正检查它是否在逻辑层面工作,只是确保它编译。 你有两条线。
如果我没有弄错的话 - 我还是新手帮助别人,
中的字符串Range("myRange.Cells(i, j)").Select
有问题 - 您必须使用'&'添加变量。在这样的代码中:
Range("myRange.Cells(" & i & ", " & j & ")").Select
希望有所帮助。
答案 1 :(得分:0)
你正在使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
答案 2 :(得分:0)
据我了解,O10中有一个公式,其中包含一个或多个包含D10的先例。这意味着当新值进入D10时,新结果位于O10中,并且您希望将该结果保存到新列中。
最快的方法是将AJ4:AJ8763中的所有值收集到变量数组中。循环遍历VBA中的变量数组,并使用数学和函数重新计算值,就像O10中的公式一样。
完成后,只需将变量数组中的新值放回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
我使用了一个非常简单的计算作为实际工作应该发生的占位符。与循环每个单元格相比,以这种方式运行代码的速度非常快,将其复制到新位置,然后获取公式的结果并将其粘贴到新列中。