2016-10-31 5 views
0

Я получаю сообщение об ошибке «Невозможно получить среднее свойство класса Worksheetfunction» при попытке рассчитать среднее значение из 2 диапазонов.Ошибка средней ошибки VBA - 1004

Мой стол можно найти ниже.

Когда я вычисляю среднее значение столбца%, у меня нет проблем. Это дает мне правильный результат, однако у меня возникают проблемы, когда я пытаюсь вычислить среднее значение для столбца $.

Col | % | $ 
1 | 2.33% | $2.33 
2 | 3.64% | $3.64 
3 | 10.83% | $10.83 
4 | 6.07% | $6.07 
5 | - | - 
6 | 12.99% | $12.99 
7 | 18.99% | $18.99 


    Dim myRange As Range 
    Dim myAverage As Variant 

'The user selects the range 
Set myRange = Application.InputBox(_ 
prompt:="Please select the range", Title:="My Range", Type:=8) 

'This splits the range into two areas because the user typically does not select the row with the "-" in it. 
'myRange would typically look something like (B1:B4,B6:B7) OR (C1:C4,C6:C7) 
Area1 = myRange.Areas(1) 
Area2 = myRange.Areas(2) 

myAverage = Application.WorksheetFunction.Average(Area1, Area2) 

Ошибка я получаю это «Не удалось получить среднее свойство класса WorksheetFunction», и это происходит с myAverage расчета.

Любые идеи относительно того, почему он вычисляет столбец% без проблем, но не вычисляет столбец $?

Заранее благодарен!

+0

Какие типы 'Area1, Area2'? Я не вижу их нигде. –

+0

@John Coleman они находятся в диапазоне – user2828701

+0

Если данные являются строкой/текстом в столбце $, функция Average вернет ошибку DIV/0. –

ответ

3

Declare как собственно типа (объект Range):

Dim Area1 As Range 
Dim Area2 As Range 

Используйте Set ключевое слово для назначения объекта переменных.

Set Area1 = myRange.Areas(1) 
Set Area2 = myRange.Areas(2) 

Затем, вы должны быть в состоянии использовать Application.Average или Application.WorksheetFunction.Average, чтобы получить среднее значение.

myAverage Application.Average(Area1, Area2) 

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

Или опустить Area1/Area2 шаги целиком и сделать просто:

myAverage = Application.Average(myRange.Areas(1), myRange.Areas(2)) 
+0

вы можете уточнить? Что значит разметка? Когда я проверяю формат каждой ячейки в столбце $, это показывает, что это «Валюта». – user2828701

+0

@ user2828701 в вашем исходном примере вы показывали '
' теги в данных ячейки. Если это не так (за ваше редактирование), мой ответ может быть неприменим больше. –

+0

Да, эти перерывы на самом деле там нет. Просто нужно переместить данные в другую строку – user2828701

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