Excel-在整个工作表中搜索包含文本字符串的单元格(公式)

时间:2018-07-31 08:14:33

标签: excel excel-vba formula

希望这是一个相当容易的过程。

我有一个Excel文件,该文件的开头有一个“摘要”标签,然后是几个包含每周信息的标签。随着星期的进展,我可能会在每周工作表中添加其他行,这意味着总数不一定总是位于每张工作表的同一单元格中。

我正在寻找一个公式,该公式将在指定的每周工作表中搜索“总计”一词并返回其地址,然后我可以将其构建为其他公式,以便“摘要”工作表将填充正确的值,而不管是否已添加其他行。

1 个答案:

答案 0 :(得分:0)

嗨,您的问题应该始终包含您当前的工作,并且理想情况下还应该包含一些代码。但是鉴于这是一个相当基本的问题,而且您是新手,所以我决定回答


放在一边……:

Option Explicit
Private Function get_total () As Range
    Dim ws As Worksheet: Set ws = Sheets("Your Sheet Name") 'set your own
    Dim lc as Long
    lc = ws.Cells(1, Columns.Count).End(xlToLeft).Column
    ' determines last column with data

    'some other useful variables
    Dim lr as Long 'last row
    Dim temp as Range 'find result
    Dim i as Long ' loop index

    For i = 1 to lc
       lr = ws.Cells(Rows.Count, i).End(xlUp).Row
       Set temp = ws.Range(Cells(1, i), Cells(lr, i)).Find("Grand Total", lookin:=xlValues)
       If Not temp Is Nothing Then 'if we found grand total, return it
            Set get_total = temp 'return range of result
       End If
     Next i

   Exit Function 'if no Range found, exit function ("return;")

End Function

从技术上讲,这就是答案,但对于实际使用,您可能希望将其可视化

因此,使用此功能,您将遍历所有列,并在找到总计时停止,否则,如果没有找到“ return”,则将

很明显,这只是一个函数,因此,如果要打印结果,可以创建如下过程:

Private Sub print_grand_total() 
  Dim res as Range
  Set res = get_total
  If Not res Is Nothing Then
     MsgBox("Found in Cell[" & res.row & "," & res.Column & "]")
  Else
     MsgBox("Grand Total not found!")
  End If
End Sub

因此,我设置了一个示例表:

enter image description here

运行过程后,它成功返回结果:

enter image description here

  

注意: 小的实现预见:在第一行为空的情况下(这将无法正确检测到最后一列),此方法将不起作用。根据数据范围的开始位置来编辑lc代码