Как ранжировать многомерный массив в VBA - PullRequest
0 голосов
/ 25 июня 2018

Я смущен, я не смог найти этот ответ самостоятельно, но если у меня есть многомерный массив VBA и я хочу использовать функцию Rank/Large/Small в одном измерении, как это выполняется?

Пример:

Dim Arr(1, 2) As Integer

    Arr(0, 0) = 1
    Arr(0, 1) = 2
    Arr(0, 2) = -1
    Arr(1, 0) = 100
    Arr(1, 1) = 40
    Arr(1, 2) = 60

Вот наглядная иллюстрация:

enter image description here

Если я хочу получить наибольшее число в поле Arr (0, x) (которое будет равно 2), как это выполняется? Для наибольшего в поле Arr (1, x) я бы ожидал 100.

Я пробовал:

Application.WorksheetFunction.Large(Arr(, 2), 1) это ошибки Application.WorksheetFunction.Large(Arr(1, 2), 1) это дает только этот массив в этом положении.

Я гуглил:

  • ранжирование многомерных массивов
  • как ранжировать одно измерение в массив
  • ранг одного измерения в массиве

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

Просто чтобы ответить на ответ Jeeped (как мне понадобилось пару минут, чтобы выяснить это):

С

Dim Arr(1, 2) As Integer

Arr(0, 0) = 1
Arr(0, 1) = 2
Arr(0, 2) = -1
Arr(1, 0) = 100
Arr(1, 1) = 40
Arr(1, 2) = 60

Вот как вы вернете участника с самым высоким рейтингом дляArr (0, x): Application.Large(Application.Index(Arr, 1, 0), 1) Возвращает 2

Для второго набора Arr (1, x): Application.Large(Application.Index(Arr, 2, 0), 1) Возвращает 100

0 голосов
/ 25 июня 2018

Вы можете использовать цикл for как

Dim large As Double

large = arr(row, 0)

For i = 1 To numberOfColumns
  If (arr(row, i) > large) Then
    large = arr(row, i)
  End If
Next i
0 голосов
/ 25 июня 2018

Вам нужно очистить один из рядов с помощью функции индекса рабочего листа.

Dim Arr(1, 2) As Integer

Arr(0, 0) = 1
Arr(0, 1) = 2
Arr(0, 2) = -1
Arr(1, 0) = 100
Arr(1, 1) = 40
Arr(1, 2) = 60

Debug.Print Application.Large(Application.Index(Arr, 0, 2), 1)

Индекс используется как все «строки» (0) во втором «столбце» (2) .Между 2 и 40 во втором звании 40 является самым большим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...