2016-10-20 5 views
0

이것은 this question.의 확장입니다. 비슷한 사전 작업을하고 싶지만 사전 객체에 익숙하지 않아서 응답에 제공되는 코드가 매우 향상되어 있으므로 그것을 이해하는 데 어려움이 있습니다. 예를 들어, 일부 구문은 명확하지 않으며 변수 이름은 매우 명확하지 않고 직관적이지 않습니다. 나는 원래의 문제가 해결 되었기 때문에 새로운 질문을하고있다.사전 및 배열을 사용하여 셀 값을 계산합니다.

링크 된 질문에서와 똑같은 일을하고 싶지만 H 열의 셀 값을 계산하는 대신 A 열의 항목에서 AOI 항목을 계산하고 종료를 무시하고 I 열에서 차단하고 인쇄합니다. 번호 열 U.

해결 방법에 대한 설명을 제공하면 (나는 무슨 일이 일어나고 있는지 이해할 수 있습니다), 그 점을 이해할 수있을 것입니다. 아니면 적어도 이전 솔루션에서 무슨 일이 일어나는지 설명하십시오.

내가 그것을 알아 냈어요

And here is a screenshot of my data

+0

이것은 매우 구체적인 해결책처럼 보입니다. 실제로 무엇을하려고합니까? 샘플 데이터를 그림/테이블에 게시 할 수 있습니까? 더 나은 응답을 얻을 것입니다 – User632716

+0

불행히도 화면 인쇄를 볼 수 없으므로이 질문을 완전히 이해하지 못합니다. 그러나 Tim의 코드를 사용하는 다른 게시물에서는 이해할 수없는 코드의 특정 부분에 대해 구체적으로 설명 할 수 있습니까? – Zac

+0

@ Zac이 질문에 파일을 다운로드 할 수있는 링크를 첨부했습니다. 나는 질문과 함께 데이터의 스크린 샷으로 편집 할 것이다. 나는 라인의 문법을 이해하지 못한다. 'Dim d, r As Long, k, resBT()'나는 d와 r을 카운터로, resBT()는 배열이지만 k는? 나는 전에 이렇게 쓰여진 희미한 진술을 보지 못했습니다. 'dBT (k) = dBT (k) + IIf (d (r, COL_ACT) <>' ', 1, 0)'매개 변수를 얻지 못하고 IIF 인수를 결코 알지 못합니다. 전에. – shecodes

답변

0

Here is a link to my most up to date sample data and code.

. 여기 코드는 다음과 같습니다

Dim dBT As Object 'global dictionary 

Sub buttonpresscount() 

    'constants for column positions 
    Const COL_BLOCK As Long = 1 
    Const COL_TRIAL As Long = 2 
    Const COL_ACT As Long = 7 
    Const COL_AOI As Long = 8 

    Dim rng As Range, lastrow As Long, sht As Worksheet 
    Dim d, r As Long, k, resBT() 

    Set sht = Worksheets("full test") 
    lastrow = Cells(Rows.Count, 3).End(xlUp).Row 
    Set dBT = CreateObject("scripting.dictionary") 

    Set rng = sht.Range("B7:I" & lastrow) 

    d = rng.Value 'get the data into an array 

    ReDim resBT(1 To UBound(d), 1 To 1) 'resize the array which will 
             ' be placed in ColT 

    'get unique combinations of Block and Trial and pressedcounts for each 
    For r = 1 To UBound(d, 1) 
     k = d(r, COL_BLOCK) & "|" & d(r, COL_TRIAL) 'create key 
     dBT(k) = dBT(k) + IIf(d(r, COL_ACT) <> "", 1, 0) 
    Next r 

    'populate array with appropriate counts for each row 
    For r = 1 To UBound(d, 1) 
     k = d(r, 1) & "|" & d(r, 2) 'create key 
     resBT(r, 1) = dBT(k)   'get the count 
    Next r 

    'place array to sheet 
    sht.Range("T7").Resize(UBound(resBT, 1), 1) = resBT 

    'clear dictionary 
    dBT.RemoveAll 

'count AOI entries 
For r = 1 To UBound(d, 1) 
     k = d(r, COL_BLOCK) & "|" & d(r, COL_TRIAL) 'create key 
     dBT(k) = dBT(k) + IIf(d(r, COL_AOI) = "AOI Entry", 1, 0) 
    Next r 

    'populate array with appropriate counts for each row 
    For r = 1 To UBound(d, 1) 
     k = d(r, 1) & "|" & d(r, 2) 'create key 
     resBT(r, 1) = dBT(k)   'get the count 
    Next r 

    'place array to sheet 
    sht.Range("U7").Resize(UBound(resBT, 1), 1) = resBT 


End Sub 

나는 기본적으로, 이전 코드를 복제 관련 컬럼에 대해 다른 일정을 추가 컬럼에 해당 참조를 변경하고, 계산 작업 inbetween 사전을 취소해야했다.