2016-03-11 4 views
0

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

У меня есть следующий массив: temp=(9,4,9,3,8,4,9,8)

и я хочу, чтобы отсортировать его, но вместо того, чтобы вернуться

temp=(9,9,9,8,8,4,4,3)

я хочу, чтобы вернуть индекс стоимости как

temp=(1,3,7,5,8,2,6,4).

Любая помощь приветствуется. Заранее спасибо!

ответ

1

Попробуйте это:

Sub Tester() 

    Dim arr, v, i, arr2() 
    arr = Array(9, 4, 9, 3, 8, 4, 9, 8) 
    ReDim arr2(LBound(arr) To UBound(arr)) 

    Debug.Print "Original", Join(arr, ",") 

    For i = LBound(arr2) To UBound(arr2) 
     arr2(i) = Application.Large(arr, i + 1) 
    Next i 
    Debug.Print "Sorted", Join(arr2, ",") 

    For i = LBound(arr2) To UBound(arr2) 
     v = Application.Match(arr2(i), arr, 0) 
     arr2(i) = v 'save the position 
     arr(v - 1) = vbNull 'remove the found value 
    Next i 
    Debug.Print "Positions", Join(arr2, ",") 

End Sub 

EDIT: без промежуточного рода

Sub Tester2() 

    Dim arr, v, i, arr2() 

    arr = Array(9, 4, 9, 3, 8, 4, 9, 8) 
    ReDim arr2(LBound(arr) To UBound(arr)) 

    For i = LBound(arr) To UBound(arr) 
     v = Application.Match(Application.Large(arr, 1), arr, 0) 
     arr(v - 1) = vbNull 
     arr2(i) = v 
    Next i 
    Debug.Print "Positions", Join(arr2, ",") 

End Sub 
+0

Большое спасибо за это. Я изменю его и добавлю в свою программу. – Nikoleta

Смежные вопросы