Още един въпрос

10 отговора 0 прегледа
#1

Още един въпрос

Христос възкресе, приятели

Имам още едно питане, ако е възможно, помагайте

В екселска таблица нанасям стойности в клетки - по редове - в ареалаите, примерно:

от A1 до N1 ,
после от A2 до N2,
после от A3 до N3
после от A4 до N4 и т.н.

На всеки ред, обаче, нанасяните стойности не изпълват ареала - примерно, в 1-я ред съм нанесъл 5 стойности -(от A1 до Е1) във 2-я - 8 (от A2 до H2), в 3-я - 14 (максимума - до N3), в 4-я - 10 (от A4 до J4) и т.н. и т.н. Искам - ако е възможно - в следващата на реда клетка - О1, О2, О3, О4 и т.н. - да ми се извлича информация само от последната клетка от съответния ареал - в която има стойност - и към нея да прибавям числото 120.

Благодаря

Наско



[линк]

Редактирано от Eжko_ на

Отговор
в отговор на Eжko_ #2

Стана, работата

Един приятел ми помогна - това, което ми предостави, работи успешно.

Формулата е:

=INDIRECT(CONCATENATE(CHAR(75+COUNT(L4:Y4));4))+120

Функцията COUNT(L4:Y4) преброява числата в масива L4:Y4.

Преброявайки колко са числата в този масив и изхождайки от предпоставката, че те са плътно подредени от началото му, вече знаем с колко клетки е отместено последното число от първата клетка на масива - Disp. Ако в някоя от клетките има нещо, което е различно от число, формулата ще дава грешен резултат.

Функцията CHAR(64+Disp) преобразува число в буква - Sign. Sign в случая може да бъде буква от L до Y. Ако отместиш края на масива по-надясно от колона Z формулата няма да работи. 64 съответсвтва на колона А, към него добавяме отместването. Т.е. ако нашият масив започва от колона B, числото трябва да е 65. За колона L - това, което на мен лично ми трябва - числото е 75.

Функцията CONCATENATE(Sign;4) обединява буквата Sign със знака 4. Резултатът е дума от порядъка L4-Y4, което е адреса на последната пълна клетка на масива.

Функцията INDIRECT(Adres) връща стойността от клетката, посочена като Adres.

"Обърни внимание", казва накрая моя приятел - "че формулата, която съм ти дал не е универсална. Не можеш да разпъваш или променяш вида и мястото на масива и тя да ти дава верни резултати. Тя работи вярно само в конкретния случай и в никой друг. Ако искаш универсална формула, задачата става доста сложна."

Да му благодарим всички за положеното старание.


[линк]

Редактирано от Eжko_ на

Отговор
в отговор на Eжko_ #3

Re: Още един въпрос

Не че съм от разбиращите но смятам че ако в клекта O1 напишеш...

=INDEX(A1:N1;1;COUNT(A1:N1))+120

...може да се получи нещо.. после тая формула я размножи по колона "O"

Отговор
в отговор на ql^2/8 #4

Re: Още един въпрос

Това е малко по-добро. Дава резултат, дори ако има незапълнени клетки или текстова информация, като ги игнорира.
=INDEX(A1:N1;MATCH(1E+30;A1:N1))+120

Отговор
в отговор на TRN #5

Re: Още един въпрос

Наистина предложеното от TRN работи!..
Чудя се защо според документацията на Excel би трябвало данните да са във възходящ ред, за да работи коректно. Очевидно достатъчно е да няма стойност по-голяма от търсената (1Е+30 е доста голяма) за да стигне до края и да върне последния числов елемент.

Отговор
в отговор на TRN #6

При мен не върви

Прочених формулата, понеже трябва да прибавя числото 120 към всяко друго число от 1 до 60, без 60. По точно казано, ако се случи числото да е 60, търсеният резултат трабвя да е =120, а това може да се случи, като се прибави още 60.

=IF(INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))=60);+60;INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))+120

Този вариант при мен работи, както и предишният по-горе.

Вашият, за съжаление, не върви при мен, и не знам каква е причината. Видимо е по-простичък и ще улесни копирането на формулата в следващите клетки. В моя вариант, при копиране адреса на масива се променя автоматично, но не и номера на реда, който в случая е 1 (в червеното)


[линк]
Отговор
в отговор на Eжko_ #7

Re: При мен не върви

Надявам се, че не си направил каша със скобите, а също и със разделителите, както си го написал тук...

Всеки от символите ";" и "," може да е разделител (list separator) но не и двата едновременно.
И все пак ако искаш да получиш 120 ако проверката излезе трябва да напишеш 120 (а не +60)...

Отговор
в отговор на ql^2/8 #8

Re: При мен не върви

В отговор на:

Надявам се, че не си направил каша със скобите, а също и със разделителите, както си го написал тук...




Не разбирам, какво съм направил - онова, което представих, работи и ми върши чудесна работа - ето го пак:

=IF(INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))=60);+60;INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))+120

То есть: там, където последната клетка от масива има стойност, = на 60, към нея се прибавя 60, за да се получи 120. Там, където стойността е различна от 60, се прибавя 120.

Формулата на TRN копирах едно към едно - пробвах и с разделител "," - пак същото.


[линк]
Отговор
в отговор на Eжko_ #9

Благодарение на вас, намерих най-добрият вариант

=IF(INDEX(A1:N1,1,COUNT(A1:N1))=60,"120",INDEX(A1:N1,1,COUNT(A1:N1))+120


[линк]
Отговор
в отговор на Eжko_ #10

още по-доброто е и това:

=IF(INDEX(L8:Y8,1,COUNT(L8:Y8))=60,"120",INDEX(L8:Y8,MATCH(1E+30,L8:Y8))+120


[линк]
Отговор
в отговор на Eжko_ #11

Предимството на

Предимството на =IF(INDEX(L4:Y4,1,COUNT(L4:Y4))=60,"120",INDEX(L4:Y4,MATCH(1E+30,L4:Y4))+120

пред =IF(INDEX(L4:Y4,1,COUNT(L4:Y4))=60,"120",INDEX(L4:Y4,1,COUNT(L4:Y4))+120

е това, че при необходимост, може да бъдат пропуснати клетки от съответния ареал - тоест, там да съществуват клетки, в които нулеви стойности. Мен лично ме устройва и втория вариант, понеже стойностите се нанасят последователно, и винаги са числа, различни от нула.


[линк]

Редактирано от Eжko_ на

Отговор