0

VBA 新手,这是我第一次发布问题。我有一个包含大约 50k 条记录的工作簿。数据包括大约。2700 只美国股票,每两周更新一次数据,以查看价格、交易量等。我将每两周更新一次数据,当我这样做时,我将消除不符合某些标准的证券。在每次更新时,可能有 30 - 50 只证券需要删除,因此为每个证券过滤并删除该证券的所有行非常耗时。

我希望能够在名为“过滤器”的工作表上维护一个表格,每次我需要删除某些证券时,我可以手动填充我的“删除”,然后运行一个宏来过滤这些证券并删除所有行。

到目前为止,这是我尝试将数据过滤到所需行的方法。我似乎无法让它工作。我在下面的粗线中收到错误。

我有一个名为“过滤”的表格,在表格“过滤器”(第五张)中命名,原始数据在一张名为“数据”的表格中(第一张)。任何帮助是极大的赞赏。

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
4

2 回答 2

0

我设置了一个快速测试工作簿,并通过将其中一行更改为:

Set sedol = ws2.Range("Filtering[Stock]")

我在Filters工作表上创建的Insert, Table然后是Table Tools, Table Name Filtering)有一个标题行,列标签为Stock。我不清楚您创建的表格的确切性质,但这对我有用。我相信您只需要更改引用表中数据列的方式即可。如果你不能让它快速工作,生成一个宏,记录去股票列,然后点击选择表中的股票名称列。这可能会清除从表中选择数据列的任何语法问题。Ctrl+<spacebar>

于 2014-11-03T16:20:40.907 回答
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范围对象。如果您有一个 table ListObject,请尝试将分配更改为sedo1,如下所示:

Set sedo1 = ws2.ListObjects("Filtering").DataBodyRange
于 2014-11-03T16:07:00.190 回答