@HealSpirit

Как вывести массив, который возвращает функция в VBA?

Всем привет. Прочитал, что функция в VBA может отобразить вычисленной значение только в той ячейке, откуда она была вызвана. Чтобы отобразить какие-то вспомогательные переменные, нужно сделать так, чтобы функция возвращала массив. Если нужно отобразить только основное значение, вызываем как обычно из одной ячейки. Если нужны дополнительные переменные, выделяем, к примеру, 2 ячейки, пишем нужную функцию, нажимаем Ctrl + Shift + Enter. Но вместо основного значения и дополнительного у меня отображается основное + основное, хотя в функции показывается основное + дополнительное
pInyu7U.png
MAYcZuB.png
А нужно, чтобы было 14390 и 0,97
Сам код:
Function adequacy(MinPrice As Range, MaxPrice As Range, DeliveryPricesRange As Range)
 Dim sglStart As Single, w&, r&, name, ratio As String, final As Object, objRegExp As Object, rg As Range, a
    Dim Index As Integer
    Dim MinusRub As Long
    Dim Price(1 To 2, 1 To 1)
    Price(1, 1) = 0
    MinusRub = 40
    Col = 7
    IfMore30 = 3
    ratio = MinPrice / MaxPrice
    Price(2, 1) = ratio
    If ratio < 0.5 Then
        For Index = Col To 1 Step -1
            Select Case Index
                Case Is = 7
                    Price(1, 1) = CLng(DeliveryPricesRange(Index))
                    If Price(1, 1) <> 0 Then
                        Exit For
                    End If
                Case Else
                    Price(1, 1) = CLng(DeliveryPricesRange(Index)) - MinusRub
                    If Price(1, 1) + 40 <> 0 Then
                        Exit For
                    End If
            End Select
        Next Index
    Else
        For Index = 1 To IfMore30
            Price(1, 1) = CLng(DeliveryPricesRange(IfMore30 - Index + 1))
            If Price(1, 1) <> 0 Then
                Exit For
            End If
        Next Index
    End If

    adequacy = Price
End Function

P.S. нужно проверять как я создаю массив 2*1, или 1*2, проблема была в этом
  • Вопрос задан
  • 48 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Если массив двумерный, то сначала идёт столбец, а потом строка, т.е. a(2,3) - это столбец строка. Скорее всего дело в этом. Попробуйте такой код для демонстрации:
Public Function a()
    Dim s(1 To 5, 1 To 5)
    For i = 1 To 5
        For j = 1 To 5
            s(i, j) = CStr(i) + " " + CStr(j)
        Next j
    Next i
    a = s
End Function
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 1 300 до 1 500 usd.
ГК «Мегаполис» Челябинск
от 60 000 руб.
СМАРТ-СОФТ Волгоград
от 60 000 до 90 000 руб.
17 нояб. 2019, в 00:48
2000 руб./за проект
16 нояб. 2019, в 22:17
500 руб./за проект
16 нояб. 2019, в 22:10
2000 руб./за проект