Основы офисного программирования и язык VBA


Пример 9.1


Public Function IsMediana(M As Variant, Cand As Variant) As Integer

'Дан массив M и элемент Cand. В качестве результата возвращается

'разность между числом элементов массива M, больших и меньших Cand.

Dim i As Integer, j As Integer

Dim Pos As Integer, Neg As Integer

Pos = 0: Neg = 0

'Анализ типа параметра M

If TypeName(M) = "Range" Then

For i = 1 To M.Rows.Count

For j = 1 To M.Columns.Count

If M.Cells(i, j) > Cand Then

Pos = Pos + 1

ElseIf M.Cells(i, j) < Cand Then

Neg = Neg + 1

End If

Next j

Next i

IsMediana = Pos - Neg

ElseIf TypeName(M) = "Variant()" Then

'TypeName is "Variant()"

'Это массив, но не совсем настоящий, для него не определены,

'например, функции границ: LBound, UBound.

Dim Val As Variant

For Each Val In M

If Val > Cand Then

Pos = Pos + 1

ElseIf Val < Cand Then

Neg = Neg + 1

End If

Next Val

IsMediana = Pos - Neg

ElseIf TypeName(M) = "Integer()" Then

'Это настоящий массив целых VBA, для которого

'определены функции границ.

For i = LBound(M) To UBound(M)

If M(i) > Cand Then

Pos = Pos + 1

ElseIf M(i) < Cand Then

Neg = Neg + 1

End If

Next i

IsMediana = Pos - Neg

Else

MsgBox ("При вызове функции:IsMediana(M,Cand)" _

& "- M не является массивом или объектом Range!")

End If

End Function




Начало  Назад  Вперед