VBA问题:具有多种变量类型的简单操作
在VBA函数中处理Excel 2010中不同类型的变量时,我遇到了一个非常恼人的问题。由于关于同一溢出问题(错误6)的一些其他问题,我在没有Excel转换的情况下使用ad尝试了以下代码,但没有成功(我可能做错了,但我不再有说明) 总结一下,我想做(每行)D=A*(C/B) 我的想法是,我有3列值,这里是第一行,只是给你一个想法:VBA问题:具有多种变量类型的简单操作,vba,excel,long-integer,multiplication,Vba,Excel,Long Integer,Multiplication,在VBA函数中处理Excel 2010中不同类型的变量时,我遇到了一个非常恼人的问题。由于关于同一溢出问题(错误6)的一些其他问题,我在没有Excel转换的情况下使用ad尝试了以下代码,但没有成功(我可能做错了,但我不再有说明) 总结一下,我想做(每行)D=A*(C/B) 我的想法是,我有3列值,这里是第一行,只是给你一个想法: A B C D 2187 71,8 18 1050 78,65 18 1813 92,35 18
A B C D
2187 71,8 18
1050 78,65 18
1813 92,35 18
2379,45 94 18
所以基本上(除非我错了)我必须处理长的,双精度的和整数。请注意,“C”列始终包含相同的值(18),A列可能包含大于20k或30k的大整数
提前感谢您的帮助试试这个吧
Sub WriteFormula(ByVal sh As Excel.Worksheet, ByVal lRow As Long, ByVal lColumn As Long)
Dim rng As Excel.Range
Set rng = sh.Cells(lRow, lColumn)
rng.FormulaR1C1 = "=RC[-3]*(RC[-1]/RC[-2])"
End Sub
Sub Test()
WriteFormula ActiveSheet, 1, 4
End Sub
也许试试这个吧
Sub WriteFormula(ByVal sh As Excel.Worksheet, ByVal lRow As Long, ByVal lColumn As Long)
Dim rng As Excel.Range
Set rng = sh.Cells(lRow, lColumn)
rng.FormulaR1C1 = "=RC[-3]*(RC[-1]/RC[-2])"
End Sub
Sub Test()
WriteFormula ActiveSheet, 1, 4
End Sub
要以简单的方式执行此操作,可以使用
Application.Caller
。要以某种方式实现,它也可以用作数组,只需使用Evaluate
将其放入**模块*:
Public Function do_calculation() As Variant
With Application.Caller '.Cells '(1, 1)
do_calculation = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address)
End With
End Function
然后在D1中输入=do_calculation()
并向下复制。或者选择范围D1:D4并输入=do_calculation()
,但用ctrl+shift+enter确认
要直接获取值,您需要通过Sub
这样做:
Sub do_calculation(rng As Range)
With rng
.Value = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address)
End With
End Sub
只需选择单元格D1:D4并运行
do_calculation selection
即可轻松完成此操作,您可以使用Application.Caller
。要以某种方式实现,它也可以用作数组,只需使用Evaluate
将其放入**模块*:
Public Function do_calculation() As Variant
With Application.Caller '.Cells '(1, 1)
do_calculation = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address)
End With
End Function
然后在D1中输入=do_calculation()
并向下复制。或者选择范围D1:D4并输入=do_calculation()
,但用ctrl+shift+enter确认
要直接获取值,您需要通过Sub
这样做:
Sub do_calculation(rng As Range)
With rng
.Value = Evaluate(.Offset(, -3).Address & "*" & .Offset(, -1).Address & "/" & .Offset(, -2).Address)
End With
End Sub
只需选择单元格D1:D4并运行
do_calculation selection
如果B列有小数,则不能使用整数
。是吗?当谈到整数时,我主要指的是给定的“C”列代码必须作为宏的一部分运行;禁止将代码作为工作表函数调用的一部分运行以更改工作表,因此范围(x,y)将失败。如果是C/B
为什么最后有/18
?您不需要范围(单元格(x,y),单元格(x,y))只需使用单元格(x,y)。这是一个单单元格,不是吗?如果B列有小数,就不能使用integer
。是吗?当谈到整数时,我主要指的是给定的“C”列代码必须作为宏的一部分运行;禁止将代码作为工作表函数调用的一部分运行以更改工作表,因此范围(x,y)将失败。如果是C/B
为什么最后有/18
?您不需要范围(单元格(x,y),单元格(x,y))只需使用单元格(x,y)。这是一个单一的细胞,不,谢谢,我会考虑你的方式,谢谢,我会考虑你的做法,这真的帮助了我!多谢了,这真的帮了我大忙!谢谢