使用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
相关产品推荐
相关产品推荐

