删除包含excel vba的行

时间:2014-11-03 15:47:26

标签: excel vba excel-vba rowdeleting

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

2 个答案:

答案 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>以选择表中的库存名称列。这可能会清除从表中选择数据列的任何语法问题。