2015-11-02 9 views
1

Моя цель - усреднить количество столбцов в одной строке.Определить диапазон столбцов объединенных ячеек

Таблица указана за месяц, одна неделя за столбец и ряд строк с номерами в каждом столбце.

Таблица разделена на месяцы сверху, с заголовком названия месяца в объединенной ячейке из четырех или пяти столбцов в зависимости от того, сколько недель занимает месяц (по субботам и воскресеньям опущены в начале и конце месяца что приводит к четырем или пяти неделям в месяц).

Например, ноябрь этого года (2015) включает в себя пять недель работы. Диапазон заголовка - O11: S11 - объединенная ячейка.

Над этой таблицей, которая охватывает год, есть ячейка, чтобы усреднить количество часов, затрачиваемых на время проекта и накладные расходы.

В моем примере за ноябрь я бы усреднил O43: S43. Я хотел бы ввести или выбрать месяц в среднем в одной ячейке, а затем найти диапазон столбцов этого месяца из объединенных ячеек, содержащих November.

Например, если ключевая ячейка D9, удерживающая ноябрь, и я хочу разместить среднее значение в E9, а ряд месяцев для года охватывает от K11 - W11, каковы возможные подходы к решению этой проблемы вопрос?

Я пробовал использовать формулу INDEX MATCH, но это ни к чему не приводит. Мне нужно написать функцию VBA (я думаю).

+1

не уверен, что я действительно понимаю вопрос, но в любое время, когда я хочу использовать формулы, я избегаю использования объединенных ячеек. То, что вы можете сделать, это вставить строку между неделями и объединенной ячейкой месяца и поставить месяц выше каждой недели (т. Е. У вас будет 5 ячеек с месяцем «Ноябрь» выше рабочих недель). Затем вы можете использовать SUMIF, AVERAGEIF и т. Д. – Jaycal

+0

Как сказал Джайкал, я избегаю слитых ячеек. Центр с выборными ячейками легче работать. Вы можете проверить, является ли ячейка частью объединенного диапазона, например, '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 
Смежные вопросы