|
Страници по тази тема: 1 | 2 | (покажи всички)
Тема
|
Още един въпрос
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 20.04.10 11:46 |
|
Христос възкресе, приятели
Имам още едно питане, ако е възможно, помагайте
В екселска таблица нанасям стойности в клетки - по редове - в ареалаите, примерно:
от 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_ на 20.04.10 16:38.
| |
Тема
|
Стана, работата
[re: Eжko_]
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 21.04.10 10:50 |
|
Един приятел ми помогна - това, което ми предостави, работи успешно.
Формулата е:
=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_ на 21.04.10 10:51.
| |
Тема
|
Re: Още един въпрос
[re: Eжko_]
|
|
Автор |
ql^2/8 (да питам аз..) |
Публикувано | 21.04.10 10:54 |
|
Не че съм от разбиращите но смятам че ако в клекта O1 напишеш...
=INDEX(A1:N1;1;COUNT(A1:N1))+120
...може да се получи нещо.. после тая формула я размножи по колона "O"
| |
Тема
|
Re: Още един въпрос
[re: ql^2/8]
|
|
Автор |
TRN () |
Публикувано | 22.04.10 07:53 |
|
Това е малко по-добро. Дава резултат, дори ако има незапълнени клетки или текстова информация, като ги игнорира.
=INDEX(A1:N1;MATCH(1E+30;A1:N1))+120
| |
Тема
|
Re: Още един въпрос
[re: TRN]
|
|
Автор |
ql^2/8 (да питам аз..) |
Публикувано | 22.04.10 11:10 |
|
Наистина предложеното от TRN работи!..
Чудя се защо според документацията на Excel би трябвало данните да са във възходящ ред, за да работи коректно. Очевидно достатъчно е да няма стойност по-голяма от търсената (1Е+30 е доста голяма) за да стигне до края и да върне последния числов елемент.
| |
Тема
|
При мен не върви
[re: TRN]
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 22.04.10 12:19 |
|
Прочених формулата, понеже трябва да прибавя числото 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 (в червеното)
| |
Тема
|
Re: При мен не върви
[re: Eжko_]
|
|
Автор |
ql^2/8 (да питам аз..) |
Публикувано | 22.04.10 18:16 |
|
Надявам се, че не си направил каша със скобите, а също и със разделителите, както си го написал тук...
Всеки от символите ";" и "," може да е разделител (list separator) но не и двата едновременно.
И все пак ако искаш да получиш 120 ако проверката излезе трябва да напишеш 120 (а не +60)...
| |
Тема
|
Re: При мен не върви
[re: ql^2/8]
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 23.04.10 18:58 |
|
В отговор на:
Надявам се, че не си направил каша със скобите, а също и със разделителите, както си го написал тук...
Не разбирам, какво съм направил - онова, което представих, работи и ми върши чудесна работа - ето го пак:
=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 копирах едно към едно - пробвах и с разделител "," - пак същото.
| |
Тема
|
Благодарение на вас, намерих най-добрият вариант
[re: Eжko_]
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 31.05.10 15:12 |
|
=IF(INDEX(A1:N1,1,COUNT(A1:N1))=60,"120",INDEX(A1:N1,1,COUNT(A1:N1))+120
| |
Тема
|
още по-доброто е и това:
[re: Eжko_]
|
|
Автор |
Eжko_ (бодли_дрешко) |
Публикувано | 31.05.10 15:18 |
|
=IF(INDEX(L8:Y8,1,COUNT(L8:Y8))=60,"120",INDEX(L8:Y8,MATCH(1E+30,L8:Y8))+120
| |
|
Страници по тази тема: 1 | 2 | (покажи всички)
|
|
|