2015-11-02 33 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 
相關問題