2016-07-17 5 views
0

첫 번째 질문은 여기에 있습니다.

테이블의 행을 통해 작동하는 루프를 만들고 각 열의 셀 값을 선언 된 변수에 할당하려고합니다. 이름이 지정된 범위 입력 셀을 사용하여 논리 문과 계산에 이러한 변수를 사용하고 출력을 피벗 테이블의 기초가되는 워크 시트로 전송하는 것이 계획입니다.

사용중인 레거시 통합 문서 템플릿에는 명명 된 범위가없는 vlookup, if 문 등의 힙이 있습니다. 그것은 지저분 해 누군가 누군가 수식을 깨뜨린 열/행을 삽입했습니다.

몇 년 전 MSAccess 쿼리 및 vba와 비슷한 작업을 수행했지만 Excel 또는 이후 버전에서는 많은 작업을 수행하지 못했습니다.

지금까지, 그것은 또한은 MSDN 참조에 내가 발견 한 다음과 같은 도움이 https://stackoverflow.com/a/21490552https://stackoverflow.com/a/12497229/6598860테이블의 행을 반복하고 명명 된 변수에 셀 값을 할당하십시오.

'Declare variables 
Dim Var1 As String 'To store Value from Table Column "Col1" 
Dim Var2 As String 'To store Value from Table Column "Col2" 
Dim Var3 As Variant 'To Store Value from Table Column "Date" 
Dim SD As String 'To Store Value from Named Input Cell "StartDate" 
Dim ED As String 'To Store Value from Named Input Cell "EndDate" 
Dim counter As Integer 'Counter for pasting to row in worksheet "Dump" 

'Set Date Range 
SD = Range("StartDate").Value 
ED = Range("EndDate").Value 

'Set Counter 
counter = 1 

'Loop through rows in table "tblMyData"on Worksheet "Data" and 
'assign values to variables (this bit is breaking down) 
Dim lo As Excel.ListObject 
Dim lr As Excel.ListRow 
Set lo = Worksheets("Data").ListObjects("tblMyData") 
For Each lr In lo.ListRows 
    Var1 = Range(lr.Range, lo.ListColumns("Col1").Range).Value 
    Var2 = Range(lr.Range, lo.ListColumns("Col2").Range).Value 
    Var3 = Range(lr.Range, lo.ListColumns("Date").Range).Value 

    'Logic Statement e.g. 
    If SD > Var3 > ED Then 
     Worksheets("Dump").Activate 
     Cells(counter, 1).Value = Var1 * Var2 
     Cells(counter, 2).Value = Var3 
    Else 

    End If 
Next 

좀 더 설명 뭔가 변수 이름과 열 이름을 대체 할 것이다 그러나 희망이 내가 누구인지 보여 성취하려고 노력한다. 도움이나 조언을 많이 주시면 감사하겠습니다. 감사

+1

'해체'란 무슨 뜻입니까? 컴파일 또는 런타임 오류? 예기치 않은 결과가 있습니까? –

+0

컴파일 오류 및 예기치 않은 결과가 있습니다. Var1 AS 문자열을 사용하여 런타임 오류 '13': 형식이 일치하지 않습니다. 및 "Var1 = Range (lr.Range, lo.ListColumns ("Col1 "). 범위) .Value" – damnthing

+0

죄송합니다 : 컴파일했습니다 오류 및 예기치 않은 결과. Var1 AS 문자열을 사용하여 디버그 중에 과 "Var1 = Range (lr.Range, lo.ListColumns ("Col1 "). 범위) .Value" 가 강조 표시되었습니다. 런타임 오류 '13'이 발생했습니다. Var1을 Variant로 변경하여 대상 워크 시트에 (반복적으로) 붙여 넣을 테이블의 첫 번째 열 제목에서 값을 가져 왔습니다. "Col1"이라는 코드의 이름에도 불구하고 실제로 반환하려는 테이블의 첫 번째 열이 아니며 변수 Var1로 전달할 각 데이터 행의 값을 찾고 있습니다. – damnthing

답변

2

변경

Range(lr.Range, lo.ListColumns("Col1").Range).Value

Intersect(lr.Range, lo.ListColumns("Col1").Range).Value.

이렇게하면 열과 행의 교차점에서 단일 셀을 참조 할 수 있습니다.

0

이 유일한 오류 인 경우 내가 잘 모르겠지만, 나는 아래의 코드 조각 경우 바닥을 교체 할 것 :

'Logic Statement e.g. 
If SD > Var3 And Var3 > ED Then 
    With Worksheets("Dump") 
     .Cells(counter, 1).Value = Var1 * Var2 
     .Cells(counter, 2).Value = Var3 
    End With 
Else 
    'if you are not doing anything with the Else you can just remove it 
End If 
+0

주석 주셔서 감사합니다; 내가 그것을 끝내지 않으면 나는 그것을 제거 할 것이다. – damnthing

관련 문제