2014-11-06 41 views
-2

我有一个Excel,其具有以下类型的值的H列如何改变数字格式在Excel VBA中

158.60 
158.60 
170.58 

数格式是Number现在我需要改变这对像以下

158,60 
158,60 
170,58 

我有以下的代码完成,但结果显示怪异......

Dim ws1 As Worksheet 
Dim lastRowk As Long 
Set ws1 = ThisWorkbook.Sheets("Sheet1") 


lastRowk = ws1.Cells(Rows.Count, "H").End(xlUp).Row 


For Each m In ws1.Range("H2:H" & lastRowk) 

m.Value = "'" & m.Value 


Next m 



Worksheets("Sheet1").Columns("H").Replace What:=".", Replacement:=",", SearchOrder:=xlByColumns, MatchCase:=True 


For Each m In ws1.Range("H2:H" & lastRowk) 

If m.Value Like "*,*" Then 


'Nothing 

Else 
m.Value = m.Value & ",00" 

End If 

Next m 

我得到这样的结果:

158,59742 
158,59742 
170,57936 

但我想它像下面

158,59 
158,59 
170,57 
+1

你会得到什么结果? – kaybee99 2014-11-06 09:25:46

+0

正在得到类似1,58,59,742的结果 1,58,59,742 1,70,57,936 – user3305327 2014-11-06 09:55:06

+0

'1'您的单元格格式如何? '2'什么是您的Excel本地setings? – 2014-11-06 10:36:54

回答

0

Seing你的最后结果,它不奇怪的。它看起来像你的初始值确实是数字,但格式化为### 9.99,所以它们在逗号后面只显示2位数字。但是,这只是显示,Excel会保留显然有5位数字的数字的实际值。

一个简单的解决办法是你的小数部分四舍五入到之前只有2位,使你的东西:

cell.value = round(cell.value,2) 

另一种解决方案,让你已经做了什么,将是一轮中的最后2位数字您的操作结束:

For Each m In ws1.Range("H2:H" & lastRowk) 

    If m.Value Like "*,*" Then 

    Dim i As Integer 
    Dim strBefore As String 
    Dim strAfter As String 
    Dim dblTemp As Double 
    Dim strTemp As String 
    dim strDecimalSign as string 



    ' Change this according to the decimal sign on your system: 
    strDecimalSign = "," 
    ' or : 
    ' strDecimalSign = "." 


    ' get comma position 
    i = InStr(m.value, ",") 

    ' get the value before the comma 
    strBefore = Left(m.value, i - 1) 

    ' get the value after the comma 
    strAfter = Mid(m.value, i + 1) 
    ' make a temp double with 2 digits 
    dblTemp = Round(CDbl("0" & strDecimalSign & strAfter), 2) 
    ' Convert back to string 
    strTemp = CStr(dblTemp) 
    ' keep only the rounded 2 digits part 
    strAfter = Replace(strTemp, "0" & strDecimalSign, "") 

    'join all parts 
    m.value = strBefore & "," & strAfter 

    Else 
    m.Value = m.Value & ",00" 

    End If 

Next m 

(写在我的手机这么未经)

而第三种解决方案,你可能会考虑,就是改变decimalseparator格式: http://msdn.microsoft.com/en-us/library/office/ff195207(v=office.15).aspx

+0

非常感谢,亲爱的...虽然我已经以其他方式解决了它 – user3305327 2014-11-07 07:19:17