查找特定文本的所有工作表,如果匹配,则将相同行但不同列值的值写入主工作表

时间:2018-02-07 12:01:54

标签: excel vba excel-vba excel-formula

  • 检查所有床单
  • 如果在工作表的第五行中找到特定文本(例如,是),则从该行获取数据(但不同的列)并将数据写入主工作表 我该怎么办?

我发现下面的代码对我来说相对有用,但不是100%符合我的要求。请帮助我。

此代码中的问题是: - 我在特定范围内有特定文本(是)(e6:e16)。  我想要的只是检查是的。如果找到,则写入A和A列的值。将所有单词找到的行放入主表并检查到最后一页。

Sub SeachSheets()

    Dim FirstAddress As String, WhatFor As String
    Dim Cell As Range, Sheet As Worksheet

    WhatFor = InputBox("What are you looking for?", "Search Criteria")
    If WhatFor = Empty Then Exit Sub

    For Each Sheet In Sheets
        If Sheet.Name <> "SEARCH" Then
            With Sheet.Columns(1)
                Set Cell = .Find(WhatFor, LookIn:=xlValues, LookAt:=xlPart)
                If Not Cell Is Nothing Then
                    FirstAddress = Cell.Address
                    Do
                        Cell.EntireRow.Copy _
                        Destination:=Sheets("SEARCH").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
                        Set Cell = .FindNext(Cell)
                    Loop Until Cell Is Nothing Or Cell.Address = FirstAddress
                End If
            End With
        End If
    Next Sheet

    Set Cell = Nothing
End Sub

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:0)

对于一张纸,单独使用配方即可轻松完成,例如

= INDEX(1:1,MATCH("yes",5:5,0))

这会在当前工作表的第5行中找到yes的第一个实例,并返回第1行和同一列中的值。

一个选项是将此公式放在工作簿中每个工作表上的某个位置作为“辅助单元格”(例如单元格Z99),然后在主工作表上的某处使用公式来检查所有这些辅助单元格,例如

= IFERROR(Sheet1!Z99,IFERROR(Sheet2!Z99,IFERROR(Sheet3!Z99,IFERROR(...,"no match"))))

当然,也可能没有辅助细胞,但公式变得混乱:

= IFERROR(INDEX(Sheet1!1:1,MATCH("yes",Sheet1!5:5,0)),
  IFERROR(INDEX(Sheet2!1:1,MATCH("yes",Sheet2!5:5,0)),
  IFERROR(INDEX(Sheet3!1:1,MATCH("yes",Sheet3!5:5,0)),
  IFERROR(...,"no match"))))

如果你想要一种没有明确调用每个工作表的方法,那么可能需要VBA。只需发布一个没有VBA的解决方案,看看这是否适合您。