2011-05-05 79 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開發,而不是統計分析和算術計算。


*您將能夠(或不能)重現此錯誤的一些時間,這取決於你的機器語言環境。這就是今天的重大教訓:當問題是間歇性的,不可預測的或不一致的 - 可再現的時候,問題就會惡化。