VBA新手,这是我第一次发帖提问。我有一个包含大约50k记录的工作簿。数据由约。 2700美元股票,每周两次数据更新,以查看价格,交易量等。我将每两周更新一次数据,当我这样做时,我将消除不符合某些标准的证券。在每次更新时,可能需要删除30-50个证券,因此过滤每个证券并删除该安全性的所有行非常耗时。
我希望能够在名为“过滤器”的工作表上维护一个表格,每次我需要删除某些证券时,我可以手动填充“删除”,然后运行一个过滤到这些证券的宏并删除所有行。
这是我到目前为止尝试过的,只是将数据过滤到所需的行。我似乎无法让它发挥作用。我在下面的粗线中出现错误。
我在Sheet“Filters”(第五张)中有一个名为“Filtering”的表,原始数据位于名为“Data”的表格中(第一张)。任何帮助是极大的赞赏。
Sub deleterows()
Dim Filtering As Variant
Dim ws1 As Worksheet, ws2 As Worksheet
Dim sedol As Range, rngData As Range
Set ws1 = Worksheets("Data")
Set ws2 = Worksheets("Filters")
Set rngData = ws1.Range("$D$1").CurrentRegion
**Set sedol = ws2.Range("Filtering")**
Filtering = sedol.Value
rngData.AutoFilter Field:=1, _
Criteria1:=Application.Transpose(Filtering), _
Operator:=xlFilterValues
答案 0 :(得分:0)
你可以适应这样的事情。我假设范围“过滤”是一个单列范围,其中包含要删除的项目。
Dim r as Integer
Set sedol = ws2.Range("Filtering")
For r = 1 to sedo1.Rows.Count
Filtering = sedol(r).Value
rngData.AutoFilter Field:=1, _
Criteria1:=Filtering, _
Operator:=xlFilterValues
rngData.SpecialCells(xlCellTypeVisible).EntireRow.Delete
Next
以上是Name
范围对象。如果您有一个表ListObject
,请尝试将作业更改为sedo1
,如下所示:
Set sedo1 = ws2.ListObjects("Filtering").DataBodyRange
答案 1 :(得分:0)
我设置了一个快速测试工作簿,并通过将该行更改为:
立即使其工作 Set sedol = ws2.Range("Filtering[Stock]")
我在过滤器工作表上创建的表(Insert, Table
然后Table Tools, Table Name
过滤)有一个标题行列标签为 Stock 。我不清楚你创建的桌子的确切性质,但这对我有用。我相信您只需要改变引用表中数据列的方式。如果无法快速运行,请生成一个记录进入库存列的宏,然后点击Ctrl+<spacebar>
以选择表中的库存名称列。这可能会清除从表中选择数据列的任何语法问题。