用于检查单元格内文本的IF语句

时间:2015-11-03 22:46:57

标签: excel vba excel-vba

我一直在Excel中使用以下宏来替换当前在单元格中的前七个字符的单元格内容:

Sub TruncateCells()

    For Each cell In Selection
        cell.Value = Left(cell.Value, 7)
    Next cell
End Sub

这些单元格中的值是

  

A * nn:nn:nn:nn

  

A * NN:NN:NN

  

A * NN:NN

其中n是数字,*只是星号(不是通配符)

我想修改宏,以便它不会在第三对和第四对nn不是'01'的单元格上运行。所以它应该只在一个单元格是:

时运行
  

A * nn:nn(在这种情况下,它不会修改单元格)

  

A * NN:NN:01

  

A * NN:NN:01:01

4 个答案:

答案 0 :(得分:1)

倾向于直接在工作表上执行此操作:use = Left(,7)其中第一个参数是单元格。适当地向下和/或跨越此公式。

这样您就可以避免使用VBA并保留原始数据,并且可以重复计算。

如果必须,请隐藏视图中的原始列。

答案 1 :(得分:0)

这可能是基于您的示例输入的黑客攻击,但请尝试:

if(Right(cell.Value) <> "01") then
    cell.Value = Left(cell.Value, 7)
end if

这样做是检查正确的2个大多数字符,如果它们不是“01”则查看它们,如果它们实际上不是“01”则继续执行代码。如果你做的事情更复杂,我需要更多的信息。

答案 2 :(得分:0)

这样的事情?

Sub TruncateCells()
    Dim strCellVal as String
    Dim arrCellValParts as Variant
    For Each cell In Selection
        strCellVal = cell.Value
        If Len(strCellVal) > 7 Then
            arrCellValParts = Split(strCellVal, ":")
            On Error Resume Next 'It will throw an error if there's only 3 parts
            If arrCellValParts(3) = "01" or arrCellValParts(4) = "01" Then
                cell.Value = Left(strCellVal, 7)
            End If
            On Error Goto 0
        End If
    Next cell
End Sub

答案 3 :(得分:0)

可能有更好的方法,但这会查看单元格值的长度,如果长度超过7个字符且后两个字符为“01”,则它将截断与原始代码相同的方式。如果长度为7个或更少,或者后两个数字不是“01”,则不会截断。

Sub TruncateCells()
    For Each cell In Selection
        If Len(cell.Value) > 7 And Right(cell.Value, 2) = "01" Then
            cell.Value = Left(cell.Value, 7)
        End If
    Next cell
End Sub