2014-11-01 3 views
0

vba와 관련하여 도움이 필요할 때 초보자입니다. 기본적으로 하나의 시트에 테이블이 있고 다른 시트 (같은 통합 문서)에 매일 변경되는 목록이 있으므로 그에 따라이 테이블을 업데이트하거나 추가하거나 제거해야합니다. 내가 처음 생각한 아이디어는 다음과 같습니다.목록을 테이블과 비교하여 Excel VBA를 사용하여 새 항목을 출력하십시오.

1) Do I need to determine the size of the table/list since it's changing 
2) Shall I make use of vlookup combined with a nested loops to compare each cell of the list with each cell of the table? 

모든 의견을 환영합니다.

+0

현재 귀하의 질문은 매우 모호합니다. 지금까지 시도한 코드와 함께 샘플 데이터를 제공하면 도움이 될 것입니다. 또한, 이것은 피벗 테이블 (Pivot Table)이 할 수있는 것처럼 들립니다. 먼저 피벗 테이블이 필요한 것을 성취 할 수 없다면 먼저 살펴보고 VBA를 시도해보십시오. – BobbitWormJoe

답변

1

방금 ​​며칠 전에 이와 비슷한 질문에 답했습니다.
Here is the link이 예제에서는 배열을 기반으로했습니다. 이 값을 약간 수정하여 결과를 얻을 수 있습니다.

  1. 예, 검사 할 목록의 마지막 행을 결정해야합니다. - GetLastRow (아래 참조)
  2. vLoopup은 일치 또는 일치하는 인덱스만큼 효율적이지 않습니다. worksheetFunction.Match를 사용하여 첫 번째 발생으로 건너 뛰거나 일치하는 항목이 있는지 확인할 수도 있습니다.

단계 고려해야 할

  • 는 검토하고 목록의 마지막 행을 결정합니다. - GetLastRow

  • 두 번째 목록의 마지막 행을 결정 각 항목에 대한 두 번째 시트 각 항목에 대한 루프를 수행

  • 는 원래 목록의 배열을 생성합니다 (아래 참조) 처음에는. - Loop 내에서 Loop를 수행하면 WorksheetFunction을 사용하여 얼마나 많은 시간을 절약 할 수 있습니까? 은 Match 또는 무언가를 사용하려고 할 수 있습니다. 그냥 백그라운드에서 작업을 수행합니다. 하지만 여전히 작업을하고 있습니다 및 코드 작업을 수행 할 수있는 비슷한 작업. 는 한 번에 더 큰 크기 하나 의 설정 배열에 대한 ReDim을 사용 -

  • 는 타의 추종을 불허하는 항목 배열을 만듭니다.

  • 일치하지 않는 항목을 원본 시트에 추가하십시오. (아래 참조)

대부분이 동일한 내용입니다. 한 번에 하나씩 셀을 순환하여 배열에 항목을 추가합니다. 하나의 값 = 다른 값인지 확인. 그렇다면 match = true .. 그런 종류의 일. 다른 예를 보려면 링크를보십시오.

이렇게하려면 .Range 대신 .Cells를 사용하십시오. .Cells (행 #, Col #) 형식은 루핑에 적합합니다. Row # 또는 column #에 대한 변수를 가지고 루프를 증가 시키십시오. 그것은 시트에서 DOWN 화살표를 클릭하는 것과 실질적으로 동일합니다. 문자열로 수식을 정의 할 수도 있습니다.

Dim r As Long ' Or Integer although I've read that Long is more efficient. 
r = 4 
Sheets("Sheet1").Cells(r, 3) = "Hello There C4!" 
'Result = Sheet1!C4 = Hello There C4 

예 :이 원래 목록에 타의 추종을 불허하는 항목을 추가 실행하는 어떤 것이다. 이미 존재하지 않는 것들만 추가하고 싶을뿐입니다.

Private Sub AddToSheet() 

    Call GetLastRow 
    r = lastRow + 1 
    i = 0 

    For i = 0 To n 
     Sheets("Sheet1").Cells(r, 1) = unMatchedArray(i) 
     r = r + 1 
    Next i 

End Sub 

Private Sub GetLastRow() 

    ' checking Range("A1:A65536") 
    lastRow = Sheets("Sheet1").Cells(65536, 1).End(xlUp).Row 

End Sub 
관련 문제