私はイニシャルと置き換えたいフルネームの列を持っています。私は現在、これをやっている効率的な配列のループ
:
Dim n As Long
Dim varray As Variant
Dim FullNameRange As Range
Dim FullName As String
varray = Range(NDLstaffCol & FirstLineItemRow & ":" & staffCol & LastRow + 1)
For n = FirstLineItemRow To UBound(varray, 1)
Set FullNameRange = ActiveSheet.Range(staffCol & n)
FullName = FullNameRange.Value
FullNameRange = Left(FullName, 1) & Mid$(FullName, InStr(FullName, " ") + 1, 1)
Next
LastRow
は、グローバル変数として最後のレコードを指します。
同じモジュール内の他のサブルーチンと比較すると、処理に時間がかかります。
これを行うより良い方法はありますか?
ハードコードされた検索/置換が機能しないように、完全な名前はわかりません。 < 500レコードあります。
私にはうまく見えますが、(少なくともこの宇宙では)改善できない実行時の複雑さは 'O(n)'です。あなたはデバッガの外で実行しようとしましたか?それはデバッグモードで通常どおりゆっくりと実行されますか? NET Office SDKを使用してC#/ .NETで書き直そうとしましたか? Excelを実行する際にExcelを最小限に抑えると、実行速度は向上しますか?どのExcelのバージョンを使用していますか? – Dai
@Dai「ライブ」のときはゆっくりと正常に動作します。私はプログレスバー(userform)を使ってサブルーチンのどこにいるのかをユーザーに示します。このセクションに入ると、時間がかかります。 SDKの書き換えと使用について聞いたことがありません。最小化は時間に影響を与えません。 Excel 2016です。これが本当に最良の方法であれば、私は500レコードしかありません! – redditor