2014-11-15 3 views
0

Есть ли способ найти среднее значение для блока данных в том же столбце?Как вычислить несколько ячеек в одном столбце?

Это код, который я использую, перед которым не работал так, как я понадеялся для данных с меньшим количеством цифр:

Sub Macro1() 
'Macro1 
Do Until ActiveCell.Value = "" 
    'Selection.End(xlDown).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    Selection.FormulaR1C1 = "=AVERAGE(R[-13]C:R[-1]C)" 
    Selection.End(xlDown).Select 
Loop 
End Sub 

Пример: изображение файл я работаю. У меня есть тысячи строк этих данных, и все они разделены тремя пустыми строками. Есть ли способ найти средние значения для каждого блока данных и отобразить его в первой пустой строке непосредственно под данными?

+0

Я действительно ничего не пробовал. Я пробовал искать ответ, но не могу найти ничего, что я ищу. Я не слишком хорошо знаком с vbas, но любая помощь будет очень признательна. – fishmooney

+0

@fishmooney каждый размер блока i.e общая строка для блока такая же? – ZAT

+0

Нет, некоторые меньше. – fishmooney

ответ

-1

Попробуйте это: (для Columna с учетом 3 пробелов после каждого блока, включая последний блок)

Sub DoAvginColumn() 
Dim i as long, q as long, avgBlock 
Dim lastrow as Range, firstrow as Range, rngcolA as Range, rngBlock as Range 

Set lastrow = Range("A:A").Find(What:="*", After:=[A1], SearchDirection:=xlPrevious) 
Set firstrow = Range("A:A").Find(What:="*", After:=[A1], SearchDirection:=xlNext) 
Set rngcolA = Range("A" & firstrow.Row & ":" & "A" & lastrow.Row) 

q = 1 
For i = 1 To rngcolA.Rows.Count + 1 

    If rngcolA(i).Value = "" And rngcolA(i + 1).Value = "" And rngcolA(i + 2).Value = "" Then 
    Set rngBlock = Range(rngcolA(q), rngcolA(i - 1)) 
    avgBlock = WorksheetFunction.Average(rngBlock) 
    rngcolA(i).Value = avgBlock 
    rngcolA(i).Font.Bold = True 
    q = i + 3 
    End If 

Next 
End Sub 

прилагаемых: Шаги я следовал: От верхней части к нижней части соответствующего диапазона:

  1. поиск 3 последовательный бланк.

  2. Если найдено, определите соответствующий диапазон для каждого блока, начиная с 1-й ячейки этого блока и заканчивая последней ячейкой этого блока.

  3. Затем применил функцию avg на этом блоке и положил результат под блок.

+0

Прокомментируйте, почему это не полезно? – ZAT

+0

Спасибо за вашу помощь, это сработало! Могу ли я спросить шаги, которые вы предприняли для получения этого кода? Это код, который я использовал, перед которым не работал так, как я понадеялся для данных с меньшим количеством цифр: Sub macro1() « » macro1 Макро « Do До ActiveCell.Value =„“ » Selection.End (xlDown) .Выберите ActiveCell.Offset (1, 0) .Range («A1»). Выберите Selection.FormulaR1C1 = "= СРЕДНЕЕ (R [-13] C: R [-1] C) " Selection.End (xlDown) .Выбрать Loop End Sub – fishmooney

+0

@fishmooney Вы можете удалить код из комментария, поскольку я добавил его к вашему вопросу. И см. Прилагаемый ответ для шагов, которые я предпринял. Во всяком случае, не могли бы вы повысить его, заставлять кого-то еще ниспровергнуть ранее, не указывая причины и не подслушивая меня. – ZAT

Смежные вопросы