Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 错误13-类型不匹配将两列添加到一起_Excel_Vba - Fatal编程技术网

Excel 错误13-类型不匹配将两列添加到一起

Excel 错误13-类型不匹配将两列添加到一起,excel,vba,Excel,Vba,我猜我不能逃脱这个 Workbooks(ms).Sheets(fm).Range("H1:H50000").Value = Workbooks(ss).Sheets(cl).Range("I1:I50000").Value + Workbooks(ss).Sheets(cl).Range("J1:J50000").Value 试图使新列成为其他两个列中的值之和。为什么它不让我 此外,下面的工作刚刚好。就在我尝试添加两列时: Workbooks(ms).Sheets(fm).Range("A1:

我猜我不能逃脱这个

Workbooks(ms).Sheets(fm).Range("H1:H50000").Value = Workbooks(ss).Sheets(cl).Range("I1:I50000").Value + Workbooks(ss).Sheets(cl).Range("J1:J50000").Value
试图使新列成为其他两个列中的值之和。为什么它不让我

此外,下面的工作刚刚好。就在我尝试添加两列时:

Workbooks(ms).Sheets(fm).Range("A1:A50000").Value = Workbooks(ss).Sheets(cl).Range("M1:M50000").Value

Range.value是一种变体类型,或者基本上是一个数组。在下面的示例中,您所做的是将一个数组(A列)复制到另一个数组(M列)中

然而,数组操作并没有扩展到对数组中的值进行算术运算,就像您期望从第一个示例中得到的那样。那么,对数组求和的最佳方法是什么

事实证明,即使您使用VBA编程,您也可以访问全部Excel函数,并且Excel非常擅长对范围进行数学运算。我的建议选项是将H设置为如下公式:

Workbooks(ms).Sheets(fm).Range("H1:H50000").Formula = "='[ss]cl'!I1+'[ss]cl'!J1"
如果要将单元格设置为值,请添加第2行:

Workbooks(ms).Sheets(fm).Range("H1:H50000").Value2 = Workbooks(ms).Sheets(fm).Range("H1:H50000").Value2

Range.value是一种变体类型,或者基本上是一个数组。在下面的示例中,您所做的是将一个数组(A列)复制到另一个数组(M列)中

然而,数组操作并没有扩展到对数组中的值进行算术运算,就像您期望从第一个示例中得到的那样。那么,对数组求和的最佳方法是什么

事实证明,即使您使用VBA编程,您也可以访问全部Excel函数,并且Excel非常擅长对范围进行数学运算。我的建议选项是将H设置为如下公式:

Workbooks(ms).Sheets(fm).Range("H1:H50000").Formula = "='[ss]cl'!I1+'[ss]cl'!J1"
如果要将单元格设置为值,请添加第2行:

Workbooks(ms).Sheets(fm).Range("H1:H50000").Value2 = Workbooks(ms).Sheets(fm).Range("H1:H50000").Value2

我想你可能需要做一个数组。我认为错误是因为虽然您可以设置
范围(A1:A10).Value
=
范围(B1:B10).Value
,但尝试执行
…=范围(B1:B10)。值+范围(C1:C10)。值
,VBA并不真正了解发生了什么

请尝试在每个单元格中循环:

Dim i As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Workbooks(ss).Sheets(cl)
    For i = 1 To 50000
        Workbooks(ms).Sheets(fm).Range("H" & i).Value = .Range("I" & i).Value + .Range("J" & i).Value
    Next i
End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

我想你可能需要做一个数组。我认为错误是因为虽然您可以设置
范围(A1:A10).Value
=
范围(B1:B10).Value
,但尝试执行
…=范围(B1:B10)。值+范围(C1:C10)。值
,VBA并不真正了解发生了什么

请尝试在每个单元格中循环:

Dim i As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Workbooks(ss).Sheets(cl)
    For i = 1 To 50000
        Workbooks(ms).Sheets(fm).Range("H" & i).Value = .Range("I" & i).Value + .Range("J" & i).Value
    Next i
End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic


在VBA中,您需要单独处理每一行。在这种情况下,OP不需要处理每一行,而是输出一列。Excel VBA可以使用Excel函数以本机方式处理此问题,而不是在VBA中循环代码50000次。在VBA中,您需要单独处理每一行。在这种情况下,OP不需要处理每一行,而是输出一列。Excel VBA可以使用Excel函数以本机方式处理此问题,而不是像我所想的那样循环代码。有点瘸,我得绕个圈。。。VBA不够先进,我想:p@dwirony-我刚刚更新了一个
with
语句,将其缩短了一点。是的,我相信有一种更优雅的方式(如下面@Scott建议的公式),但您也需要添加对工作簿/工作表的引用。我只是很懒,做了这件事,哈哈。您甚至可以进一步使用Scott's,并在执行此操作时使用
EVALUATE
,将表格输出中的所有公式一起删除。是的,您可以使用EVALUATE来解决此问题:
myRange.Value=EVALUATE(“[”&ss&“]”&cl&“!I1:I50000+”[“&ss&“]”&cl&“!J50000”)
其中myRange的设置与我的想法完全一致。有点瘸,我得绕个圈。。。VBA不够先进,我想:p@dwirony-我刚刚更新了一个
with
语句,将其缩短了一点。是的,我相信有一种更优雅的方式(如下面@Scott建议的公式),但您也需要添加对工作簿/工作表的引用。我只是很懒,做了这件事,哈哈。您甚至可以进一步使用Scott's,并在执行此操作时使用
EVALUATE
,将表格输出中的所有公式一起删除。是的,您可以使用EVALUATE来解决此问题:
myRange.Value=EVALUATE(“[”&ss&“]”&cl&“!I1:I50000+”[“&ss&“]”&cl&“!J50000”)
myRange设置正确的地方感谢您的详细回复。我认为这里的问题是,由于我从另一个工作簿中获取第二个值,因此该公式无法正确读取,是吗?要使第一个公式按原样工作,他必须在
工作簿(ss).Sheets(cl)
工作簿/工作表中运行该公式,是吗?或者它会在
工作簿(ms).Sheets(fm)
列中查找
I1
J1
,该列可能为空。如果他/你将工作簿/工作表引用添加到公式中,肯定比循环要好。或者我可能只是累了,忽略了一些东西。@d讽刺的是,我错过了另一本工作簿,但仍然没有问题!Excel公式仍然可以跨工作簿工作,您只需指定源即可。我会编辑我的答案很抱歉,斯科特,我从代码中偷了这个片段,没有告诉你变量引用了什么。但是,是的,如果我使用一本工作簿,这将非常有效,但由于我在跨书籍工作,这给了我一段艰难的时间…编辑得很好-它是按原样工作,还是需要打破公式来包含变量名,即,
“=”[“&ss&“]”&cl&“!I1+”[“&ss&“]”&cl&“!J1”
(或者类似的东西,取决于
ss
的标记方式…?感谢您的详细回答Scott。我认为这里的问题是,由于我从另一个工作簿中获取第二个值,该公式无法正确读取,是吗?要使您的第一个公式按原样工作,他必须在
工作簿(ss)中运行该公式).Sheets(cl)
工作簿/工作表,是吗?还是在
工作簿(ms).Sheets(fm)
列中查找
I1
J1
,该列可能为空。如果他/你将工作簿/工作表引用添加到公式中,则