Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
如何在excelvba中更改数字格式_Vba_Excel - Fatal编程技术网

如何在excelvba中更改数字格式

如何在excelvba中更改数字格式,vba,excel,Vba,Excel,我在excel中有一个H列,其值为以下类型 158.60 158.60 170.58 数字格式是数字,现在我需要将其更改为如下所示 158,60 158,60 170,58 158,59 158,59 170,57 我已经完成了以下代码,但结果显示很奇怪 Dim ws1 As Worksheet Dim lastRowk As Long Set ws1 = ThisWorkbook.Sheets("Sheet1") lastRowk = ws1.Cells(Rows.Count

我在excel中有一个H列,其值为以下类型

158.60
158.60
170.58
数字格式是数字,现在我需要将其更改为如下所示

158,60
158,60
170,58
158,59
158,59
170,57
我已经完成了以下代码,但结果显示很奇怪

    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,60
158,60
170,58
158,59
158,59
170,57

公布最终结果一点也不奇怪。看起来您的初始值确实是数字,但格式为9.99,因此在逗号后仅显示两位数字。然而,这只是显示,Excel保留数字的真实值,这些数字显然有5位数字

一个简单的解决方案是在制作物品之前,将小数部分四舍五入到2位:

cell.value = round(cell.value,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
写在我的手机上,未经测试

第三种解决方案是更改小数分隔符格式:

您得到的结果是什么?我得到的结果是1,58,59742 1,58,59742 1,70,579361您的单元格格式如何?2您的Excel的本地设置是什么?@SiddharthRout我已经更改了查询。请您检查一下……我想一些字符串操作可以解决这个问题您还没有回答我的问题: