如何用VBA计算Excel单个单元格内逗号分隔数值的总和?
如何用VBA计算Excel单元格中逗号分隔的两个数值之和
你的代码存在的问题
WorksheetFunction.Replace返回的是字符串(比如把"2,1"变成"2+1"),但你直接把它赋值给Integer类型的am22,会触发类型不匹配错误。WorksheetFunction.Sum无法直接计算字符串形式的表达式(比如"2+1"),它需要的是数值或单元格区域参数。- 代码中引用了未定义的对象
fvs_temp3,运行时会提示对象未找到的错误。
两种可行的解决方法
方法1:拆分字符串后逐值相加
用Split函数把逗号分隔的字符串拆分成数组,再将每个元素转为数值后求和:
txtstr = ThisWorkbook.Worksheets(1).Cells(i, 30).Value ' 拆分字符串为数组 Dim numArr As Variant numArr = Split(txtstr, ",") ' 计算两个数值的和 result = Val(numArr(0)) + Val(numArr(1))
方法2:用Evaluate计算表达式字符串
把逗号替换成加号后,用Evaluate函数直接计算表达式结果:
txtstr = ThisWorkbook.Worksheets(1).Cells(i, 30).Value ' 替换逗号为加号,得到表达式字符串 Dim expr As String expr = Replace(txtstr, ",", "+") ' 计算表达式结果 result = Evaluate(expr)
修正后的完整代码
同时优化代码,避免使用Activate和Select(这类操作容易出错且效率低):
Sub combination(i As Integer) Dim fvs_temp8 As Workbook Dim rc As Integer rc = ThisWorkbook.Worksheets(1).Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row Dim all As Workbook Set all = Workbooks.Open(ThisWorkbook.Path & "\" & "Reference_files\AMP Template_V1.0_V2.0_V2.1_09052023.xlsx") Set fvs_temp8 = Workbooks.Open(ThisWorkbook.Path & "\" & "Reference_files\Template_v_24062020.xls") ' 注意:需补充fvs_temp3的定义与赋值,示例如下(根据实际文件调整) Dim fvs_temp3 As Workbook ' Set fvs_temp3 = Workbooks.Open(ThisWorkbook.Path & "\" & "你的目标文件.xlsx") ' extra discount's Dim txtstr As String Dim result As Double ' 用Double避免整数溢出问题 txtstr = ThisWorkbook.Worksheets(1).Cells(i, 30).Value ' 用方法1计算和 Dim numArr As Variant numArr = Split(txtstr, ",") result = Val(numArr(0)) + Val(numArr(1)) ' 或者用方法2: ' Dim expr As String ' expr = Replace(txtstr, ",", "+") ' result = Evaluate(expr) If result = 3 Then Dim cr201 As Integer cr201 = fvs_temp3.Worksheets("sheet1").Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row ' 直接操作对象,避免Activate/Select all.Worksheets("Additions").Range("A84:DZ84").Copy fvs_temp3.Worksheets("sheet1").Range("A" & cr201 + 1).PasteSpecial Application.CutCopyMode = False ' 清除剪切板 End If End Sub
注意事项
- 如果单元格中可能出现非数值内容,建议增加错误处理(比如用
IsNumeric判断拆分后的元素是否为数值)。 - 务必补充
fvs_temp3的定义与赋值,否则代码无法正常运行。
内容的提问来源于stack exchange,提问作者Seenu Gochalam
相关产品推荐
相关产品推荐

