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

我一直在Excel中使用下面的macros来replace当前单元格中的前七个字符的单元格的内容:

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是数字,*是星号(不是通配符)

我想修改这个macros,使它不会在第三对和第四对nn是“01”以外的单元格上运行。 所以它应该只运行,如果一个单元格是:

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

要么

A * NN:NN:01

要么

A * NN:NN:01:01

是倾向于直接在工作表上做到这一点:use = Left(,7)其中第一个参数是单元格。 复制这个公式向下和/或跨越适当的。

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

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

这可能是基于您的示例input的黑客攻击,但尝试这样做:

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

它所做的是检查最右边的2个字符,看看它们是否不是“01”,如果它们实际上不是“01”,则继续执行你的代码。 如果你正在做更复杂的事情,我需要更多的信息。

所以这样的事情?

 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 

可能有更好的办法,但是这会看你的单元格的长度,如果它的长度超过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