Excel VBA 如何通过循环实现sourceSheet到AcctSheet的指定单元格值复制
VBA代码循环简化方案
你的需求中sourceSheet第14行第38列,依次对应AcctSheet第11列第27行,列号和行号差值固定为1,可直接通过单循环遍历实现,无需重复编写判断逻辑。
原代码中的sourceSheet.Activate属于冗余操作,所有单元格已明确指定所属工作表,无需激活工作表即可操作,还能避免工作表切换带来的异常问题。
简化后代码
Dim baseVal As Variant ' 提前提取基准值,避免循环中重复读取单元格提升效率 baseVal = sourceSheet.Cells(7, 1).Value Dim i As Integer ' 遍历sourceSheet第14行需要操作的3~8列 For i = 3 To 8 If IsEmpty(sourceSheet.Cells(14, i).Value) Then ' 源单元格为空时赋值基准值 AcctSheet.Cells(i - 1, 11).Value = baseVal Else ' 非空时取两者较小值,等价于原有三层If判断逻辑 AcctSheet.Cells(i - 1, 11).Value = WorksheetFunction.Min(sourceSheet.Cells(14, i).Value, baseVal) End If Next i
如果不想调用工作表函数,也可以将Else分支替换为普通判断,效果完全一致:
Else If sourceSheet.Cells(14, i).Value < baseVal Then AcctSheet.Cells(i - 1, 11).Value = sourceSheet.Cells(14, i).Value Else AcctSheet.Cells(i - 1, 11).Value = baseVal End If End If
逻辑说明
- 循环变量
i对应sourceSheet第14行的列号,取值范围3~8完全覆盖需要操作的单元格范围 i-1刚好匹配AcctSheet第11列的目标行号(3-1=2,8-1=7,完全符合给出的一一对应规则)- 提前把
sourceSheet.Cells(7,1)的值存入变量baseVal,减少重复读取单元格的操作,代码执行效率更高
内容的提问来源于stack exchange,提问作者Magpie737
相关产品推荐
相关产品推荐

