首页 > 解决方案 > 如何复制特定列中“是”的行的特定列

问题描述

客观的:

在名为“RPdata”的表中的“风险合作伙伴数据”表中存储有数据。在表中有一个名为“AICOW”的列,它包含两个结果,是或否。

在名为“Calc Data”的第二张表中,我想构建一个宏,该宏从最后一个填充单元格之后开始(但忽略数据之间为空的单元格),并且对于每一行都有“是”的结果AICOW,它将相应的 [RPdata@Parish] 复制到 A 行。

我所追求的结果是,在 A 列的末尾,宏将只为带有 AICOW(是)的教区添加教区名称,而不为其他教区添加教区名称。

我尝试过,但我的代码不起作用,我不确定它是否正确

Set Source = Sheet("Risk Partner Data")
Set c.FormulaR1C1 = _
    "=if("RPdata[@[AICOW]]"=""Yes"","Yes",0)
Set Target = [RPdata@Parish]
Range("A1").End(xlDown).Offset(1, 0).Select
Selection.For each c in source.range(RPdata[@AICOW])
If c = "yes" Then
Source.Rows(c.Row).Copy Target.Rows(a)
a = a + 1
End If
End c

标签: excelvba

解决方案


不要循环,而是考虑一次性过滤和复制“教区”列中的可见单元格。

另外,考虑使用内置ListObjectListColumn对象。

Sub CopyParishes()
    Dim riskPartnerDataTbl As ListObject
    Dim parishCol As ListColumn, AICOWcol As ListColumn
    Dim copyRng As Range

    Set riskPartnerDataTbl = ThisWorkbook.Worksheets("Risk Partner Data").ListObjects("RPdata")
    With riskPartnerDataTbl
        Set parishCol = .ListColumns("Parish")
        Set AICOWcol = .ListColumns("AICOW")
        .Range.AutoFilter Field:=AICOWcol.Index, Criteria1:="Yes"
    End With

    On Error Resume Next
    Set copyRng = parishCol.DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not copyRng Is Nothing Then
        copyRng.Copy

        With ThisWorkbook.Worksheets("Calc Data")
            .Cells(.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With

        Application.CutCopyMode = False
    End If

    riskPartnerDataTbl.Range.AutoFilter Field:=AICOWcol.Index
End Sub

推荐阅读