2016-11-30 6 views
0

Мне нужно рассчитать среднее значение разных чисел в VBA, но это осложнилось, и я не уверен, что делать дальше.Вычислить среднее значение в VBA

Я обратился к Google, чтобы найти возможные решения моей проблемы, однако я не нашел ничего подходящего.

Вот мой стол:

Table example

Каждый ID:

  • ... не является уникальным номером.
  • ... имеет ассоциированное значение.

Средние значения для каждого идентификатора должны быть рассчитаны в VBA.

Пример

  • Значения с идентификатором «» ID1 являются 2,3 и 4, и поэтому имеют в среднем 3
  • Значения с идентификатором «» ID2 оба 4, и поэтому имеют в среднем 4
  • ...

То, что я сейчас либо вычисляет среднее значение для всего столбца или просто повторяет значение.

Я буду очень признателен за помощь и совет.

+0

Привета. Рассматривали ли вы использование сводной таблицы для этого? Просто измените значение поля значения на «Среднее» при перетаскивании столбца значения ... –

+0

@ wilson88 Спасибо. Я постараюсь использовать его. Но согласно моей задаче, мне нужно сделать это в VBA. У меня есть несколько расчетов, которые я сделал в VBA, и это тоже должно быть его частью. –

+0

Привет, Вы можете написать VBA для создания сводной таблицы, как предложено @ wilson88, и добавить формулу vlookup с помощью VBA, которая вытащит среднее значение из сводной таблицы в нужный столбец. –

ответ

0

Ярмарка достаточно. Если ваше сердце установлен на решение VBA это следует сделать трюк (для примера) ...

Sub Av() 

Dim LastRow As Long 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

For i = 2 To LastRow 

    Cells(i, 3).Value = Application.WorksheetFunction.SumIf(Range("A2:A" & LastRow), Range("A" & i), Range("B2:B" & LastRow))/_ 
Application.WorksheetFunction.CountIf(Range("A2:A" & LastRow), Range("A" & i)) 

Next 

End Sub 

Это решение позволит сохранить ваши строки таблицы в примере вы публикуемую (как не уникален ID)

+0

Awesome. Спасибо вам за это. Он работает отлично. Теперь я могу закончить мои расчеты :) –

0

Если вы не хотите использовать сводную таблицу, как wilson88 предложить вы можете попробовать следующее,

Создать список из набора данных, который не имеет дублей ID в нем.

В колонке рядом с этим списком вы можете сделать формулу sumif, чтобы получить сумму из набора данных каждого идентификатора.

Затем в столбце рядом с ним вы можете использовать формулу countif для подсчета количества раз, когда появляется идентификатор пользователя. Затем вы можете разделить столбец sumif на столбец countif, чтобы получить среднее значение.

После того, как вы получите представление об этом можно объединить формулы в одну ячейку в следующий

= SUMIF ("ID RANGE", "ID", "сумма Range")/СЧЕТЕСЛИ ("ID_RANGE", «ID»)

Это будет ручной способ создания сводной таблицы, вы можете использовать vba для создания формулы.

Sheet1.range ("A1: A100").значение = «= enterformulahere»

0

Вы также можете использовать формулу массива, чтобы найти уникальные идентификаторы

Im использование идентификаторов в A1: A10 и мои ценности в ячейке B1: b10

Используя этот массив в Д1: d10

=INDEX($A$2:$A$10,MATCH(0,COUNTIF($D$1:D1,$A$2:$A$10),0))

дает мне уникальный идентификатор, а затем, как указано выше, простой SUMIF/COUNTIF

=SUMIF($A$1:$A$10,$D1,$B$1:$B$10)/COUNTIF($A$1:$A$10,$D1)

enter image description here

Надеется, что это помогает

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