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