2013-05-20 2 views
1

У меня есть данные в excel, который начинается с отрицательных значений, проходит ноль и достигает определенного положительного значения. Я помещал этот конкретный набор данных в массив dataset1 = {-9.5,-7,-5.25,-3,-1.1,0,1,5,20,50} (как пример, значения не линейно разнесены) для выполнения некоторых вычислений. Но мне нужно знать индекс последнего числа, имеющего знак (отрицательный).
Как я могу это сделать? К сожалению, нет такой функции, как IsSigned(..)=true.Найти изменение знака в массиве

+6

И проверка того, что число меньше нуля, не помогает? – Renan

+0

Derp Derp. Может быть, я слишком долго смотрел на экран сегодня? -. Глупый я. – Sensei

+0

Спасибо, кстати ;-D. Теперь. – Sensei

ответ

2

Если вы хотите сделать это без петли

Sub test() 

    Dim dataset1 As Variant 

    dataset1 = Array(-9.5, -7, -5.25, -3, -1.1, 0, 1, 5, 20, 50) 

    Debug.Print UBound(Filter(dataset1, "-")) + 1 

End Sub 
+1

Хорошее напоминание о функции Filter! Примечание к OP: это будет работать, только если массив действительно отсортирован. –

+0

Спасибо за подсказку и решение. – Sensei

0

Мое решение выглядит следующим образом:

'Find last signed value 
For i = LBound(concarraycleared, 2) To UBound(concarraycleared, 2) 
    If concarraycleared(2, i) < 0 Then 
     LastSignedIndex = i 
    Else 
     Exit For 
    End If 
Next i 

Пара ограничений: Array должен быть вертикальным, можно найти только последний одно значащее значение, значения нужно сортировать в порядке возрастания. Вы не можете отменить порядок поиска. Это довольно специфическое решение, адаптированное к моей проблеме, поэтому вышеупомянутое решение должно рассматриваться как кулак.

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