确定合并单元格的列范围

时间:2015-11-02 16:03:36

标签: excel vba excel-vba range excel-2010

我的目标是在一行中平均一些列。

该表按月列出,每列一周,每行列有数字的行数。

该表在顶部分为几个月,其中月份名称标题位于四个或五个列的合并单元格中,具体取决于月份跨越的周数(星期六和星期日在月末开始和月末省略)到每月四到五周)。

例如,今年11月(2015年)包括五个工作周。标题的范围是O11:S11 - 合并的单元格。

在这个跨越年份的表格上方,有一个单元格可以平均项目时间与开销相关的小时数。

在我11月的例子中,我将平均O43:S43。我想在一个单元格中键入或选择要平均的月份,然后从包含November的合并单元格中找到该月的列范围。

例如,如果关键单元格为D9,持有11月,并且我想将平均值放在E9中,并且该年份的行数跨越K11 - W11,那么解决此问题的可能方法是什么? ?

我尝试使用INDEX MATCH公式,但这让我无处可去。我需要写一个VBA函数(我想)。

1 个答案:

答案 0 :(得分:0)

您可以找到合并的单元格然后调整范围。移除rng.Select行,它就是检查它是否正确计算。

 Sub Button1_Click()
    Dim Fm As Range, Av As Range, rng As Range
    Dim s As String, x

    s = Range("D9").Value
    Set Fm = Rows(11).Find(s, LookIn:=xlValues)

    If Not Fm Is Nothing Then
        Set Av = Fm.MergeArea
        Set rng = Av.Offset(32).Resize(, Av.Columns.Count)
        rng.Select    'remove later
        x = Application.WorksheetFunction.Average(rng)
        Range("E9").Value = x
    End If

End Sub