我正在尝试编写一个宏来查找单元格是否有5个数值,如果有,我需要在结尾添加0。
我的宏已经有了一些步骤。
例如
BZ2
= 9.48E + 00 94811E-5
E-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
答案 0 :(得分:1)
使用此条件
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。
答案 1 :(得分:0)
Excel不short circuit因此,为了提高编码效率,最好先将AND
分解为IF's
,最先发生错误,然后是违规行为
也从不使用变体函数Left
和Right
而是使用字符串函数Left$
和Right$
此link是一种出色的资源重编码优化。
重新删除之前的答案将是这样的:
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 c