Още един въпрос
10 отговора
0 прегледа
Още един въпрос
Христос възкресе, приятели
Имам още едно питане, ако е възможно, помагайте
В екселска таблица нанасям стойности в клетки - по редове - в ареалаите, примерно:
от 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.
Благодаря
Наско
[линк]
Имам още едно питане, ако е възможно, помагайте
В екселска таблица нанасям стойности в клетки - по редове - в ареалаите, примерно:
от 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_ на
Стана, работата
Един приятел ми помогна - това, което ми предостави, работи успешно.
Формулата е:
=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.
"Обърни внимание", казва накрая моя приятел - "че формулата, която съм ти дал не е универсална. Не можеш да разпъваш или променяш вида и мястото на масива и тя да ти дава верни резултати. Тя работи вярно само в конкретния случай и в никой друг. Ако искаш универсална формула, задачата става доста сложна."
Да му благодарим всички за положеното старание.
[линк]
Формулата е:
=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_ на
Re: Още един въпрос
Не че съм от разбиращите но смятам че ако в клекта O1 напишеш...
=INDEX(A1:N1;1;COUNT(A1:N1))+120
...може да се получи нещо.. после тая формула я размножи по колона "O"
=INDEX(A1:N1;1;COUNT(A1:N1))+120
...може да се получи нещо.. после тая формула я размножи по колона "O"
Re: Още един въпрос
Това е малко по-добро. Дава резултат, дори ако има незапълнени клетки или текстова информация, като ги игнорира.
=INDEX(A1:N1;MATCH(1E+30;A1:N1))+120
=INDEX(A1:N1;MATCH(1E+30;A1:N1))+120
Re: Още един въпрос
Наистина предложеното от TRN работи!..
Чудя се защо според документацията на Excel би трябвало данните да са във възходящ ред, за да работи коректно. Очевидно достатъчно е да няма стойност по-голяма от търсената (1Е+30 е доста голяма) за да стигне до края и да върне последния числов елемент.
Чудя се защо според документацията на Excel би трябвало данните да са във възходящ ред, за да работи коректно. Очевидно достатъчно е да няма стойност по-голяма от търсената (1Е+30 е доста голяма) за да стигне до края и да върне последния числов елемент.
При мен не върви
Прочених формулата, понеже трябва да прибавя числото 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 (в червеното)
[линк]
=IF(INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))=60);+60;INDIRECT(CONCATENATE(CHAR(64+COUNT(A1:N1)),1))+120
Този вариант при мен работи, както и предишният по-горе.
Вашият, за съжаление, не върви при мен, и не знам каква е причината. Видимо е по-простичък и ще улесни копирането на формулата в следващите клетки. В моя вариант, при копиране адреса на масива се променя автоматично, но не и номера на реда, който в случая е 1 (в червеното)
[линк]
Re: При мен не върви
Надявам се, че не си направил каша със скобите, а също и със разделителите, както си го написал тук...
Всеки от символите ";" и "," може да е разделител (list separator) но не и двата едновременно.
И все пак ако искаш да получиш 120 ако проверката излезе трябва да напишеш 120 (а не +60)...
Всеки от символите ";" и "," може да е разделител (list separator) но не и двата едновременно.
И все пак ако искаш да получиш 120 ако проверката излезе трябва да напишеш 120 (а не +60)...
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 копирах едно към едно - пробвах и с разделител "," - пак същото.
[линк]
Благодарение на вас, намерих най-добрият вариант
=IF(INDEX(A1:N1,1,COUNT(A1:N1))=60,"120",INDEX(A1:N1,1,COUNT(A1:N1))+120
[линк]
[линк]
още по-доброто е и това:
=IF(INDEX(L8:Y8,1,COUNT(L8:Y8))=60,"120",INDEX(L8:Y8,MATCH(1E+30,L8:Y8))+120
[линк]
[линк]
Предимството на
Предимството на =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
е това, че при необходимост, може да бъдат пропуснати клетки от съответния ареал - тоест, там да съществуват клетки, в които нулеви стойности. Мен лично ме устройва и втория вариант, понеже стойностите се нанасят последователно, и винаги са числа, различни от нула.
[линк]
пред =IF(INDEX(L4:Y4,1,COUNT(L4:Y4))=60,"120",INDEX(L4:Y4,1,COUNT(L4:Y4))+120
е това, че при необходимост, може да бъдат пропуснати клетки от съответния ареал - тоест, там да съществуват клетки, в които нулеви стойности. Мен лично ме устройва и втория вариант, понеже стойностите се нанасят последователно, и винаги са числа, различни от нула.
[линк]
Редактирано от Eжko_ на