Excel 如何在一个范围内循环一个方程式?

Excel 如何在一个范围内循环一个方程式?,excel,vba,Excel,Vba,我正在excel程序中插入一个按钮。我希望它做两件事:第一,遍历范围中的每一行,并使一列中的单元格(I)等于另一列(H);第二,我想重新计算第一列(H) Sub Button3_Click() With worksheets("data") Dim lr as Long lr = .Cells(.Rows.Count,"H").End(xlUp).Row With .Range("I17:I" & lr) .value = .offset(

我正在excel程序中插入一个按钮。我希望它做两件事:第一,遍历范围中的每一行,并使一列中的单元格(I)等于另一列(H);第二,我想重新计算第一列(H)

Sub Button3_Click()

With worksheets("data")

    Dim lr as Long
    lr = .Cells(.Rows.Count,"H").End(xlUp).Row

    With .Range("I17:I" & lr)
         .value = .offset(,-1).Value
         .calculate 
    End With

End Sub
我已经能够让它工作一排,但我正在努力循环通过范围,需要一些帮助

Sub Button3_Click()

Worksheets("data").Range("i17").Value = Worksheets("data").Range("h17").Value
    Range("h17").Calculate

End Sub

我正在寻找一种实现上述功能的方法,但不适用于范围(i17:列末尾):-/

下面的代码将在H列中找到最后一行数据,并将使用范围内的所有值设置为等于H列,然后重新计算

Sub Button3_Click()

With worksheets("data")

    Dim lr as Long
    lr = .Cells(.Rows.Count,"H").End(xlUp).Row

    With .Range("I17:I" & lr)
         .value = .offset(,-1).Value
         .calculate 
    End With

End Sub

使用以下命令复制值

Worksheets("data").Range("i17").Resize(n,1).Value = _
                               Worksheets("data").Range("h17").Resize(n,1).Value
其中
n
是受影响的行数

然后您可以使用

Worksheets("data").Range("h17").Resize(n,1).Calculate
此外,要查找
n
,请使用以下命令

Dim r as Range, n as Long
Set r = Worksheets("data").Range("h17")
n = r.Worksheet.Range(r, r.End(xlDown)).Rows.Count

r.Offset(0,1).Resize(n,1).Value = r.Resize(n,1)
r.Resize(n,1).Calculate

当设置H列的值等于I列时,H列将如何计算?没有计算公式。嗨,斯科特,我有一个选择(randbetween(1,…。在h中,所以当我单击按钮时,我希望h的值移到I,然后在h中出现一个新值,我可以再次单击按钮!不要像在
范围(“I17:I”&lr)
中那样使用字符串数学。正确的方法是使用
.Offset()
范围
对象下的
.Resize()
.Cells()
方法。它更易于维护和理解,如果单元格移动,它也不会损坏。最后,逐个写入每个值会导致每次重新计算,并降低速度。为什么不使用一次写入操作一次复制整个表呢。