2017-04-09 12 views
0

私はExcelテーブルを持っており、データの削除とExcelテーブルへのデータの挿入を自動化しようとしています。Excel VBAを使用してテーブルにデータを挿入する

私は同じテーブルにデータ(約11 000行)を挿入しようとすると、それは非常に遅く、私のExcelのクラッシュ、しかし私のテーブルから

Sub Macro2() 
    Application.ScreenUpdating = False 
    Sheets("Report").Select 
    ActiveSheet.ListObjects("Report").HeaderRowRange.Select 
    'Remove the filters if one exists. 
    If ActiveSheet.FilterMode Then 
    Selection.AutoFilter 
    End If 

    With Worksheets("Report").ListObjects("Engagement_report") 
     .DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete 
     .DataBodyRange.Rows(1).SpecialCells(xlCellTypeConstants).ClearContents 
    End With 

End Sub 

を私のデータを削除するには、このVBAコードを使用しています。私は、リサイズ関数iがすべての行を削除するので、私は再びデータを挿入するとき、それは範囲とゆっくりとしているので、再実行されているかどうかはわかりません。

誰もがこれを助ける提案はありますか?

あなたの助けに感謝

+0

あなたは 'DELETE'を使用する必要がありますか? 'ClearContents'を使って十分ではありませんか?最初から複数の「選択」を取り除くこともできます –

+0

そのワークシートには他にどんなことがありますか?あなたが持っているものを別のシートに移動し、ListObjectを使用せずに専用のワークシートを11K行だけに保管してください。 – Variatus

+0

こんにちは@Variatus、私はこの特定のシートの数式を持っており、私はこれらの数式を使って異なるビジネス条件と基準を評価しているので、このデータ全体を表の範囲に変換しました。 – Adam

答えて

0
Public Sub addDataToTable(ByVal strTableName As String, _ 
    ByVal strData As String, ByVal col As Integer) 

ActiveSheet.Table(strTableName).Select 
If strTableName.Rows.Count = 1 Then 
    strTableName(Row, col).Value = strData 
Else 
    strTable(LastRow, col).Value = strData 
End If 
End Sub 

NB:私はこれがあなたに参考になると思います。

+0

これは私のために働いた! – Adam

+0

それは私の喜びです。エイドリアン、お願いしてください。☺ –

0

このサンプルコードは、複数の行を挿入するのに役立ちます。

サブInsrtRw2()範囲としてFST範囲として 薄暗いCは、範囲としてC2

集合C = Cells.Find( "試験"、MatchCase:= Falseを、_ ルックアット:= xlWhole、のlookin。 = xlValues)

ないCは C(2).EntireRow.Resize(10).Insert

セットFST再び= ​​C

何もしない場合:

セットC2 = Cells.FindNext(C)

ないc2は何も次に

c2.Address <の場合> c.Address _ そしてc2.Address <> fst.Addressその後

されていない場合C2(2).EntireRow.Resize(10).Insert

集合C = C2

後藤再び

END IF END IF エンド

の場合End Subの

関連する問題