ボタンをクリックした後にテーブル(ListObject)を作成するためにExcelでVBAコードを実行しています。 列は、ヘッダー名のコレクションを使用して動的に追加されます。 テーブルを作成する前に、既存のテーブルが削除され、エラーが発生しないようにします。Excel VBA:ワークシートに列を追加することなくListObjectに列を追加する
ListColums.Add
を使用する際の問題は、シート全体に列を追加し、既存の列を右に押すことです。したがって、ボタンをクリックするたびに、シートにはより多くの列が表示されます。これはあまりきれいではありません。ボタンは非常に頻繁に押されるので、Excelワークシートの限界を押さえたくありません。次のように私のビルド機能が動作します。
Function buildTable(wsName As String, tblName As String, clmns As Collection, Optional tableRange As String)
' * If Range is not specified choose "$A$1"
If IsMissing(tableRange) Then
position = "$A$1"
End If
' * Build the table based on the passed parameters
ThisWorkbook.Worksheets(wsName).ListObjects.Add(xlSrcRange, ThisWorkbook.Worksheets(wsName).Range(tableRange), , xlYes).Name = tblName
' * Declare and define tblName as ListObject in Worksheet wsName
Dim tbl As ListObject
Set tbl = ThisWorkbook.Worksheets(wsName).ListObjects(tblName)
' * Declare and define the columns of table tblName
Dim clmn As ListColumns
Set clmn = tbl.ListColumns
' * Replace the first column name with the first item in our column Collection clmns
tbl.HeaderRowRange(1, 1).Value = clmns.Item(1)
' * Now loop through the rest of the passed header name collection clmns. Start with 2, because 1 was already set in the last step
X = 2
For X = 2 To clmns.Count
' * Add Item X to the table (String from the passed collection clmns) as column.
clmn.Add.Name = clmns(X)
Next X
End Function
私はこのようにそれを呼ぶことにします:
' * Declare and fill my Collection of headers
Dim clHeaders As New Collection
clHeaders.Add "MyFirstColumn"
clHeaders.Add "MySecondColumn"
clHeaders.Add "MyThirdColumn"
' * Call the builTable Function
Call buildTable("Sheet1", "MyTable", clHeaders)
私はすでにThisWorkbook.Worksheets("Sheet1").Columns("AS").EntireColumn.Delete
を試してみましたが、これは、すでに空の列を空にし、それらを削除しません。.. 。
ボタンをクリックするたびにシートの最後に列が増えることなくこれを行う方法はありますか?
まず、シート内の列の数を増やすことはできません。常に同じままです。次に、 'EntireColumn.Delete'は、セルの列全体を削除しますが、以前と同じように、列の総数は常に同じになります。 – Rory
ありがとう、あなたは私を正しい考えに導いた! – 30000MONKEYS