請不要選擇此項作爲答案。
這篇文章只是向您展示比您實際使用的方法快得多的方法。從技術上講,您正在循環遍歷B2:AI40
中的每個單元格。即代碼是循環1326次(=34 Cols * 39 Rows
)
下面是隻採用17循環
更快得多方法
邏輯:
- < 10和> 5(換句話說6, 7,8,9被替換爲1)
- < 5>> -5(換句話說-4,-3,-2,-1,0,1,2,3,4被替換爲0 )
- < -5 And > -10(換句話說-6,-7,-8,-9被替換爲-1)
現在,我們將使用.Replace
來搜索上述數字,以便在技術上我們將僅比1326循環17次!
看到這個示例代碼
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
謝謝你,這個完美!這是所有的數值,所以它與第一個解決方案一起工作! – rf2012 2013-04-20 19:42:19
@DanielHagemeier:看看我編輯的一個更簡單的解決方案,它也涉及rng> 5,rng> 10,... – 2013-04-20 19:43:49
@DocBrown:儘管這是一個小範圍,Application.ScreenUpdating = False在代碼和Application之前。循環後的.ScreenUpdating = True'將避免閃爍。 – shahkalpesh 2013-04-20 19:46:16