2011-05-05 77 views
0

我是VBA的新手,需要在Excel中使用VBA添加两个值。我用点分隔符接收导入的值,如果我尝试添加它们,点将被忽略。VBA/excel-VBA - 使用点分隔符添加两个值

所以:

1.12 
1.34 

应导致2.46,但我发现了246

代码:

Do Until (Cells(iRow, 1) = 100) 
    addValue = Cells(iRow, 2).Value 
    dValue = dValue + addValue 
    iRow = iRow + 1 
    MsgBox (dValue) 
Loop 

感谢一些101-TIPS ...

这是更新的代码:

Dim iRow As Integer 
Dim addValue As Double 
Dim dValue As Double 

iRow = 2 

Do Until (Cells(iRow, 1) = 100) 
addValue = Cells(iRow, 8) 
Debug.Print "Row"; iRow; " is "; addValue 
modValue = Replace(addValue, ".", ",") 
MsgBox (addValue) 
newVal = Cells(iRow, 8).Value 

dValue = dValue + newVal 
iRow = iRow + 1 

Loop 
MsgBox (dValue) 

基本上我有一个点燃的值是这样的:

100 header 
200 1.12 
200 1.34 
200 1.54 
100 header 

...

我要总结的200 correspondig值1.12,1.34,1.54。该值显示为112,134和154

感谢

+0

请您解释“导入的点分隔符值”吗?我听说过逗号分隔值,但从来没有点分隔符。他们看起来像Excel中的美式小数? – rajah9 2011-05-05 16:55:03

+0

如果您对问题有更新,请将其添加到问题中,而不是其他用户的帖子。 – Kev 2011-05-05 17:40:36

+0

导入文件是带有“;”的CSV分隔符。然而,文件中的所有价格都是x.yz格式,Dot-Seperator – frequent 2011-05-05 17:50:27

回答

0

你把addValue =后这一行吗?

Debug.Print "Row"; iRow; " is "; addValue 

副手,我怀疑1.12是不是真的是双。

另外,你是否声明了你的变量?没有什么幻想,但类似

Dim iRow As Integer 
Dim addValue As Double 
Dim dValue As Double 

最后,你可能要考虑将MSGBOX循环后,而不必把它给每一个分类汇总;迭代。

+0

hm。还是行不通。我使用当前的代码编辑了您的评论 – frequent 2011-05-05 17:40:02

+0

Debug.Print语句旨在调试,而不是修复。转到具有代码的Visual Basic屏幕,然后选择查看 - >立即窗口。在屏幕底部,你应该有“第1行是1.12”和“第2行是1.34”如果不是,那么调试应该指出你需要去的方向。 – rajah9 2011-05-05 17:49:50

+0

我把你的第一列改为A1:A5,第二列改为H1:H5。 (这与您的代码中的第1列和第8列相匹配。)我得到了4个弹出窗口:1.12,1.34,1.54和4.立即窗口显示“第2行是1.12 第3行是1.34 第4行是1.54”If你没有在你的直接窗口中看到这些结果,请尝试在H1:H5中输入Header,1.12等。 – rajah9 2011-05-05 18:01:55

0

我想你有一些有趣的数字格式应用于Excel中的值。突出显示范围并按Ctrl-Shift-`(或从格式菜单中将单元格格式化为“常规”)。我敢打赌,这些数字实际上是112和134.

+0

nope。 1.12和1.34 – frequent 2011-05-05 17:49:12

0

正确...问题在于格式化,而Excel坚持将'4/7'描述为'七月四号'而不是四分之七*。或者实际上,作为文本的“四斜七”。

我不知道是什么奇怪的格式已经在那些“小数”细胞被接走了,但你有两个工作要做:

  1. 改变这些细胞的数量格式“通用”这样你就可以请参阅 他们的实际内容是什么,而不是Excel想要的 ;
  2. 更改代码中使用了一系列的“值”属性,它 给你的原始数据,而不是 “价值”的格式解释 - 的newval =细胞(iRow,8).Value2

我还建议您将NewVal声明为Double。这将强制将类型转换为浮点数,这比根据范围内的格式化信息让'变体'决定它想要的类型是一个好得多的想法。

我最好警告你,任务(1)对于从Oracle数据库导入的数据有大约一半的时间工作,并且从源自法国的电子表格(其中逗号用作小数点)复制的数字更适合于符号分析由French Deconstructivist philosophers开发,而不是统计分析和算术计算。


*您将能够(或不能)重现此错误的一些时间,这取决于你的机器语言环境。这就是今天的重大教训:当问题是间歇性的,不可预测的或不一致的 - 可再现的时候,问题就会恶化。