vAverage = xlApp.Average(xlApp.Range("A:A,C:C"))
If IsError(vAverage) = True Then
MsgBox "В указанном столбце есть значение ошибки", _
vbOKOnly + vbSystemModal, "Ошибка пользователя !!!"
End If
Обработка данных с Excel
интересно какой функцией можно это узнать, не загружая цифры всего столбца из файла в функцию, а обратившись только одной командой?
Смотрите список статистических функций.
Среднее арифметическое: [color=blue]СРЗНАЧ()[/color], [color=blue]СРЗНАЧА()[/color].
Минимум: [color=blue]МИН()[/color], [color=blue]МИНА()[/color].
Максимум: [color=blue]МАКС()[/color], [color=blue]МАКСА()[/color].
Если собираетесь работать с макросом, то можете использовать функции - члены класса WorksheetFunction: [color=blue]Average()[/color], [color=blue]Min()[/color], [color=blue]Max()[/color].
[QUOTE=sanders]... интересно какой функцией можно это узнать, не загружая цифры всего столбца из файла в функцию, а обратившись только одной командой?[/QUOTE]
Как это понимать?
Вот пример-
xlApp.Range("A:A,C:C").Select() - в этом случае происходит select,
А как будет выглядеть команда, выдающая среднее значение столбца?
Примерно average=xlApp.Range("A:A").Average() (этот пример плод моей фантазии, он не работает, просто показать мое намерение получить значение).
Сколько ни копался в нете и документации, не нашел ничего...
Average = xlApp.WorksheetFunction.Average(xlApp.Range("A:A"))
Код:
"ComException was unhandled,
Exception from HRESULT: 0x800A03EC"
Пробовал оба варианта, эксель-файл в порядке, другие операции удаются :(
Код:
Dim xlApp As Excel.Application
Dim xlWb As Excel.Workbook
Dim vAverage
Set xlApp = New Excel.Application
Set xlWb = xlApp.Workbooks.Open("C:\Temp.xls")
With xlWb.Worksheets(1)
vAverage = xlApp.Average(.Range("A:A"), .Range("C:C"))
End With
If IsError(vAverage) = True Then
MsgBox "В указанном столбце есть значение ошибки", _
vbOKOnly + vbSystemModal, "Ошибка пользователя !!!"
End If
xlWb.Close
Set xlWb = Nothing
Set xlApp = Nothing
Dim xlWb As Excel.Workbook
Dim vAverage
Set xlApp = New Excel.Application
Set xlWb = xlApp.Workbooks.Open("C:\Temp.xls")
With xlWb.Worksheets(1)
vAverage = xlApp.Average(.Range("A:A"), .Range("C:C"))
End With
If IsError(vAverage) = True Then
MsgBox "В указанном столбце есть значение ошибки", _
vbOKOnly + vbSystemModal, "Ошибка пользователя !!!"
End If
xlWb.Close
Set xlWb = Nothing
Set xlApp = Nothing
сработал последний вариант параметров для Average,
всем спасибо нечеловеческое, особенно vkodor!