你可能會,如果你通過每一個細胞中的.xlsx或.XLSM文件嘗試循環遇到的問題,因爲他們有1,048,576行,你這樣做的兩倍!無論你做什麼,它都會導致放緩。
與其使用B:B和C:C的一攬子範圍,您可以將其限制在可能包含數據的範圍內。沒有看到你的表,我不能肯定地說做到這一點的最好辦法,但總的來說嘗試這樣的事:
Sub Properiser()
Dim rngAll As Range
Dim rngCell As Range
Dim lngLast As Long
lngLast = Range("B" & Rows.Count).End(xlUp).Row
If Range("C" & Rows.Count).End(xlUp).Row > lngLast Then
lngLast = Range("C" & Rows.Count).End(xlUp).Row
End If
Set rngAll = Range("B1", "C" & lngLast)
For Each rngCell In rngAll
If Not rngCell.HasFormula Then
rngCell.Value = WorksheetFunction.Proper(rngCell.Value)
End If
Next rngCell
End Sub
這會發現B列中最後使用的列,然後在C列,並使用較大者作爲範圍的終點。
我們還可以使用其他方法,例如使用UsedRange屬性來查找文件中實際使用了多少行和列,但是如果沒有看到數據,很難說這些數據中的哪一個可能對您更好或不。
編輯以展開:
現在,你提到你寧願過程只看包含文本的單元格;有幾種方法可以做到這一點。
選項1:檢查空單元
如果你懷疑你經歷了很多空單元格的彈跳,你可以簡單地在你的。如果條件檢查單元格內容。
if len(rngCell.value) <> 0 then
'Function
end if
選項2:檢查非文本值
不幸的是,我們沒有能夠檢查字母數字文本的簡單,功能單一;我們需要走一條消除的道路。因此:
if len(rngCell.value) <> 0 then
if isnumeric(rngcell.value) = False AND _
iserror(rngcell.value) = false then
'Assume it's text and perform our function
End if
End if
...等等。您可以根據需要在IF循環中堆疊儘可能多的檢查。
如何多行數據,你呢? – Brian
我們需要知道你的工作表是什麼樣的。一旦你達到了數據的結尾,你就想讓循環中斷,但是你還沒有給我們一個方法來確定它在哪裏。 – Fritz