Excel VBA: 배열 변수의 변형
변종에 대한 질문.Excel vba의 변형은 기본 데이터 유형인 동시에 비효율적이라는 것을 알고 있습니다(대형 앱에서 과도하게 사용된다는 점에서).하지만 데이터 유형이 여러 개인 배열에 데이터를 저장하기 위해 정기적으로 사용합니다.현재 제가 진행하고 있는 프로젝트는 본질적으로 매우 불량한 코드(c.7000 회선)에 대한 대대적인 최적화 작업입니다. 이를 해결할 방법이 있을까요?
설명하자면, 코드는 배열 변수에 데이터를 자주 저장합니다.따라서 10개의 열로 구성된 데이터 집합을 10000까지 고려합니다.열은 여러 개의 서로 다른 데이터 유형(문자열, 이중, 정수, 날짜 등)입니다.이것들을 배열된 형태로 저장하고 싶다고 가정하면, 보통은;
dim myDataSet(10,10000) as variant
그러나 코드가 각 항목을 평가하여 데이터 유형을 결정하는 것은 매우 비효율적일 것이라고 제가 알고 있는 바와 같습니다(실제로 제가 예상하는 바를 알고 있을 때).또한 개별 데이터 유형을 치수 지정하는 것이 제게 주는 통제력을 상실합니다.그래서 (처음 6개가 문자열이라고 가정하고, 다음 4개는 요점을 쉽게 설명하기 위해 두 배로 늘립니다.)
dim myDSstrings(6,10000) as string
dim myDSdoubles(4,10000) as double
이것은 제게 제어력과 효율성을 돌려줄 뿐만 아니라 좀 투박합니다. (실제로는 유형이 혼합되어 있고 서로 다릅니다.) 결국 저는 각각의 요소에 홀수 개의 요소를 갖게 되고 결국에는 질량이 아닌 코드에 개별적으로 할당해야 합니다.)따라서, 다음의 경우에 해당합니다.
myDSstrings(1,r) = cells(r,1)
myDSdoubles(2,r) = cells(r,2)
myDSstrings(2,r) = cells(r,3)
myDSstrings(3,r) = cells(r,4)
myDSdoubles(3,r) = cells(r,5)
..etc...
그것보다 훨씬 더 추한 것.
myDataSet(c,r) = cells(r,c)
내가 뭔가를 놓쳤나봐요다양한 데이터 유형의 배열을 저장하는 최적의 방법은 무엇입니까?또는 여러 가지 혼합 데이터 유형을 저장하기 위한 최선의 코딩 방법은 무엇입니까?
먼저 측정하지 않고 코드를 최적화하지 마십시오.코드가 가장 느린 곳이 어디인지 놀라게 될 것입니다.Professional Excel Development의 PerfMon 유틸리티를 사용하지만, 직접 롤도 가능합니다.
Excel Range를 읽고 쓰는 것은 큰 타임 싱크입니다.변종은 많은 메모리를 낭비할 수 있지만,
Dim vaRange as Variant
vaRange = Sheet1.Range("A1:E10000").Value
'do something to the array
Sheet1.Range("A1:E10000").Value = vaRange
일반적으로 행과 셀을 순환하는 것보다 빠릅니다.
데이터 유형이 여러 개인 어레이를 사용할 때 선호하는 방법은 어레이를 전혀 사용하지 않는 것입니다.대신, 커스텀 클래스 모듈을 사용하고 요소에 대한 속성을 생성하겠습니다.이것이 성능 향상을 의미하는 것은 아니지만, 코드를 쓰고 읽는 것을 훨씬 더 쉽게 해줍니다.
이 잘 .Variant배열을 입력합니다.
그런데 배열에서 Excel 범위 값을 설정하려면 다음을 사용해야 합니다(Excel 8 이상).
Range("A1:B2") = myArray
이전 버전에서는 다음 코드를 사용해야 합니다.
Sub SuperBlastArrayToSheet(TheArray As Variant, TheRange As Range)
With TheRange.Parent.Parent 'the workbook the range is in
.Names.Add Name:="wstempdata", RefersToR1C1:=TheArray
With TheRange
.FormulaArray = "=wstempdata"
.Copy
.PasteSpecial Paste:=xlValues
End With
.Names("wstempdata").Delete
End With
End Sub
VBA 최적화를 위해 읽어야 할 이 소스에서.
그러나 당신은 당신의 병목현상이 어디에 있는지 보기 위해 당신의 앱을 프로파일링해야 합니다.코드를 벤치마킹하는 데 도움이 되려면 Issun의 이 질문을 참조하십시오.
언급URL : https://stackoverflow.com/questions/7513816/excel-vba-variants-in-array-variables
'programing' 카테고리의 다른 글
| 매개 변수로 배열 포인터를 함수에 전달 (0) | 2023.09.28 |
|---|---|
| Galera 노드가 떨어지면 커밋에서 '잠금을 시도할 때 데드락 발견 (0) | 2023.09.28 |
| 32비트 cmd.exe에서 64비트 파워셸을 시작하는 방법은? (0) | 2023.09.28 |
| 동적 매개변수를 사용한 Oracle Lag 함수 (0) | 2023.09.28 |
| jQuery를 사용하여 원소의 위쪽에서 px로 수직 거리를 찾는 방법 (0) | 2023.09.28 |