は、あなたはおそらく、あなたがの.xlsxまたは.xlsmファイル内のすべてのセルをループしてみた場合、彼らは1,048,576行を持っているので、問題に実行するつもりだ、とあなたはその倍をやっています!それはあなたが何をしていても減速を引き起こすでしょう。
ブランケット範囲B:BとC:Cを使用するのではなく、データを含む可能性のある範囲に制限することができます。その後、C列で、これは、列Bで最後に使用された行を見つけます
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
:あなたのシートを見ることなく、私はこのような何かをしようと、それを行うための最善の方法を確認してくださいのためではなく、一般的に言うことはできません範囲の終点として大きい方を使用してください。
UsedRangeプロパティを使用して実際にファイル内で使用された行数と列数を調べるなど、データを見ることなく、それらのいずれかがあなたにとってうまくいくかどうかを判断するのは難しいか否か。
EXPANDように編集:
を今、あなたはあなたではなくテキストのみを含むセルを見て、プロセスを持っているだろうと述べました。私たちができることはいくつかあります。
オプション1:空のセルのためのチェック
あなたは空のセルの多くてバウンスしている疑いがある場合、あなたは、単にあなたのIf条件でセルの内容を確認することができます。
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