Страницы: 1
RSS
Поиск первого ненулевого значения в одномерном массиве
 
Доброго дня всем! Помогите решить задачку нахождения первого ненулевого значения в строке  
Например  
0,4,0,0,10,5,7  - результат 4 либо индекс в массиве 2  
0,0,0,3,10,6,2 -  результат 3 либо индекс в массиве 4  
 
Заранее спасибо.
 
For i = LBound(ArrayName) To UBound(ArrayName)  
   If ArrayName(i) <> 0 Then  
       MsgBox "Значение элемента массива " & i & " равно " & ArrayName(i)  
       Exit For  
   End If  
Next i
 
индекс(диапазон;мин(если(диапазон>0);столбец(диапазон))-столбец(первый слева)) как формула массива
 
нахождения первого ненулевого значения в строке  
Например  
0,4,0,0,10,5,7  - результат 4    
0,0,0,3,10,6,2 -  результат 3    
post}{/quote}  
 
=LEFT(SUBSTITUTE(A1;"0,";"");1)
 
{=ПОИСКПОЗ(;ЕСЛИ(A1:G1;);)} - первый ненулевой  
{=ПОИСКПОЗ(;ЕСЛИ(A1:G1;))} - последний ненулевой
 
Добрый день!  
Хотелось бы поднять эту тему, т.к. здесь есть решение но не до конца  
С использованием массива.  
 
А есть ли решение без массива???
 
А пример?
 
Есть план продаж помесячно  
янв фев мар апр май июн июл авг сен окт ноя дек  
0   0   0   0   5   10  12  12  11  10  8   5  
 
Нужно определить первый месяц продаж.  
В данном примере - май (5)
 
=ВПР
 
=ИНДЕКС(A1:L1;ПОИСКПОЗ(;A2:L2)+1)
 
При данном решении, попробуйте ввести ненулевое значение для янв или фев :-)
KL
 
почти обрадовался) но не работает если идут нули в середине ((
 
{=СМЕЩ(A1;ПОИСКПОЗ(;ЕСЛИ(B1:B13;);)-1;0)} Это по столбцам, т.е. первый столбик - месяцы, второй  - суммы продаж.  
 
{=СМЕЩ(A1;0;ПОИСКПОЗ(;ЕСЛИ(A2:L2;);)-1)} Это по строкам, аналогично, первая строка - месяц, второй-сумма продаж.  
 
С Уважением.
 
Варианты Trike-aerotech.ru работают, но надо было дописать, что после того, как ввели формулу, надо нажимать не как обычно ENTER, а комбинацию CTRL+SHIFT+ENTER, после чего формула обрамится фигурными скобками, а в ячейке будет Ваш искомый результат.
 
Option Explicit  
В первой строке месяцы, во второй продажи  
Запустить макрос  
 
Sub qq()  
Dim i As Long  
For i = 1 To 12  
If Cells(2, i) > 0 Then  
MsgBox "Первый месяц продаж: " & Cells(1, i)  
Exit Sub  
End If  
Next  
End Sub
 
СМЕЩ()пересчитывается при любом изменении на листе. Лучше    
=ИНДЕКС(A1:L1;ПОИСКПОЗ(1=1;A2:L2>0;))
Страницы: 1
Читают тему
Наверх