我正在尝试编写一个宏,以确定一个单元格是否有5个数值,如果有,我需要在末尾添加一个0。
我的宏已经有了一些步骤。
例如
BZ2 = 9.48E+0094811E-5E-5时,才有5个数字值。预期结果为948110E-5。
我使用的是一个作为文本存储的数字。
有人能帮我吗?
Sub TextFormat()
Dim c As Range
Dim d As Range
For Each c In Sheets("order_export").Range("F2:F10000").Cells
If StrComp(Right(c.Value, 1), "R", vbTextCompare) = 0 Then
c.Offset(0, -1).Value = c.Offset(0, -1).Value & "R"
c.Value = Left(c.Value, Len(c.Value) - 1)
End If
Next c
For Each d In Sheets("order_export").Range("BZ2:BZ10000").Cells
If InStr(1, d.Value, ".", vbTextCompare) > 0 Then
d.NumberFormat = "@"
d.Value = Replace(d.Value, ".", "")
d.Value = d.Value & "E-5"
End If
Next d
End Sub发布于 2014-01-30 16:12:22
使用此条件
if isNumeric(left(text,5)) AND right(text,3) = "E-5" then
'add zero
text = left(text,5) & "0" & right(text, len(text) - 5)
end if如果前5个字符是数字字符,最后3个字符是e-5,则在前5个字符之后添加0。left函数接受前5个字符。isNumeric检查它们是否为数字。然后剩下的,取前5个字符,放入0,然后right接受从右开始到长度-5的所有字符(我们已经有了前5个字符)
编辑
正如所指出的,如果已经有一个0,比如123450E-5,那么就会添加一个额外的。
添加ANd len(text) = 8,以便只在有8个字符的情况下添加0。
发布于 2014-02-01 05:14:44
Excel不使用短路,因此为了提高编码效率,最好先将AND分解为带有最可能的错误的IF's,然后才是漏洞
另外,永远不要使用变体函数Left和Right,而是使用字符串函数Left$和Right$
此链接是一个优秀的资源重新编码优化。
重述先前的答案如下:
c = "94811E-5"
If Len(c) = 8 Then
If IsNumeric(Left$(c, 5)) Then
If Right$(c, 3) = "E-5" Then c = Left$(c, Len(c) - 3) & "0" & Right$(c, 3)
End If
End If
MsgBox chttps://stackoverflow.com/questions/21461436
复制相似问题