如何浏览工作表并查找值,获取列,然后计算值在该列中出现的次数

时间:2018-12-20 16:41:12

标签: excel

我正在处理发送给我的数据。工作表始终包含相同的标题,尽管它们并不是真正的标题,因为它不是以表格形式出现的,但是列会改变每次拉动,因此它永远不在同一列中,因此我无法像我一样进行索引匹配我过去我需要在不将数据转换为表的情况下使其工作,因为其他使用此方法的人不知道该怎么做。有没有一种方法可以搜索工作表以找到包含该值的单元格,捕获该列地址,然后计算该列包含一个字母的次数?

我有一个首页excel页面,该页面记录了发生某件事的次数。当前,我使用此公式= COUNTIF('UDO'!AJ:AJ,“ Y”)。它起作用的唯一原因是我不能将其设置为数组,因为该列并不总是AJ,所以我总是必须手动更改它,并且想使其自动化。因此,我希望能够搜索包含文本值示例信息的工作表:“ Review Required FY *”,并获取包含该值的列(它应该是唯一值),然后我要查看该列并计数是否在单元格中标记了“ Y”或“ y”。工作表的长度和列号总是变化的。我考虑过使用HLookUp,但无法正常工作。我也无法使索引匹配正常工作,因为我不知道“审核”选项卡将包含多少数据或列顺序。

因此,在“主要”选项卡上,我有一个单元格,它计算要审核的文件数。我想转到“审核”选项卡,查找“需要审查的年度报告*”,捕获该列并计算“ Y”次或“ y”在那里。我希望能够将其设置为独自完成。

我目前没有任何代码,因为我找不到任何有效的代码。

2 个答案:

答案 0 :(得分:1)

使用VBA

Option Explicit

Sub Looper()

Dim ws As Worksheet, Found As Range, LR As Long

For Each ws In Worksheets
    Set Found = ws.Cells.Find("Review Required FY*")
        If Not Found Is Nothing Then
            LR = ws.Cells(ws.Rows.Count, Found.Column).End(xlUp).Row
            MsgBox Application.WorksheetFunction.CountIf(ws.Range(ws.Cells(1, Found.Column), ws.Cells(LR, Found.Column)), "Y")
        End If
    Set Found = Nothing
Next ws

End Sub

答案 1 :(得分:0)

假设标题仅出现一次,您可以找出标题所在的行,可以使用像这样的数组公式(使用Ctrl + Shift + Enter进行应用):

=MAX(ROW(A1:A10)*COUNTIF(OFFSET(A1:Z1,ROW(A1:A10)-1,0),"Review Required FY*"))

(在A:Z的前10行中查找)

您可以将其结果输入到查找中以找到列号。

编辑-像这样:

enter image description here

第一个公式需要使用Ctrl + Shift + Enter输入,而其他两个则不需要。

最后一个公式中的1000是关于标题下方可能有多少数据的最佳猜测-只要您不尝试计算超过末尾的值,就可以安全地将其设置为大得多。的床单。