【问题标题】:Can't understand how to use for...next loops in Excel VBA无法理解如何在 Excel VBA 中使用 for...next 循环
【发布时间】:2017-09-28 10:14:31
【问题描述】:

我知道这段代码可以很容易地重写为使用循环,但我不能。

k1 = (exk - 3 * increment)
k2 = k1 + 0.01
k3 = k2 + 0.01
k4 = k3 + 0.01
k5 = k4 + 0.01
k6 = k5 + 0.01
k7 = k6 + 0.01
Cells(7, 2).Value = k1

Cells(8, 2).Value = k2

Cells(9, 2).Value = k3

Cells(10, 2).Value = k4

Cells(11, 2).Value = k5

Cells(12, 2).Value = k6

Cells(13, 2).Value = k7  

【问题讨论】:

  • for <variable> = <start> to <end> {step <increment>} for y=7 to 12:cells(y,2)=k1:k1=k1+0.01:next y

标签: vba excel for-loop


【解决方案1】:

你在这里:

Sub Rewrite_Code()
    Dim k() As Double
    Dim i As Integer
    Const x = 7
    ReDim k(x)

    k1 = (exk - 3 * increment)
    'Redim Preserve k(i+1) '(this can using when program situation interactively changes)
    For i = 1 To x
        k(i + 1) = k(i) + 0.01
        ActiveSheet.Cells(i + 6, 2).Value = k(i)
    Next i
End Sub 'Rewrite

【讨论】:

  • 每次都需要redim吗? Dim arr() As Double: Const x = 7: ReDim arr(x):for I=1 to x
  • Nathan_Sav,对。谢谢。根据您的通知,我修改了代码。
  • @Nathan_Sav,使用Preserve 方法为初学者准备机密情况并扩大指导。他们可以根据您在未来体验中的建议来提高性能。我建议编程新手使用这个定位。
  • @MGae2M 你忘了to x tho :)
  • 另外,不挑错,一个数组可以直接放到一个范围内。所以activesheet.cells(7,2).resize(x,1).value=arr 应该把一个放回工作表来完成这项工作。
【解决方案2】:

也许这就是你的意思?

Const FirstRow As Long = 7
Dim K1 As Double
Dim i As Long

K1 = 13                 ' your formula is (exc - 3) * increment
For i = 1 To 7
    Cells(i + FirstRow - 1, 2).Value = K1
    K1 = K1 + 0.01
Next i

【讨论】:

    【解决方案3】:
    Option Explicit
    
    Public Sub ForNext()
        Dim ws As Worksheet, r As Long, arr As Variant, exk As Long, increment As Long
    
        Set ws = ThisWorkbook.Worksheets("Sheet1")      'set the name of your Worksheet
    
        exk = 5 
        increment = 1
    
        arr = ws.Range(ws.Cells(7, 2), ws.Cells(13, 2)) 'copy range to array
    
        arr(1, 1) = (exk - 3) * increment               'set first array item
    
        For r = 2 To 7
            arr(r, 1) = arr(r - 1, 1) + 0.01            'set the rest of the items
        Next
    
        ws.Range(ws.Cells(7, 2), ws.Cells(13, 2)) = arr 'copy array back to range
    End Sub
    

    • 将范围复制到数组(B7:B13);数组 (B7) 中的第一项从索引 1 开始 - arr(1, 1)
    • 将数组中的第一个元素设置为您的公式:arr(1, 1) = (exk - 3) * increment
    • 遍历数组的其余部分,根据前一个值递增每个元素
    • 将数组放回范围

    【讨论】:

      【解决方案4】:

      一维数组样本

      Sub test()
          Dim exk, increment
          Dim vResult()
          Dim i As Integer
          exk = 5  'setting your value
          increment = 2 'setting your value
      
          ReDim vResult(1 To 7) 'array one dimension
          vResult(1) = exk - 3 * increment
          For i = 2 To 7
              vResult(i) = vResult(i - 1) + 0.01
          Next i
          Range("b7").Resize(7) = WorksheetFunction.Transpose(vResult)
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2019-11-03
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多