2012-12-23 4 views
3

G'Day,Excel VBA - const 문자열 범위 사이의 성능 이점 또는 범위 이름 정의?

나는 더 나 엑셀 VBA 효과적으로 아니라 데이터를 실행하기 위해 한 곳에서 선언 된 정의 범위를 관리 할 수있는 방법에 대한 자세한에 이해할 수 있도록 대한 질문이 있습니다. 이 프로젝트에서 더 많은 작업을하기 전에 두 가지 옵션 (지금까지 알고있는) 중 어느 것이 더 좋은지 또는 그렇지 않은지를 결정하는 것이 좋습니다.

내가 해결하고있어 문제는 따라서 테이블 (죄송는 원시 형태)

다음과 같습니다 허구 공급 업체의 집합에 걸쳐 실패의 숫자를 포함하는 작은 테이블을 만드는 것입니다 "회사 명", "실패"
"의 번호는 차가운 기계 수 '7
"냉각수 쿼터스 "5
"작은 물 냉매 3
"항공 운송 시스템"7
다음"제너럴 냉각수"5
"감탄 냉매"4

내 첫 번째 옵션 (헌장 문자열)이 모듈/공식이다.

Option Explicit 
Public Const CountofFailures As String = "J7:J12" 
Sub btnRandom() 
    ' Declaration of variables 
    Dim c As Range 

    ' Provide a random number for failures across Suppliers 
    For Each c In ActiveSheet.Range(CountofFailures) 
     c.Value = Random1to10 
    Next c 
End Sub 

Function Random1to10() As Integer 
    'Ensure we have a different value each time we run this macro 
    Randomize 
    ' Provide a random number from 1 to 10 (Maximum number of Failures) 
    Random1to10 = Int(Rnd() * 10 + 1) 
End Function 

두 번째 옵션 (정의 된 이름)은 다음과 같은 모듈/공식입니다.

Option Explicit 
Sub btnRandom() 
    ' Declaration of variables 
    Dim c As Range 
    Dim iLoop As Long 

    ' Provide a random number for Suppliers with Defined Range 
    For Each c In ActiveWorkbook.Names("CountofFailures").RefersToRange 
     c.Value = Random1to10 
    Next c 
End Sub 

Function Random1to10() As Integer 
    'Ensure we have a different value each time we run this macro 
    Randomize 
    ' Provide a random number from 1 to 10 (Maximum number of Failures) 
    Random1to10 = Int(Rnd() * 10 + 1) 
End Function 

어떤 제안 -이 도움이된다면 나중에 매크로 타이머 테스트를 할 것인가?

셀에 나열된 범위를 값으로 가져 오는 경우 세 번째 옵션이 있습니까? 실제로이 작업을 수행하는 코드를 보지 못했습니까?

답변

3

두 코드가 병목 현상이 될 범위를 반복합니다. 즉 삽입하면/참조가 그대로 남아 행과 열을 삭제 - 당신이

  1. 데이터 자동 "위치"로 범위 이름을 사용하는 것이 좋습니다.내 경험하지만 파일에 많은 범위 이름은 통합 문서

코드

Sub QuickFill() 
Randomize 
Range("CountofFailures").Formula = "=Randbetween(1,10)" 
Range("CountofFailures").Value = Range("CountofFailures").Value 
End Sub 
+0

브렛, 나는 마지막으로 .value = .value 라인이 복사와 동일하고 특별한 값을 붙여 넣는다고 말하고 싶습니까? –

+0

예 - 수식을 – brettdj

+1

값으로 변환합니다. Brett의 조언에 감사드립니다. 나는이 일반적인 패턴을 따르도록 서브 루틴을 조정할 것이다. –

5

성능 차이를 알 수 없습니다. const가 더 빠를 것 같습니다. 일반적인 조언은 '성능 문제가 발생할 때까지 성능에 대해 걱정하지 마십시오.'입니다. 그렇지 않으면 결국 무엇이 당신의 최적화 시간을 소비하는지 추측하게되고 그것은 맞지 않을 수도 있습니다.

명명 된 범위의 경우 행과 열을 삽입 할 때 이점이 이동된다는 이점이 있습니다. 열 I에 새 열을 삽입하면 첫 번째 예제를 편집해야하며 두 번째 예제는 작동하도록 설정됩니다.

+0

괜찮습니다. 성능 문제가 있다는 것을 알기 전까지는 성능 모자를 멈추게 할 것입니다. –

1

내가 발견 한이 범위에 단일 쓰기를 수행하고있는 무슨 난독 끝낼 수 있다는 것입니다 명명 된 범위는 느립니다 (아마도 Excel에서 이름에 대한 내부 조회를 수행해야만 해당 이름이 무엇을 의미하는지 찾을 수는 있지만) 매우 극단적 인 경우를 제외하고는 상당한 차이를 찾을 수 없을 가능성이 큽니다 수 만번 또는 수십만 번 언급 됨) .
그리고 딕 (Dick)은 다음과 같이 말합니다. 이점은 중요하지 않은 속도 손실보다 훨씬 큽니다.