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
,该列可能为空。如果他/你将工作簿/工作表引用添加到公式中,则