VBA问题:具有多种变量类型的简单操作

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

在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
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)。这是一个单一的细胞,不,谢谢,我会考虑你的方式,谢谢,我会考虑你的做法,这真的帮助了我!多谢了,这真的帮了我大忙!谢谢