为什么Excel VBA舍入我的整数除法结果?

时间:2013-05-29 12:34:26

标签: excel-vba vba excel

我正在Excel 2002中编写一个VBA宏来操作设备中的日期,该设备在4个通道中分别提供10个值。

当我尝试将整数除以另一个整数来计算行和列时,结果显示它正在使用银行家舍入,就好像它是一个浮点变量。

Sub TestRounding()
    Dim Y As Integer
    Dim Field As Integer
    Dim Channel As Integer

    ActiveWorkbook.Sheets.Add
    ActiveWorkbook.ActiveSheet.Cells.Select
    range("A1").Select

    For Field = 1 To 40
        Channel = (Field - 1) / 10
        Y = Field - 1
        ActiveSheet.range("A1").Offset(Y, Channel).Value = Field
    Next Field

End Sub

Y是输出的行,我通常用

设置
Y = (Field -1) mod 10

但是我把它留作了

Y = Field - 1

在结果工作表中更清楚地说明这一点。

频道应该是输出的列。

当我运行这个宏时,值1-6被放入A列,然后7-15被放入B列,16-26被放入C列,然后是D-中的27-35然后是36-40在E栏中。

我的预期是1-10值进入A列,11-20进入B栏,21-30进入C栏,31-40进入D栏。

我习惯于C和C ++,如果我将整数除以另一个整数,则使用整数数学计算结果。 VBA有什么不同?

2 个答案:

答案 0 :(得分:11)

使用“整数数学”进行除法使用\而不是/

  

整数部门\

     

划分项目意味着将其切割成一组或几个部分   值。因此,除法用于得到一分之一   另一个数字。 Visual Basic语言提供了两种   该部门的业务类型。如果你想要的结果   操作是一个自然数,称为整数,使用反冲   运算符“\”作为除数。使用的公式是:Value1 \ Value2   可以使用或对两种类型的有效数字执行此操作   没有小数部分。操作后,结果将是a   自然数。

     

Decimal Division /
   第二种类型的除法产生小数   数。使用正斜杠“/”执行。它的公式是:   Value1 / Value2执行操作后,结果为a   十进制数。

Source

答案 1 :(得分:2)

反斜杠用于整数除法,正斜杠用于十进制除法。将正斜杠改为反斜杠,你应该得到你期望的结果。

http://www.functionx.com/vbaexcel/Lesson04.htm