如果单元格值以特定字符串开头,如何从范围中复制行?

时间:2016-09-07 03:06:01

标签: excel excel-vba excel-2013 vba

我有一个包含1000个地理参数的列表 - 根据文件类型的不同而不同 - 在一列中。我想复制以字符串“ 文件,几何,要素计数,图层SRS,GEOGCS,PROJGCS 等等...”(图像)开头的行下一栏。很少有参数,例如 - PROJGCS可能存在于一个文件中而不存在于另一个文件中。

enter image description here

1 个答案:

答案 0 :(得分: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

你可以用香蕉代替其他东西,或者如果你已经有一个标题就把它留下来。在这里,我假设您的数据只是在第1行开始的A列,并且任意地将它放在G列中,这个和您放置标准的位置可以更改而没有任何不利影响。