나는 이니셜로 대체하고자하는 전체 이름의 열을 가지고 있습니다. 나는 현재이 일을하고배열을 통한 효율적인 루핑
:
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을 사용하고 있습니까? – Dai
@Dai '라이브'일 때 천천히 정상적으로 실행됩니다. 진행 막대 (userform)를 사용하여 사용자가 서브 루틴에있는 위치를 표시합니다.이 섹션에 도달하면 오랜 시간이 걸립니다. SDK 재 작성 및 사용에 대해 들어 본 적이 없습니다. 최소화는 시간에 영향을주지 않습니다. 엑셀 2016. 이것이 정말로 가장 좋은 방법이라면, 나는 단지 500 레코드 밖에 가질 수 없다. – redditor