2012-08-22 7 views
4

VBA 코드를 사용하여 Excel의 빈 테이블에 큰 값 집합을 삽입 할 수 있어야합니다. 코드가 지금까지 어떻게 작동하는지 보여줍니다.VBA를 사용하여 Excel 테이블에 값을 삽입하는 적절한 방법은 무엇입니까?

먼저, 사용자는 사용자 폼에 값을 입력합니다. 그런 다음 코드는 테이블을 지우고 코드에있는 조회 기준에 따라 숫자 범위를 찾습니다. 검색된 데이터는 모두 단일 열에 포함되며 배열처럼 저장됩니다.

여기에서 모든 값을 표 (Policy #)의 특정 열에 배치해야하므로 많은 수의 행이 검색된 데이터 집합에 포함되도록 표 행을 확장해야합니다. (필요한 경우 "AC"로 별도로 저장 한 수를 가지고 있습니다.) 삽입하려는 열 헤더는 "Policy #"입니다.

코드의 현재 테이블에 빈 행만 있음을 명심하십시오. 어떻게 데이터를 올바르게 삽입 할 수 있습니까? 나는 시도했다

range("commissionstatement[Policy #]").value = Als 

그러나 그 doesnt 일. Als는 값의 배열입니다. 일반적으로 배열을 삽입하려면 크기가 같은 범위에 삽입해야합니다. 그래서 AC로 이미 행 개수를 가져 왔습니다.

나는 또한 range("commissionstatement").listobject.listrows을 사용하여 시도했지만 그 중 하나가 작동하지 않습니다.

어떤 조언이 필요합니까? 나는

range("commissionstatement").listobject.listrows.add() 

데이터를 삽입하여 다음에 ...이 같은 내가 실제로 데이터를 배치하기 전에, 추가 데이터 메신저의 수와 같은 테이블에 행의 수를 삽입해야하는 건가?

자세한 정보가 필요한 경우 알려주십시오. 감사!

답변

6

당신은 엑셀 2010을 사용하는 가정이 시도 이것은 나를 위해 일한

Sub AddToList() 
    Dim lo As ListObject 
    Dim ws As Worksheet 
    Dim Als() As Variant 
    Dim rng As Range 

    Set ws = ActiveSheet 

    ' Get reference to table 
    Set lo = ws.ListObjects("MyTable") ' <--- Update this with your table name 

    If lo.InsertRowRange Is Nothing Then 
     ' List already has data 
     Set rng = lo.ListRows.Add.Range 
    Else 
     ' List is empty 
     Set rng = lo.InsertRowRange 
    End If 

    ' *** Remove one of these two lines *** 
    ' If Als is a 1 dimensional array 
    rng.Cells(1, lo.ListColumns("Policy #").Index).Resize(UBound(Als) - LBound(Als) + 1, 1) = Application.Transpose(Als) 

    ' If Als is 2 dimensional array (1 to rows, 1 to 1) 
    rng.Cells(1, lo.ListColumns("Policy #").Index).Resize(UBound(Als, 1), 1) = Als 
End Sub 
+0

나는 그 모습을 좋아한다. 분명히 그 사진을 찍을 것이다. 일시적으로 트릭을 만들 수있는 임시 해결 방법을 만들었지 만, 예를 들어 테이블의 크기가 제대로 조정 된 것처럼 역동적이고 유연하지는 않습니다. –

0

(이전 버전의 Excel에서 작동하지 않을 수 있습니다). 또한 배열의 데이터로 빈 ListObject를 채 웁니다. 이 작업을하려면 이 2 차원 배열이어야합니다.

Dim matriu() As Variant 
Dim ls As ListObject 

Set ls = Hoja1.ListObjects(1) 

' Retrieve data 
matriu = Hoja1.Range("Origen") 

' Erease all rows of the ListObject, if needed 
ls.DataBodyRange.Delete 

' This line is needed in order for the next line 
' not to throw an error if the listobject is empty. 
ls.ListRows.Add 

' Fill the ListObject with all data in one operation to reduce execution time  
Range(ls.DataBodyRange.Cells(1, 1), _ 
    ls.DataBodyRange.Cells(UBound(matriu, 1), UBound(matriu, 2))) = matriu 
관련 문제