我有一个包含2位和3位数字列的电子表格。如果它是一个以0结尾的3位数字,则最终0应该替换为1.因此150变为151而200变为201.
这就是我正在使用的,只是为了测试功能,它很慢并且通常会崩溃Excel,因为(我认为)它基本上在每个单元格上进行多次查找和替换,即使它已经替换了值。所以我想我需要走另一条路。
Sub FixNumbers()
Dim c As Range
For Each c In Selection.Cells
Selection.NumberFormat = "General"
c = Replace(c, "100", "101")
c = Replace(c, "150", "151")
c = Replace(c, "200", "201")
c = Replace(c, "250", "251")
c = Replace(c, "300", "301")
c = Replace(c, "350", "351")
c = Replace(c, "400", "401")
Next
End Sub
答案 0 :(得分:4)
如果单元格包含2-3位数字 - 请勿对其使用文本操作。格式更改应该在循环之外。
Sub FixNumbers()
Dim c As Range
Selection.NumberFormat = "General"
For Each c In Selection.Cells
If (c > 99) And (c Mod 10) = 0 Then c = c + 1
Next
End Sub
答案 1 :(得分:2)
在vba中执行此操作:
Sub FixNumbers()
Dim c As Range
Selection.NumberFormat = "General"
For Each c In Selection.Cells
If Len(c) = 3 And Right(c, 1) = "0" Then
c.Value = CInt(Left(c, 2) & "1")
End If
Next
End Sub
答案 2 :(得分:2)
我个人通过测试值模数10,然后加1:
来做到这一点Sub FixNumbers()
Dim height As Long
Dim c As Range
For Each c In Selection.Cells
height = CLng(c.Value)
If height > 99 And height < 1000 And height Mod 10 = 0 Then c.Value = height + 1 Next
End Sub
答案 3 :(得分:1)
请勿在VBA中执行此操作。模仿工作表可以做得非常好的东西是毫无意义的。
而是在工作簿中创建一个新列。假设A列包含您的数字。
然后在新列中使用=IF(MOD(A1,10),A1,A1+1)
向下复制。 (MOD(A1,10)
当且仅当数字以零结尾时才为0。