Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 VBA将整数除法结果四舍五入?_Excel_Vba - Fatal编程技术网

为什么Excel VBA将整数除法结果四舍五入?

为什么Excel VBA将整数除法结果四舍五入?,excel,vba,Excel,Vba,我在Excel2002中编写了一个VBA宏,用于处理设备上的数据,该设备在4个通道中的每个通道上提供10个值 当我尝试将一个整数除以另一个整数来计算行和列时,结果显示它使用了四舍五入,就像它是一个浮点变量一样 Sub TestRounding() Dim Y As Integer Dim Field As Integer Dim Channel As Integer ActiveWorkbook.Sheets.Add ActiveWorkbook.Act

我在Excel2002中编写了一个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列,然后27-35被放入D列,然后36-40被放入E列

我期望值1-10进入A列,11-20进入B列,21-30进入C列,31-40进入D列


<>我习惯了C和C++,如果把整数除以另一个整数,结果是用整数数学计算的。VBA有什么不同

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

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

整数除法\

分割一个项目意味着将其切割成一组的碎片或部分 价值因此,使用除法得到1的分数 从另一个角度看数字。VisualBasic语言提供了两个 该司的业务类型。如果你想知道结果的话 操作为自然数,称为整数,使用 运算符“\”作为除数。要使用的公式是:
Value1\Value2
可以对两种类型的有效数字执行此操作,或 没有小数部分。手术后,结果将是 自然数

十进制除法/

第二种除法的结果是十进制 号码。使用正斜杠“/”执行此操作。其公式为:
Value1/Value2
执行操作后,结果为 十进制数


谢谢,丹尼尔,这解决了我的问题。在超过25年的编程(但尽可能少使用微软的东西)中,这是我第一次看到反斜杠做我通常期望正斜杠做的事情。没关系,我只需要检查一些其他代码也不能正常工作,可能是因为同一件事。奈杰尔,如果这解决了你的问题,接受它作为答案,在将来帮助其他人解决同样的问题。这是旧的,但我遇到了一个明显的问题。我将
?5.5\2
放在即时窗口中,它返回
3
而不是
2
@RonRosenfeld 5.5/2=2.75,如果将其四舍五入为整数,则得到3。我不认为这是个问题。如果你想让它向下取整,实际上,使用
int(5.5/2)
@Daniel Integer division在其他地方(包括VB、Wolfram)被定义为小数部分被丢弃的除法,而不是取整。此外,在VBA中,运算符似乎首先对每个值进行四舍五入(使用VBA的“舍入到偶数”方法),然后将两个值除以。例如,5.5\2.5-->3,但5.5/2.5-->2.2