Держи) Public Sub MySort(ByRef Arr() As Single)
'Что нужно иметь под рукой:
'парочку Long, временную Single,
'временный массив и его размер tacnt
Dim TmpArr() As Single
Dim tacnt As Long
Dim i As Long
Dim j As Long
Dim tmp As Single
'создаём массив индексов отрицательных элементов
tacnt = -1
ReDim TmpArr(0) As Single
'динамически расширяем временный массив и записываем в него
'индексы отрицательных элементов исходного массива
For i = 0 To UBound(Arr(), 1)
If Arr(i) < 0 Then
tacnt = tacnt + 1
If tacnt > 0 Then ReDim Preserve TmpArr(tacnt) As Single
TmpArr(tacnt) = i
End If
Next
'если отрицательных нет, валим отсюда
If tacnt = -1 Then Exit Sub
'обычная сортировка пузырьком, но вместо
'индексов сортируемого массива используем
'элементы временного массива
For i = 0 To tacnt - 1
For j = tacnt To i Step -1
If Abs(Arr(TmpArr(i))) < Abs(Arr(TmpArr(j))) Then
tmp = Arr(TmpArr(i))
Arr(TmpArr(i)) = Arr(TmpArr(j))
Arr(TmpArr(j)) = tmp
End If
Next
Next
End Sub