CSV からインポートしたワークシートがいくつかあります。データには、UNIX エポックに基づくタイムスタンプが含まれています。新しいシートをインポートするたびに、タイムスタンプを人間が読める時間に変換する列を追加する必要があります。
マクロの記録を使用して開始したところ、次の結果が得られました。
Sub addnamedtable()
'
' addnamedtable Macro
' Takes the imported data, converts it to a table and then adds a column which uses a formula to read the epoch based date stamp
'
Range("A1:N5614").Select
ActiveSheet.QueryTables("Temp6").Delete
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$N$5614"), , xlYes).Name = _
"Table2"
Range("Table2[#All]").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
ActiveWindow.ScrollColumn = 11
Range("O2").Select
ActiveCell.FormulaR1C1 = "=[@[s:timestamp]]/(60*60*24*1000)+""1/1/1970"""
Range("Table2[[#Headers],[Column1]]").Select
ActiveCell.FormulaR1C1 = "Real_Date"
Range("O2").Select
End Sub
次に、記録した特定のワークシートだけでなく、どのワークシートや範囲でも機能するように、詳細を取り出して置き換え始めました。これは私が今持っているものです。
Sub addnamedtable()
'
' Takes the imported data, converts it to a table and then adds a column which uses a formula to read the epoch based date stamp
'
Dim tempname As String
Set tempname = ActiveSheet.Name
Cells.Select
ActiveSheet.QueryTables(ActiveSheet.Name).Delete
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$N$5614"), , xlYes).Name = _tempname
Range(tempname & "[#All]").Select
Range("O2").Select
ActiveCell.FormulaR1C1 = "=[@[s:timestamp]]/(60*60*24*1000)+""1/1/1970"""
Columns("O:O").Select
Cells.SpecialCells(xlLastCell).Select
Columns(ActiveCell.Column).Select
Selection.NumberFormat = "m/d/yyyy h:mm"
Range(tempname & "[[#Headers],[Column1]]").Select
ActiveCell.FormulaR1C1 = "Date"
End Sub
シート名を値として tempname 文字列に割り当てることはできません。その後、ワークブックでの将来の競合を避けるために、シートに基づいてテーブルに名前を付ける必要があります。
最後の部分もおそらくナンセンスですが、マクロはそれをテストするためにそこまで実行されていません。
EDIT @Head of Cateringによる回答に続く
Sub addnamedtable()
'
' addnamedtable Macro
'
Dim tempname As String
Dim temprange As Range
tempname = ActiveSheet.Name
Cells.Select
Set temprange = Selection
ActiveSheet.QueryTables(ActiveSheet.Name).Delete
ActiveSheet.ListObjects.Add(xlSrcRange, Range(temprange), , xlYes).Name = _
tempname
Range(tempname & "[#All]").Select
Range("O2").Select
ActiveCell.FormulaR1C1 = "=[@[s:timestamp]]/(60*60*24*1000)+""1/1/1970"""
Columns("O:O").Select
Cells.SpecialCells(xlLastCell).Select
Columns(ActiveCell.Column).Select
Selection.NumberFormat = "m/d/yyyy h:mm"
Range(tempname & "[[#Headers],[Column1]]").Select
ActiveCell.FormulaR1C1 = "Real_Date"
End Sub
これを実行するとエラーが発生します
オブジェクト '_Global' の Blockquote メソッド 'Range' が失敗しました
これは、の値を範囲として認識しないことを意味すると思いますtemprange
。試してみtemprange.address
ましたが、フィードバックなしでExcelがロックされました