2014-01-06 2 views
1

아래 VBA 코드는 작업을 수행하지만 조 변경 부분에서 약 3 초를 잃고 있습니다.GetRows에서 행 조 변경

3 초를 잃지 않고 동일한 결과를 얻을 수있는 방법이 있습니까, 아니면 SQL 쿼리 또는 getrows 프로세스에서 얻을 수 있습니까?

Sub LoadData() 
Dim strCon, srtQry As String, tmpArray, tmpArray2, R As Variant, i, j As Long 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

strCon = "DRIVER={MySQL ODBC 5.2 ANSI Driver};" & _ 
     "SERVER=localhost;" & _ 
     "DATABASE=tbname;" & _ 
     "USER=root;" & _ 
     "PASSWORD=pass;" & _ 
     "Port=3306;" & _ 
     "Option=3" 

cn.Open strCon 

srtQry = "SELECT * FROM `tbname` WHERE `FileDay` = 20131220" 

Set rs = cn.Execute(srtQry) 

tmpArray = rs.GetRows 

cn.Close 

tmpArray2 = TransposeArray(tmpArray) 

End Sub 

TransposeArray :

몇 최적화가 있습니다
Public Function TransposeArray(InputArr As Variant) As Variant 

Dim RowNdx, ColNdx, LB1, LB2, UB1, UB2 As Long, tmpArray As Variant 

LB1 = LBound(InputArr, 1) 
LB2 = LBound(InputArr, 2) 
UB1 = UBound(InputArr, 1) 
UB2 = UBound(InputArr, 2) 

ReDim tmpArray(LB2 To LB2 + UB2 - LB2, LB1 To LB1 + UB1 - LB1) 

For RowNdx = LB2 To UB2 
    For ColNdx = LB1 To UB1 
     tmpArray(RowNdx, ColNdx) = InputArr(ColNdx, RowNdx) 
    Next ColNdx 
Next RowNdx 

TransposeArray = tmpArray 

End Function 
+0

용서해주십시오.하지만 TransposeArray는 무엇입니까? –

+0

@Doug Glancy. 내 excel-vba 배열의 내 버전은 코드를 바꿉니다. 편집하고 포함합니다. –

답변

1

당신이

  1. 선언을 적용 할 수 있습니다 : 각 변수
  2. 중복 계산을 제거 의 데이터 유형을 지정해야 in Redim
  3. 이 배열
  4. 로 변종을 지정하고 가장 큰 영향을위한 루프 구조의 경우 컴팩트를 사용하여 사용하십시오 Sub보다는 Function

이 함께 50 개 이상에 의해 트랜스의 실행 시간을 줄일 수 이

TransposeArray tmpArray, tmpArray2 
같은 %

Public Sub TransposeArray(ByRef InputArr() As Variant, ByRef ReturnArray() As Variant) 
    Dim RowNdx As Long, ColNdx As Long 
    Dim LB1 As Long, LB2 As Long, UB1 As Long, UB2 As Long 

    LB1 = LBound(InputArr, 1) 
    LB2 = LBound(InputArr, 2) 
    UB1 = UBound(InputArr, 1) 
    UB2 = UBound(InputArr, 2) 

    ReDim ReturnArray(LB2 To UB2, LB1 To UB1) 

    For RowNdx = LB2 To UB2 
    For ColNdx = LB1 To UB1 
     ReturnArray(RowNdx, ColNdx) = InputArr(ColNdx, RowNdx) 
    Next ColNdx, RowNdx 

End Sub 

전화를3210

+0

그레이트 !. 하지만 컴파일 오류가 발생합니다 : '형식 불일치 : 배열 또는 사용자 정의 형식이 필요합니다.' 내가 뭘 놓치고 있니? –

+0

코드의 줄은 무엇입니까? –

+0

바로'TransposeArray tmpArray, tmpArray2'를 호출 할 때'tmpArray'를 강조 표시합니다 –