VBA Excel 2013查找特定字符串长度并添加值

时间:2014-01-30 16:03:24

标签: excel vba excel-vba

我正在尝试编写一个宏来查找单元格是否有5个数值,如果有,我需要在结尾添加0。

我的宏已经有了一些步骤。

例如

  1. 单元格BZ2 = 9.48E + 00
  2. 我的宏找到小数点并将其替换为94811E-5
  3. 我需要在这种情况下添加一个Zero,因为有5个数值,而且只有当最后三个字符为E-5时才有。
  4. 预期结果为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
    

2 个答案:

答案 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,最先发生错误,然后是违规行为

也从不使用变体函数LeftRight而是使用字符串函数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