Невозможно получить значения диапазона ячеек в пользовательской функции - PullRequest
0 голосов
/ 23 мая 2019

Я работал над проблемой, которая требует ввода массива и вывода также массива. Я написал код VBA (после того, как я выполнил работу над логикой на ноутбуке), но я не знаю, почему этот код не может получить значения ввода.

Я уже написал код. Просто помогите мне с синтаксисом! Поскольку я не являюсь профессиональным программистом, пожалуйста, игнорируйте именование переменных. Кроме того, я новичок в этой платформе, поэтому я не знаю многих правил. Любая помощь будет по достоинству оценена. Спасибо!

Контрольные примеры и ошибка:

enter image description here

Public Function Get1_GEM(vector As Range)
Dim i As Long, j As Long, i1 As Long, j1 As Long
Dim a As Long, b As Long, c As Long
Dim GEM() As Double
ReDim GEM(1 To 3, 1 To 2) As Double
Dim res() As Double
ReDim res(1 To 3) As Double
Dim row() As Double
ReDim row(1 To 3) As Double
For i = 1 To 3 Step 1
    For j = 1 To 2 Step 1
        GEM(i, j) = 2 * i + j - 2
        row(i) = 0
    Next j
Next i
Dim inp() As Double
ReDim inp(1 To 3) As Double
i = 0
j = 0
Dim x() As Double
ReDim x(1 To 3) As Double
Dim y() As Double
ReDim y(1 To 3) As Double
i = 0
For i = 1 To 3 Step 1
    inp(i) = vector.Cells(i, 1)
Next i

For i = 1 To 3 Step 1
    For j = 1 To 2 Step 1
        If GEM(i, j) = inp(1) Then
            x(1) = i
            y(1) = j
            row(i) = row(i) + 1
        ElseIf GEM(i, j) = inp(2) Then
            x(2) = i
            y(2) = j
            row(i) = row(i) + 1
        ElseIf GEM(i, j) = inp(3) Then
            x(3) = i
            y(3) = j
            row(i) = row(i) + 1
        End If
    Next j
Next i
i = 0
j = 0
If row(1) > 0 And row(2) > 0 And row(3) > 0 Then
    For i = 1 To 3 Step 1
        res(i) = GEM(x(i), 2 - y(i))
    Next i
Else

    If row(1) = 0 Then
        a = 0
    ElseIf row(2) = 0 Then
        a = 1
    ElseIf row(3) = 0 Then
        a = 2
    End If

    If row(1) = 1 Then
        b = 0
    ElseIf row(2) = 1 Then
        b = 1
    ElseIf row(3) = 1 Then
        b = 2
    End If
    c = 3 - a - b
    Dim d As Double
        If x(1) = b Then
            d = 0
        ElseIf x(2) = b Then
            d = 1
        ElseIf x(3) = b Then
            d = 2
        End If
i = 0
For i = 1 To 3 Step 1
    If i = d Then
        res(i) = GEM(x(i), 2 - y(i))
    Else
        res(i) = GEM(a, y(i))
    End If
Next i
End If
Get1_GEM = res
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...