我一直在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
答案 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