【问题标题】:How to copy rows from a range if the cell value starts with particular string?如果单元格值以特定字符串开头,如何从范围中复制行?
【发布时间】:2016-09-07 03:06:01
【问题描述】:

我有一个包含 1000 个地理参数的列表 - 这些参数会因文件类型而异 - 在单个列中。我想复制以字符串“File, Geometry, Feature Count, Layer SRS, GEOGCS, PROJGCS, etc...”(图片)开头的行到下一栏。很少有参数,例如 - PROJGCS 可能存在于一个文件中,但不存在于另一个文件中。

【问题讨论】:

  • 看起来你想要一个过滤器。见support.office.com/en-us/article/…
  • 最好沿着列向下走,通过遍历列表来检查值是否符合条件。如果不符合条件,则删除该行。
  • 我正在使用过滤器 -> 高级条件,通过创建关键字列表。它完美地工作。但是 Tim Edwards 在答案中给出的代码是完全一样的。

标签: excel excel-2013 vba


【解决方案1】:

您可以使用高级过滤器,如下所示:

Sub FilterThings()
'Add header row and call it something
Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").FormulaR1C1 = "Bananas"

'Create named range to use in filter
ActiveWorkbook.Names.Add Name:="Source", RefersToR1C1:=Replace(Range("A1").CurrentRegion.Address(True, True, xlR1C1, True), "[" & ActiveWorkbook.Name & "]", "=")

'Add in criteria
Range("P1").FormulaR1C1 = "Bananas"
Range("P2").FormulaR1C1 = "=""File*"""
Range("P3").FormulaR1C1 = "=""Geometry*"""
Range("P4").FormulaR1C1 = "=""Feature Count*"""
Range("P5").FormulaR1C1 = "=""Layer SRS*"""
Range("P6").FormulaR1C1 = "=""GEOGCS*"""
Range("P7").FormulaR1C1 = "=""PROJGCS*"""

'Create named range to use in filter
ActiveWorkbook.Names.Add Name:="Criteria", RefersToR1C1:=Replace(Range("P1").CurrentRegion.Address(True, True, xlR1C1, True), "[" & ActiveWorkbook.Name & "]", "=")

'Filter to Location
Range("Source").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("Criteria"), CopyToRange:=Range("G1")

'Delete Criteria column
Columns("P:P").Delete Shift:=xlToLeft

'Delete Header Bananas row
Rows("1:1").Delete Shift:=xlUp

'Delete named ranges
ActiveWorkbook.Names("Criteria").Delete
ActiveWorkbook.Names("Extract").Delete
ActiveWorkbook.Names("Source").Delete
End Sub

如果你已经有一个标题,你可以用 Bananas 代替其他东西,或者把那部分放在外面。在这里,我假设您的数据只是从第 1 行开始在 A 列中,并且任意将其放在 G 列中,这和您放置 Criteria 的位置可以更改而不会产生不利影响。

【讨论】:

  • 工作就像一个魅力。非常感谢。
猜你喜欢
  • 2021-10-06
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多