Я работаю над функцией vba для вычисления максимального значения диапазона данных, деленного на другое. Кажется, что все работает хорошо, но проблема, похоже, существует при попытке применить Application.Max к массиву, где я обошел его, выполняя цикл. Однако я не могу вспомнить значение Max вне цикла ... Первая версия Debug.Print обычно печатает значение MaxV, однако вторая [вне цикла] Debug.Print MaxV ничего не привела. Функция CalDS2 получает значение #VALUE! ошибка.Функция VBA - Невозможно вывести переменную
Function CalDS2(RangeD As Range, RangeS As Range, MaxMin As String) As Variant
Dim i As Integer
Dim ArrayDS() As Variant
Dim MaxV As Variant
Dim MinV As Variant
MaxV = 0
MinV = 1000000000
For i = 1 To RangeD.Columns.Count
ArrayDS(i) = Round(RangeD.Cells(1, i)/RangeS.Cells(1, i), 4)
If ArrayDS(i) >= MaxV Then
MaxV = ArrayDS(i)
Debug.Print MaxV
End If
Next i
Debug.Print MaxV
CalDS2 = MaxV
End Function
Любая помощь будет высоко ценится, Энди
** * ***Новый код* ** * *
Function CalDS2(RangeD As Range, RangeS As Range, MaxMin As String) As Variant
Dim i As Long
Dim ArrayD, ArrayS, ArrayDS() As Variant
If UCase(MaxMin) <> "MAXIMUM" And UCase(MaxMin) <> "MINIMUM" Then
MsgBox "The 3rd argument - MaxMin - must be either Maximun or Mininum"
CalDS2 = "Error"
Exit Function
End If
ReDim ArrayDS(1 To RangeD.Columns.Count)
ArrayD = RangeD.Value
ArrayS = RangeS.Value
For i = 1 To RangeD.Columns.Count
ArrayDS(i) = ArrayD(1, i)/ArrayS(1, i)
Debug.Print ArrayDS(i)
Next i
If UCase(MaxMin) = "MAXIMUM" Then
CalDS2 = WorksheetFunction.Max(ArrayDS)
Else
CalDS2 = WorksheetFunction.Min(ArrayDS)
End If
End Function
объявить MaxV в функции. 'dim MaxV как десятичное значение. попробуйте это первым. Другой вопрос: почему вы используете 'ArrayDS (i)'? – Hiten004
@ Hiten004 Прямо сейчас я использую 'Dim MaxV как double', тоже попробовал' вариант', но это то же самое. Для 'ArrayDS (i)', он был там с самого начала, где я пытался сделать «Application.Max (ArrayDS)». –
Я бы «ArrayDS (i)» заменил массив переменной «Dim yourvariable as double», а затем попробуйте. – Hiten004