2013-10-14 5 views
1

VBA 함수를 사용할 수는 있지만 함수가 어떻게 작동하는지 이해할 수 없으므로 도움이됩니다. 계산 방법이 너무 길기 때문에 (기본 산술 * 15 000 행)VBA Excel - 변수 "Double"을 함수로 사용합니다.

내 문제는 다음과 같이 정의 된 두 변수 Qty_Level의 정의에서 온다 : I는 다음과 같이 정의 된 변수를 본 적이 없다

Dim Qty_Level(30) As Double 

, 유사한 괄호의 부부와 함께 기능. 여기에 내 코드입니다 :

Sub cumul() 

    Dim i As Long 
    Dim j As Integer 
    Dim Qty_level(30) As Double 
    Dim Col_Niveau As Integer 
    Dim Col_Quantite As Integer 
    Dim Col_Resultat As Integer 

    i = InputBox("Veuillez indiquer le numéro de la première à analyser (numéro de  ligne Excel)", "Ligne de départ") 
    Col_Niveau = InputBox("Veuillez indiquer le numéro de la colonne contenant les niveaux", "Niveaux") 
    Col_Quantite = InputBox("Veuillez indiquer le numéro de la colonne contenant les quantités", "Quantités") 
    Col_Resultat = InputBox("Veuillez indiquer le numéro de la colonne contenant les résultats", "Résultats") 

    Do While IsEmpty(Cells(i, Col_Niveau)) = False 

    If IsNumeric(Cells(i, Col_Quantite)) = True Then 

     Qty_level(Cells(i, Col_Niveau).Value) = Cells(i, Col_Quantite).Value 
     Cells(i, Col_Resultat).Value = 1 

     For j = 1 To Cells(i, Col_Niveau).Value 
      Cells(i, Col_Resultat).Value = Cells(i, Col_Resultat).Value * Qty_level(j) 
     Next j 

    End If 

    i = i + 1 

Loop 


End Sub 

나는 이것이 어떻게 작동하는지 이해하지 않으며, 특히 For 루프는 Dim Qty_Level(30) As Double 정적 배열 Qty_Level이 두 유형의 31 개 요소를 포함라고 선언하고 함께 Double(j)

+4

'Dim Qty_level (30) As Double은 Qty_level을 Double의 30 요소 배열로 선언합니다. –

+1

실제로 31 요소 배열로 @PatriciaShanahan : – varocarbas

+0

옙 31 VBA에 오신 것을 환영합니다 –

답변

3

와 함께 작동하는 방법 (배정 밀도 부동 소수점), 하한 0과 상한선 30. (모듈의 맨 위에 Option Base 1을 적어 두지 않은 경우, 하한은 1이고 합계는 30 요소가 있지만 나는 의심 스럽습니다.)

나는 당신을 본다. 현재 루프에서 j = 1에 반복을 시작하면 실제로 요소 0에 액세스하지 못합니다. 괄호와 배열과 그 안에서의 값을 정의 할 때, 그것은 그 안에 포함 된 많은 요소 배열을 만듭니다

Dim QtyLevel(1 To 30) As Double 
+0

'Option Base 1'에 대해 + 1을 멋지게 설명했습니다. :) –

+0

그래, 너는 초록색 V도받을 자격이있어.하지만 나는 Ratafia가 좀 더 격려 받아야한다고 느꼈다. 의견을 주셔서 감사합니다, 그것은 정말 도움이 될 수도 있습니다! –

+0

@alexc : 회원을 격려하기 위해 항상 upvote 할 수 있지만 선택해야하는 답변은 항상 귀하의 질문에 대한 답변을 제공해야합니다 ;-) 이것은 미래의 방문자가 실제로 어떤 도움을 주 었는지 확인하는 것입니다. 같은 질문 ... –

4

: 그래서 명시 적으로는 하한을 지정하는 좋은 연습입니다. 최대 요소 값으로 30을 사용하여 치수를 지정하면 0과 30 사이의 변수에 대해 (배열은 기본적으로 0으로 시작하므로) 배열 내부에 최대 31 개의 값을 저장할 수 있습니다. MSDN에 따라 이중으로 치수를 지정하면 Visual Basic에서 사용할 수있는 최대 및 최소 수를 저장할 수 있습니다.

루프가하는 일은 레벨 열의 숫자를 기반으로 수량 열에서 수량 값을 가져온 다음 지금까지 저장된 각 수량 값을 곱하여 결과 셀에 저장하는 것입니다.

따라서 수량이 2, 4, 6, 5 인 경우 레벨 3 일 때 결과 셀은 48을 표시하고 레벨 4는 240을 표시해야합니다. 1에서 레벨 값까지 반복하면 double 배열의 저장된 수량의 전체 양 (숫자 만 포함). 레벨 열은 1과 30 사이의 숫자 만 포함해야합니다. 그렇지 않으면 qty_level 배열에서 오류가 발생합니다.

+3

+1 여분의 마일 설명에 대한 설명 :) –