excel - 更改单元格范围以覆盖列中的所有数据
问题描述
我在我的 excel 表中创建了一个宏
宏的目的是将一列中的单元格一一(L1,L2 ...)复制到特定单元格(A1)中。然后在计算完成后,将另一个单元格 E2 中的值复制到 L 旁边的列,意思是 M1,M2...
我不知道如何将这些步骤循环到列中的所有单元格。
Sub Checking_Frequences()
'
' Checking_Frequences Macro
'
'
Range("L1").Select
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
Range("E2").Select
Application.CutCopyMode = False
Selection.Copy
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("L2").Select
Application.CutCopyMode = False
Selection.Copy
Range("A1").Select
ActiveSheet.Paste
Range("E2").Select
Application.CutCopyMode = False
Selection.Copy
Range("M2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
有没有办法添加延迟,以便 excel 在从 E2 复制结果之前完成计算?
有什么建议吗?
问候
解决方案
你的工作簿可以做一点组织升级。我可能没有按照你最喜欢的方式完成它,但我认为下面的代码会让你向前迈出一大步。将其安装在标准代码模块中并仅运行过程WriteArrays。花时间首先了解它是如何工作的。
Sub WriteArrays()
' 043
' number of results wanted from each Base
Const Iterations As Integer = 5 ' adjust to suit
Const TgtTab As String = "Sheet3" ' Output tab (change to suit)
Const TgtRow As Long = 2 ' modify to suit
Const TgtClm As Long = 4 ' first output column (modify to suit)
Dim Src As Variant ' array of source Base numbers
Dim R As Long ' SrcRng row counter
Dim WsTgt As Worksheet ' Target worksheet (for output)
Dim Arr As Variant ' value to write to sheet
Dim Operand As Double ' calculated by a formula
Dim i As Long ' loop counter
Operand = 2 ^ (1 / 12) ' = 1.0594630943593 (adjust to suit)
With Worksheets("Frequencies")
' set the range L1:L(last used row) - modify to suit
' read all values into an array
Src = .Range(.Cells(1, "L"), .Cells(.Rows.Count, "L").End(xlUp)).Value
End With
Set WsTgt = Worksheets(TgtTab)
For R = LBound(Src) To UBound(Src)
Arr = BaseArray(Src(R, 1), Operand, Iterations)
With WsTgt.Cells(TgtRow, TgtClm - 1 + R).Resize(UBound(Arr))
.Value = Application.Transpose(Arr)
.NumberFormat = "0.00"
End With
' If R = 5 Then Exit For
Next R
End Sub
Private Function BaseArray(ByVal Base As Double, _
ByVal Operand As Double, _
ByVal Iterations As Integer) As Variant
' 043
Dim Fun As Variant ' function return value
Dim i As Integer
ReDim Fun(1 To Iterations)
For i = LBound(Fun) To UBound(Fun)
Fun(i) = Base
Base = Round(Base * Operand, 2)
Next i
BaseArray = Fun
End Function
您必须设置代码顶部的 4 个常量。最后 3 个处理输出。您要求在同一张纸上的 M 列中输出。但是此代码将添加 235 列。所以我认为最好开始一个新的工作表。您可以使用不同的参数轻松地多次运行代码并将结果输出到不同的工作表上。但它们必须在代码运行之前存在。
Const Iterations
指定每列中有多少行。您似乎想要 50。我只测试了 5。修改此常量以满足您的需要。
再往下一点Operand
是从您的单元格 C1 中获取的公式。它可以改变。
当然,Frequencies选项卡必须存在,并且 L 列中必须有数字。您可以从第 2 行而不是第 1 行开始。但是如果您想限制输出,您可能想利用我使用的方法,在这里If R = 5 Then Exit For
:(在 Next ../.. For 循环的末尾)。如果您通过删除前导撇号来启用该行,它只会在列表中的 5 个数字之后减少循环。
我祝你事业成功:-)
推荐阅读
- ios - 在不使用设备设置的情况下将应用设置为具有亮/暗模式
- git - 在两个分支之间生成补丁格式
- javascript - 有什么方法可以在消费者超时后自动启动 eventthub 订阅?
- python - 如何将多个图像列表按列打印到 .PDF 文件?
- json - Postman 可视化和使用 Handlebars 进行迭代
- reactjs - Next JS - 如何使用 next-transpile-modules 解析路径?
- maven - 使用 Maven Tycho 和 Eclipse RCP 构建客户端应用程序分发
- sequence-diagram - 序列图中前端页面之间的交互
- c# - 未应用 DbSet 的动态包含操作
- visual-studio-code - 如何禁用特定扩展的 vscode-code-runner?