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

时间:2012-10-08 18:01:37

标签: excel excel-vba excel-2007 excel-formula vba

我正在开展一个项目,用户将浏览一系列“测试”并检查测试是通过还是失败。如果测试失败,他们会检查第二列中的“失败”框,并记录该测试失败的原因。设置如下:

Worksheet 1 - Top Image

我需要对宏进行编程,以便当用户完成“测试”并单击“生成报告”按钮时,它会编译失败测试的摘要以及另一个工作表上的相关注释,例如:

Worksheet 2 - Summary of Failed Tests (Bottom Image)

我有开发背景但不熟悉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)),"")

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

1 个答案:

答案 0 :(得分:1)

运行自动过滤器以获取真值,然后将可见单元格复制到新工作表中。 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)),"")

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