2015-11-02 34 views
1

我的目标是平均一行中的多个列。确定合并单元格的列范围

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

表格在顶部分为几个月份,月份名称标题包含在四列或五列的合并单元格中,具体取决于月份的月份数(周六和周末在本月的开始和结束时省略导致每月四或五周)。


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

在这张跨越一年的表格上方,有一个单元格用于平均项目时间花费的小时数与平均开销。

在我的11月份的例子中,我将平均O43:S43。我想在一个单元格中键入或选择要平均的月份,然后从保存为November的合并单元格中查找该月的列范围。 W11,什么是可能的方法来解决这个 -

例如,如果关键细胞是D9,拿着十一月,我要放置在E9的平均值,和几个月的年度该行从K11跨越题?

我试过使用INDEX MATCH公式,但是这让我无处可去。我需要编写一个VBA函数(我认为)。

+1

不知道我真的明白这个问题,但任何时候我想使用公式,我避免使用合并的单元格。你可以做的是在周和合并的月份单元格之间插入一行,并将每月的月份放在每周以上(即在工作周以上的时候,你会有5个单元格,而'11月份'的单元格)。然后你可以使用SUMIF,AVERAGEIF等 – Jaycal

+0

Jaycal说 - 我避免了合并的单元格。选择单元中心更容易处理。例如,您可以检查一个单元格是否属于合并范围的一部分,例如,“Debug.Print Sheet1.Range(”A1“)。MergeCells' - 将返回TRUE/FALSE,并通过Debug.Print Sheet1.Range(“A1”)。MergeArea.Address' –

+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 
相关问题