Excel宏循环单元格,如果值为True,则将数据输出到另一个工作表

Excel宏循环单元格,如果值为True,则将数据输出到另一个工作表,excel,excel-2007,excel-formula,vba,Excel,Excel 2007,Excel Formula,Vba,我正在做一个项目,在这个项目中,用户将经历一系列“测试”,并检查测试是通过还是失败。如果测试失败,他们会选中第二列中的“失败”框,并记录测试失败的原因。设置如下所示: Sub AutoFilterAndCopy() Dim shtNew As Worksheet, shtOrg As Worksheet Set shtOrg = ActiveSheet Set shtNew = Sheets.Add With shtOrg.range("A1").CurrentRegion .Aut

我正在做一个项目,在这个项目中,用户将经历一系列“测试”,并检查测试是通过还是失败。如果测试失败,他们会选中第二列中的“失败”框,并记录测试失败的原因。设置如下所示:

Sub AutoFilterAndCopy()
Dim shtNew As Worksheet, shtOrg As Worksheet

Set shtOrg = ActiveSheet
Set shtNew = Sheets.Add

With shtOrg.range("A1").CurrentRegion
    .AutoFilter Field:=3, Criteria1:="True"

    .Columns(1).SpecialCells(xlCellTypeVisible).Copy shtNew.Cells(2, 1)
    .Columns(4).SpecialCells(xlCellTypeVisible).Copy shtNew.Cells(2, 2)

    .AutoFilter
End With

End Sub

我需要编写一个宏,这样当用户完成“测试”并单击“生成报告”按钮时,它会在另一个工作表上编译失败测试的摘要和相关注释,例如:

我有开发背景,但不熟悉Excel宏的语法。我已经做了一些调查,但我想我应该先问一下这里。基本上,我需要在“fail”列中的所有单元格中运行一个循环。每次我输入“true”值时,都会将右边单元格中注释的内容和左边两个单元格的测试名称输出到另一个工作表中。让我知道你是如何做到这一点的,以及你需要什么样的功能-我非常感谢你的帮助

更新:在此处回答:

我创建了3个命名范围:测试、失败和注释。很简单,只需在地址框中选择测试列表(不包括标题)和类型测试。已创建命名范围。对你的失败和笔记也要这样做。 然后,在第2页:

[A3]=INDEX(tests,MATCH(TRUE,fails,0))
[B3]=INDEX(notes,MATCH(TRUE,fails,0))
[A4]=IFERROR(INDEX(OFFSET(tests,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[B4]=IFERROR(INDEX(OFFSET(notes,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[A3]=INDEX(tests,MATCH(TRUE,fails,0))
[B3]=INDEX(notes,MATCH(TRUE,fails,0))
[A4]=IFERROR(INDEX(OFFSET(tests,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[B4]=IFERROR(INDEX(OFFSET(notes,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")

(尽可能向下复制A4和B4。)

运行自动筛选以获得真实值,然后将可见单元格复制到新工作表中。其VBA代码如下所示:

Sub AutoFilterAndCopy()
Dim shtNew As Worksheet, shtOrg As Worksheet

Set shtOrg = ActiveSheet
Set shtNew = Sheets.Add

With shtOrg.range("A1").CurrentRegion
    .AutoFilter Field:=3, Criteria1:="True"

    .Columns(1).SpecialCells(xlCellTypeVisible).Copy shtNew.Cells(2, 1)
    .Columns(4).SpecialCells(xlCellTypeVisible).Copy shtNew.Cells(2, 2)

    .AutoFilter
End With

End Sub
此处的解决方案:

我创建了3个命名范围:测试、失败和注释。很简单,只需在地址框中选择测试列表(不包括标题)和类型测试。已创建命名范围。对你的失败和笔记也要这样做。 然后,在第2页:

[A3]=INDEX(tests,MATCH(TRUE,fails,0))
[B3]=INDEX(notes,MATCH(TRUE,fails,0))
[A4]=IFERROR(INDEX(OFFSET(tests,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[B4]=IFERROR(INDEX(OFFSET(notes,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[A3]=INDEX(tests,MATCH(TRUE,fails,0))
[B3]=INDEX(notes,MATCH(TRUE,fails,0))
[A4]=IFERROR(INDEX(OFFSET(tests,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")
[B4]=IFERROR(INDEX(OFFSET(notes,MATCH(A3,tests,0),0),MATCH(TRUE,OFFSET(fails,MATCH(A3,tests,0),0),0)),"")

(尽可能将A4和B4向下复制。)

您在skype上吗?我能快点跟你说清楚吗?非常感谢你的身份证是什么?还是你的位置?