Excel VBA数组求和问题:外部工作簿单元格复制后数量缩减
问题解答:修改数组实现单元格求和
嘿,我来帮你理清楚这个问题!首先得说,你尝试的Array("C6"+"C7","C8","C9")这种写法行不通——这里的+号会把两个字符串直接拼接成"C6C7",Excel根本不会把它当成求和公式来解析,反而会变成一个无效的单元格引用或者文本。
下面给你两种可行的解决思路,根据你的实际需求选就行:
思路1:在数组中存储求和公式字符串
如果希望把数组内容写入活动工作簿后,单元格能自动计算求和(甚至后续原单元格数值变化时也能同步更新),你需要把数组元素写成Excel公式的格式:
' 把原来的"C6"替换成带等号的求和公式 cls = Array("=C6+C7", "C8", "C9")
当你把这个数组写入活动工作簿的单元格区域时,Excel会自动识别并计算C6+C7的结果,完美替代原来单个C6的位置,同时还能保持公式的动态性。
思路2:直接在数组中存储求和后的数值
如果不需要动态更新,只想把原工作簿中C6和C7的求和结果作为静态值存入数组,那可以在VBA里先计算好数值再放进数组:
' 先定义原工作簿对象(替换成你实际的工作簿名称) Dim sourceWB As Workbook Set sourceWB = Workbooks("你的可变工作簿.xlsx") ' 直接计算求和值后存入数组 Dim cls As Variant cls = Array( _ sourceWB.Sheets("目标工作表").Range("C6").Value + sourceWB.Sheets("目标工作表").Range("C7").Value, _ sourceWB.Sheets("目标工作表").Range("C8").Value, _ sourceWB.Sheets("目标工作表").Range("C9").Value _ ) ' 把数组写入活动工作簿的单元格区域(示例写入A1开始的列) ThisWorkbook.Sheets("你的活动工作表").Range("A1").Resize(UBound(cls) + 1, 1).Value = Application.Transpose(cls)
这种方式得到的数组里都是具体的数值,复制到活动工作簿后就是静态值,不会随原工作簿数据变化而改变。
另外关于你提到的“复制后单元格数量减少”的问题,用上面两种方式修改数组后,相当于把两个单元格的内容合并成一个数组元素,刚好能对应复制后减少的数量,完美解决这个匹配问题~
内容的提问来源于stack exchange,提问作者Remi
相关产品推荐
相关产品推荐

