如何在VBA数组中存储Excel公式并实现批量赋值操作?
在VBA数组中存储Excel公式并实现批量操作
当然可以在VBA数组里存储Excel公式,直接通过单元格的.Formula属性提取公式存入数组,就能完成你需要的批量操作。
原代码的问题
- 你原来的
Econ() = Range("C4:C350")存储的是单元格计算后的值,不是公式 - 代码中
Range(Econ(0))是错误用法:直接用Range赋值的数组默认索引从1开始,而且你需要的是公式而非单元格引用 - 每次固定复制到
E4,没有对应迭代的行,无法匹配当前处理的C列单元格
修正后的代码
Sub Macro_data_check() Dim Econ() As String '用字符串数组存储公式更精准 Dim i As Long Dim targetCells As Range '指定要处理的C列单元格范围 Set targetCells = ThisWorkbook.ActiveSheet.Range("C4:C350") '根据单元格数量初始化数组大小 ReDim Econ(1 To targetCells.Cells.Count) '遍历C列单元格,将公式存入数组 For i = 1 To targetCells.Cells.Count Econ(i) = targetCells.Cells(i).Formula Next i '执行批量操作:写入公式到I1,复制S1值到对应E列 For i = 1 To UBound(Econ) '将数组中的公式写入I1 ThisWorkbook.ActiveSheet.Range("I1").Formula = Econ(i) '等待Excel完成公式计算,确保S1值为最新 DoEvents '如果S1不为0,将值复制到对应E列单元格(C4对应E4,以此类推) If ThisWorkbook.ActiveSheet.Range("S1").Value <> 0 Then ThisWorkbook.ActiveSheet.Range("E" & 3 + i).Value = ThisWorkbook.ActiveSheet.Range("S1").Value End If Next i End Sub
代码说明
- 使用
String类型数组存储公式,避免变体类型的潜在问题 - 全程不用
Select和Paste操作,直接通过.Formula和.Value赋值,提升运行效率和稳定性 - 动态匹配C列单元格数量,后续范围变更无需修改循环参数
DoEvents确保Excel完成I1的公式计算后,再获取S1的最新值
内容的提问来源于stack exchange,提问作者Josh H
相关产品推荐
相关产品推荐

