You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用For循环生成数据存入数组并输出至工作表的问题

修正后的VBA代码(实现索引+数据存入数组并输出到工作表)

原代码仅将计算后的月租金存入数组,未添加索引编号,且缺少将数组输出到工作表的逻辑,以下是修正后的完整代码:

Option Explicit

Sub MonthlyObligation()
    Dim ws As Worksheet
    Set ws = Sheets("Page 1")
    
    ' 读取基础参数
    Dim BaseTerm As Integer, OptionCount As Integer, OptionTerm As Integer
    BaseTerm = ws.Range("LeaseTerm").Value
    OptionCount = ws.Range("RenewalOptions").Value
    OptionTerm = ws.Range("TermPerOption").Value
        
    Dim TotalTerm As Long
    TotalTerm = (BaseTerm + OptionCount * OptionTerm) / 12
    
    ' 定义数组:第一列存索引编号,第二列存租金数据
    Dim arr() As Variant
    ReDim arr(1 To TotalTerm, 1 To 2)
    
    Dim MonthlyBaseRent As Double, AnnualRiser As Double
    MonthlyBaseRent = ws.Range("BaseRent").Value
    AnnualRiser = ws.Range("RentIncrease").Value
    
    Dim i As Long
    For i = 1 To TotalTerm
        ' 存入当前行的索引编号
        arr(i, 1) = i
        ' 存入当前月的租金金额
        arr(i, 2) = MonthlyBaseRent
        
        ' 控制台输出验证(可选)
        Debug.Print "索引:" & arr(i, 1) & " | 租金:" & arr(i, 2)
        
        ' 计算下一期的租金(最后一次循环无需计算,不影响结果)
        MonthlyBaseRent = MonthlyBaseRent * (1 + AnnualRiser)
    Next i
    
    ' 将数组一次性写入工作表(从A1单元格开始)
    ws.Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub

关键修改说明

  • 数组维度扩展:将原数组从1列调整为2列,分别用于存储索引编号和租金数据,满足需求。
  • 移除冗余循环:删除原代码中无意义的内层j循环,直接在i循环内完成赋值,简化代码结构。
  • 修复租金计算顺序:原代码首次循环就直接计算增长后的租金,导致初始租金丢失。调整为先存入当前租金,再计算下一期租金,保证数据完整。
  • 添加工作表输出逻辑:使用Resize方法匹配数组的行列数,一次性将数组写入工作表,大幅提升执行效率。

内容的提问来源于stack exchange,提问作者Squid1622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:57:28