Vba 确定合并单元格的列范围

Vba 确定合并单元格的列范围,vba,excel,range,excel-2010,Vba,Excel,Range,Excel 2010,我的目标是平均一行中的许多列 该表按月列出,每列一周,每列有若干行的数字 该表从顶部分为几个月,根据月份跨度的多少,月份名称标题位于四列或五列的合并单元格中(在每个月的四周或五周之前的月份开始和结束时省略周六和周日) 例如,今年(2015年)11月包括五个工作周。报头的范围是O11:S11-合并的单元 在这张横跨全年的表格上方,有一个单元格,用于计算项目时间与管理费用的平均小时数 在我11月份的例子中,我的平均值是O43:S43。我想在一个单元格中键入或选择要求平均值的月份,然后从按住十一月的

我的目标是平均一行中的许多列

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

该表从顶部分为几个月,根据月份跨度的多少,月份名称标题位于四列或五列的合并单元格中(在每个月的四周或五周之前的月份开始和结束时省略周六和周日)


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

在这张横跨全年的表格上方,有一个单元格,用于计算项目时间与管理费用的平均小时数

在我11月份的例子中,我的平均值是O43:S43。我想在一个单元格中键入或选择要求平均值的月份,然后从按住
十一月的合并单元格中查找该月份的列范围

例如,如果关键单元格是D9,以11月为单位,我想将平均值放在E9中,一年中的月数从K11到W11,那么解决这个问题的可能方法是什么


我试着使用索引匹配公式,但那毫无用处。我想我需要编写一个VBA函数。

你可以找到合并的单元格,然后调整范围。删除
rng。选择
行,它只是用来检查它是否正确计算

 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

您可以找到合并的单元格,然后调整范围。删除
rng。选择
行,它只是用来检查计算是否正确

 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

我不确定我是否真正理解这个问题,但每当我想使用公式时,我都会避免使用合并的单元格。您可以做的是在周和合并月份单元格之间插入一行,并将月份放在每周上方(即,您将有5个单元格,月份“11月”位于工作周上方)。然后你可以使用SUMIF,AVERAGEIF,etcAs Jaycal说-我避免合并单元格。跨选择单元格居中更容易使用。您可以检查单元格是否属于合并范围的一部分,例如,
Debug.Print Sheet1.range(“A1”)。合并单元格
-将返回TRUE/FALSE,并使用
Debug.Print Sheet1.range(“A1”)查找合并单元格的范围.MergeArea.Address
同意这些意见-任何可用的解决方案都比重新构造工作簿以避免合并单元格要复杂。我不确定我是否真正理解这个问题,但每当我想使用公式时,我都会避免使用合并单元格。您可以做的是在周和合并月份单元格之间插入一行,并将月份放在每周上方(即,您将有5个单元格,月份“11月”位于工作周上方)。然后你可以使用SUMIF,AVERAGEIF,etcAs Jaycal说-我避免合并单元格。跨选择单元格居中更容易使用。您可以检查单元格是否属于合并范围的一部分,例如,
Debug.Print Sheet1.range(“A1”)。合并单元格
-将返回TRUE/FALSE,并使用
Debug.Print Sheet1.range(“A1”)查找合并单元格的范围.MergeArea.Address
同意这些意见-任何可用的解决方案都比重新构造工作簿以避免合并单元格更复杂。