Excel 2010macros:replace包含数字大于和小于的所有单元格

我有一个大的Excel表,我想在其中取代几个数字范围(都在相同的单元格范围内)。 例如,我想用数字0replace大于-5和小于5的所有数字。大于5和小于10的所有数字应该用1replace,所有大于-10和小于-5的数字应该是用-1代替,依此类推。

我试着用这个公式

Sub replace() Dim rng As Range For Each rng In Range("B2:AI40") If IsNumeric(rng) < 5 And IsNumeric(rng) > -5 Then rng = 0 End If Next rng End Sub 

这并不能完全消除这个问题,因为它用0代替了所有的东西。同样, 这个解决scheme也不能解决问题。 我如何修改公式以适应我的需求,或者是不可能的替代scheme?

谢谢!

尝试

 Sub replace() Dim rng As Range For Each rng In Range("B2:AI40") If rng.Value < 5 And rng.Value > -5 Then rng = 0 End If Next rng End Sub 

IsNumeric是一个布尔函数,要么返回0或1,这就是为什么每个单元格之前被设置为0。 如果您希望在单元格中使用非数字值,则可能需要使用以下代码:

 Sub replace() Dim rng As Range For Each rng In Range("B2:AI40") If IsNumeric(rng) then If rng.Value < 5 And rng.Value > -5 Then rng = 0 End If End if Next rng End Sub 

当你使用5的整数除法( \ )时,整个任务变得更简单(并处理你提到的其他情况)

 Sub replace() Dim rng As Range For Each rng In Range("B2:AI40") If IsNumeric(rng) then rng = rng.Value \ 5 End if Next rng End Sub 

请不要select这个答案。

这篇文章只是向你展示比你实际使用的方法快得多的方法。 从技术上讲,你正在循环B2:AI40每个单元。 即你的代码循环1326次( =34 Cols * 39 Rows

这是一个快得多的方法,只使用17个循环

逻辑:

  1. <10和> 5(换句话说6,7,8,9被1代替)
  2. (换句话说,-4,-3,-2,-1,0,1,2,3,4被replace为0)
  3. <-5和> -10(换句话说-6,-7,-8,-9被replace为-1)

现在,我们不再循环使用单元格,而是使用.Replace来search上面的数字,所以技术上我们只会循环17次,而不是1326

看到这个示例代码

 Option Explicit Sub replace() Dim ws As Worksheet Dim rng As Range Dim i As Long Set ws = ThisWorkbook.Sheets("Sheet1") Set rng = ws.Range("B2:AI40") With rng For i = 6 To 9 '<~~ 4 loops .replace What:=i, Replacement:="1", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next i For i = -4 To 4 '<~~ 9 loops ; 7 if when i = 1 or 0 it doesn't do anyting If i <> 1 And i <> 0 Then .replace What:=i, Replacement:="0", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End If Next i For i = -9 To -6 '<~~ 4 loops .replace What:=i, Replacement:="-1", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next i End With End Sub