Excel VBAで名前付きテーブルを参照することは可能ですか?Excel vbaでテーブルを参照するにはどうすればよいですか?
仮にこれが...
Sheets("Sheet1").Table("A_Table").Select
可能性が...たぶん
Excel VBAで名前付きテーブルを参照することは可能ですか?Excel vbaでテーブルを参照するにはどうすればよいですか?
仮にこれが...
Sheets("Sheet1").Table("A_Table").Select
可能性が...たぶん
これを私は、リストの対象となるテーブルのいくつかの言及を見てきましたが、それは同じことである場合、私はわからないんだけどテーブルの範囲の変換テーブル
を作成するあなたの
を助けることができる(this answerで説明したように)Excel 2003の同じコードで始まります:
Sub CreateTable()
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes).Name = _
"Table1"
'No go in 2003
ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2"
End Sub
さらに、オブジェクトを参照する変数を定義すると便利です。たとえば、
Sub CreateTable()
Dim lo as ListObject
Set lo = ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$1:$D$16"), , xlYes)
lo.Name = "Table1"
lo.TableStyle = "TableStyleLight2"
...
End Sub
あなたはおそらくそれをすぐに見つけるでしょう。上記に加えて
、あなたがこの(「YourListObjectNameは」あなたのテーブルの名前です)行うことができます。
Dim LO As ListObject
Set LO = ActiveSheet.ListObjects("YourListObjectName")
をしかし、私はあなたが上だリストオブジェクトを参照する場合にのみ動作することを考えますアクティブシート。
異なるワークシートのピボット・テーブルが参照する1つのワークシートのリスト・オブジェクト(表)を参照したいので、私はあなたの質問を見つけました。リスト・オブジェクトはワークシート・コレクションの一部であるため、リスト・オブジェクトが参照するためにリスト・オブジェクトが存在するワークシートの名前を知る必要があります。したがって、リストオブジェクトがあるワークシートの名前を取得するには、ピボットテーブルのソースリストオブジェクト(再びテーブル)の名前を取得し、リストを含むワークシートが見つかるまで、ワークシートとリストオブジェクトをループします私が探していたオブジェクト。
Public Sub GetListObjectWorksheet()
' Get the name of the worksheet that contains the data
' that is the pivot table's source data.
Dim WB As Workbook
Set WB = ActiveWorkbook
' Create a PivotTable object and set it to be
' the pivot table in the active cell:
Dim PT As PivotTable
Set PT = ActiveCell.PivotTable
Dim LO As ListObject
Dim LOWS As Worksheet
' Loop through the worksheets and each worksheet's list objects
' to find the name of the worksheet that contains the list object
' that the pivot table uses as its source data:
Dim WS As Worksheet
For Each WS In WB.Worksheets
' Loop through the ListObjects in each workshet:
For Each LO In WS.ListObjects
' If the ListObject's name is the name of the pivot table's soure data,
' set the LOWS to be the worksheet that contains the list object:
If LO.Name = PT.SourceData Then
Set LOWS = WB.Worksheets(LO.Parent.Name)
End If
Next LO
Next WS
Debug.Print LOWS.Name
End Sub
誰かがもっと直接的な方法を知っているかもしれません。
@AndrewDがapplication.rangeメソッドの潜在的な欠点について書いたことを考えると、これはテーブル名だけを使ってテーブルのListObjectを取得する唯一の信頼できる方法のようです。 – ChrisB
**あなたのコードではおそらく**あなたのコードで** _PivotTable_を作成する以外に、あなたのやり方はできるだけ直接的だと思います。私はあなたの答えに_PivotTable_名前が与えられた_ListObject_を取得する汎用関数を追加しようとしましたが、明らかにそれは正直ではありません。だから私は新しい[質問](https://stackoverflow.com/questions/46106440/how-can-i-get-the-listobject-object-of-a-pivottable/46106441#46106441)を作成し、答えとしてのコード。しかし、_PivotTable_ Nameから_ListObject_を取得できるようにする必要があるため、私はここで答えをアップアップしました。 – GlennFromIowa
質問は、テーブルを参照することが可能ですが、テーブルを追加する方法ではありません。あなたは、部品の
Dim LO As ListObject
Set LO = Sheets("Sheet1").ListObjects("A_Table")
LO.HeaderRowRange.Select ' Select just header row
LO.DataBodyRange.Select ' Select just data cells
LO.TotalsRowRange.Select ' Select just totals row
:
Sheets("Sheet1").ListObjects("A_Table").Range.Select
か(のみテーブル内のデータなど)の部分を選択する:だから
Sheets("Sheet1").Table("A_Table").Select
の作業と同等はこの文になりますそれらを選択する前にヘッダー行と合計行が存在するかどうかをテストしたい場合があります。
真剣に、これはSOのVBAでテーブルを参照する上で唯一の質問ですか? Excelのテーブルは非常に意味がありますが、VBAで作業するのはとても難しいです!
VBAクエリでテーブルを使用するにはどうすればよいですか?「select * from [sheet1 $] where col1 = 'x'」 – Vikky
@Vikky参照するVBAクエリには慣れていませんが、それ。この種類のクエリのドキュメント(MSDNなど)へのリンクはありますか?これは、OLEやODBC経由で別のアプリケーションやツールからExcelを参照するときに使用されますか?もしそうなら、どのアプリケーションですか? – GlennFromIowa
まずはお返事ありがとうございます。私は私の質問のための解決策を見つけることができます、エクセルシート内のテーブルは、oledbを使用して使用することができます。これは私を助けてくれる記事のリンクです。http://chandoo.org/wp/2012/04/02/using-excel-as-your-database/ – Vikky
テーブルを参照する「適切な」方法は、ワークシートからリストオブジェクトを取得することです。つまり、SheetObject.ListObjects(ListObjectName)
です。
シートを使用せずにテーブルを参照する場合は、ハックApplication.Range(ListObjectName).ListObject
を使用できます。
注:このハックは、Excelは、常にテーブルと同じ名前を持つテーブルのDataBodyRangeの名前付き範囲を作成しているという事実に依存しています。ただし、この範囲の名前はに変更できます。テーブル名を編集すると名前がリセットされるため、何かしたくないはずです。また、ListObjectが関連付けられていない名前付き範囲を取得することもできます。あなたは間違った名前は、あなたがラッパーを作成したい場合があり得るとき、Excelのない、非常に便利 - 1004のエラーメッセージが与えられた
...
Public Function GetListObject(ByVal ListObjectName As String, Optional ParentWorksheet As Worksheet = Nothing) As Excel.ListObject
On Error Resume Next
If (Not ParentWorksheet Is Nothing) Then
Set GetListObject = ParentWorksheet.ListObjects(ListObjectName)
Else
Set GetListObject = Application.Range(ListObjectName).ListObject
End If
On Error GoTo 0 'Or your error handler
If (Not GetListObject Is Nothing) Then
'Success
ElseIf (Not ParentWorksheet Is Nothing) Then
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found on sheet '" & ParentWorksheet.Name & "'!")
Else
Call Err.Raise(1004, ThisWorkBook.Name, "ListObject '" & ListObjectName & "' not found!")
End If
End Function
また、いくつかの良いListObject情報here。
BTW 'Application.Names'のテーブルDataBodyRangeの範囲名を見つけてください!しかし、それらは 'Application.Range(...)'を使って確実にアクセスできます。 – AndrewD
この方法は、必要なテーブルを含むワークブックが現在アクティブな場合にのみ機能するようです。何らかの形で別のファイルがアクティブな状態でコードを実行すると、このメソッドは失敗します。 'ActiveSheet'オブジェクトと同じアプローチです。 –
あなたの提案されたVBAの巨大なファンではありませんが、あなたが落とした外部リンクはテーブルとテーブルの部分を参照する方法の素敵な要約でした。 – Pork
いいですね、ありがとう! –