5

VBAコードを使用して、Excelの空のテーブルに大量の値のセットを挿入できるようにする必要があります。これまでのコードの仕組みは次のとおりです。

まず、ユーザーがユーザーフォームに値を入力します。次に、コードはテーブルをクリアしてから移動し、コードにすでに含まれているルックアップ基準に基づいて数値の範囲を見つけます。取得されたデータはすべて単一の列に含まれ、配列のように格納されます。

ここから、すべての値をテーブルの特定の列に配置する必要があります(ポリシー番号)。したがって、テーブルの行を拡張して、取得したデータのセットに含まれる行の数を増やします。(必要に応じて、カウントはすでに「AC」として個別に保存されています)挿入する列のヘッダーは「ポリシー番号」です。

コードの現時点ではテーブルに空白行しかないことを念頭に置いて、データを正しく挿入するにはどうすればよいですか?私はもう試した

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

しかし、それは機能しません。ちなみに、Alsは値の配列です。通常、配列を挿入するには、同じサイズの範囲に挿入する必要があります。そのため、行数をすでにACと見なしています。

私も使ってみましたが、それもうまくいきませんrange("commissionstatement").listobject.listrows

何かアドバイス?このように実際にデータをそこに配置する前に、追加するデータの数に等しい数の行をテーブルに挿入する必要がありますか...

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

続いてデータを挿入しますか?

さらに情報が必要な場合はお知らせください。ありがとう!

4

2 に答える 2

6

Excel 2010 を使用していると仮定して、これを試してください (以前のバージョンの Excel では動作しない可能性があります)。

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
于 2012-08-23T05:54:47.637 に答える
0

これは私にとってはうまくいきました。また、空の ListObject に配列のデータを入力しています。これが機能するには、配列matriuが 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
于 2014-10-02T11:53:12.427 に答える