나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내

작성자:  

 z킥킥 (trillionnt)

추천:  2
파일:     practice(2).xlsm (278KB) 조회:  3317
제목:   데이터를 배열/리스트로 저장 후 사용 (엑셀 vba)
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007):엑셀 2016

* 아래줄에 질문을 작성하세요 >>

배열에 열 데이터 (시트1에 색칠된 부분)를 저장해두고 필터 조건으로 활용하려고 합니다. 그런데 자꾸 '9' 런타임오류 아래첨자가 잘못되었습니다. 가 발생하여 질문드립니다. 

제가 하려는 목적을 간략히 설명드리면, 조건 2가지(날짜/라벨)를 충족하는 데이터의 합계를 구하려고 합니다. 
조건이 날짜 한 가지였을 때는 Sumif 함수로 간단히 계산하였는데 2가지일 때는 방법을 모르겠어서 
추가 시트로 데이터를 가져온 후 필터를 적용하고, Sumif를 사용한 뒤 다시 sheet1으로 복사하는 방법을 쓰려고 했습니다. 

라벨 142가지에 대해서 같은 작업을 하려고 하구요. 첫 2가지 라벨 11, 12에 대해서는 제가 수동으로 작업하여 붙여놓았습니다. 

간단한 수정만 하면 돌아갈 것 같은데 지적해주시면
참 도움이 많이 될 것 같습니다.
 
[불량 게시물 신고]  
조삿갓코딩은 너무 난해하게 되어 있어서 구체적으로 무엇을 원하는지 잘 모르겠습니다.

다만, 두 가지 이상의 조건을 만족하는 것만 합계를 원하신다면 SUMIFS라는 함수가 있으니, 굳이 VBA 코드와 씨름하지 않아도 되겠는데요?

SUMIFS(합계를 구할 범위, 조건1 범위, 조건1, 조건2 범위, 조건2, ....)

예를들면,
=SUMIFS($D:$D,$A:$A,"20160313",$E:$E,13)
은 A열의 날짜가 20160313이고 E열의 카테고리종류가 13인
매출액(D열)의 합계를 계산합니다.

=SUMIFS($D:$D,$A:$A,">="&L1,$A:$A,"<="&M1,$E:$E,13)
과 같이 쓸 수도 있고, 이것은 L1셀에 입력한 날짜부터
L2셀에 입력한 날짜 사이에 발생한 해당 카테고리의
매출 합계를 계산해 줍니다.

주소 지정에 시트명을 추가하거나 행번호를 한정할 수 있고
필요에 따라 절대참조, 혼합참조, 상대참조 등을 활용하면 됩니다.
07-10 (21:08)
삭제 ■신고
조삿갓그래도 꼭 VBA를 쓰고 싶다면

배열을 크기를 정하지 않고 동적 배열로 선언했을 경우
실제로 사용하기 전에 예상 크기를 계산해서
ReDim으로 크기를 정해 주어야 합니다. 즉,
lastrow 값 계산과 For 루프 사이에 다음과 같이 삽입해야 합니다.

    Dim branch() As Long
    lastrow = Sheet1.Cells(Sheet1.Rows.Count, "E").End(xlUp).Row
    ReDim branch(lastrow) As Long
    For Z = 2 To lastrow

매크로 실행해 보니 실행시간도 무척 오래 걸리네요.
내장함수로 해결하시는 것이 훨씬 나을 것 같습니다


07-10 (21:14)
삭제 ■신고
        
  

작성일 : 2017-07-10(11:36)
최종수정일 : 2017-07-10(11:36)