[EXCEL] Визмане на дата от EГН и проверка кои са над 60г.


2

Здревайте колеги!

Майка ми има проблем. Всяка година тя преглежда една голяма таблица с хора и техните ЕГН-та и по тях трабва да намери всички, които са навършили 60г. Майка ми е свикнала един по едни да плеглежда рожденнитте им дати и да смята кой на колко години е. Та се чудя, как да и олесня живота.

Моля помогнете :)




Отговори



1

заинтригува ме....

хрумна ми това...

=IF(YEAR(NOW())-YEAR(B1)>60;"ПО-ВЪЗРАСТЕН ОТ 60 ГОДИНИ";"ПОД 60 ГОДИНИ")

Като клетка B1 е годината на съответния човек в таблицата....

Дано ти свърши работа :)

Поздрави

ПП.

Може и тази функция да тестваш...

=YEARFRAC(B1;NOW();3) - функцията смята разликата между две подадени дати ...

тук B1 ти е подадената година

NOW() - взима текущата година

последния параметър ти е формата за година - в случая 3 е европейски формат...


от kpacu (1114 точки)


0
Как да везма датата на раждане от ЕГН то :) @

от webmatrix (825 точки)


3
Просто добавяш филтър към съответната колона с ЕГН - та и му задаваш да е по-голям от дадено число. Ексел ще филтрира всички резулатати само за тези, който трябват.
Или просто може да сортираш таблицата по колоната с егенетата т.к. годината на раждане е първата цифра - най-младите ще са най-отгоре, а най-старите най-отдоло ( или обратно в зависимост от начина на сортиране).
Btw всичко това го има в Ексел, не ти трябва никакво програмиране :)

от Teodor92 (13062 точки)


0
Да това май е по-добър вариант, отколкото да правиш заявки

от AsenVal (3487 точки)

0
По-лесен е, иначе с заявки е по-гъзарско :D

от Teodor92 (13062 точки)



4
правиш си един VS проект с sql заявка към клетката с егенета и както колегата е написал можеш с един where, в заявката да провериш дали хората са над 60г и да и ги разпечаташ дори :)

от AsenVal (3487 точки)


2

Не трябва да забравяме че ЕГН-то има провизии за хора родени в 19-ти и 21-ви век, а и ако се търси точната възраст ще трябва да се вземе предвид и месеца. Ето какво измъдрих  съгласно алгоритъма на ЕСГРАОН: цък

Интересен момент е че Excel/Google Docs не работят с дати преди 1900-та година което води до странното поведение в една от клетките в колоната "Birthday". Надявам се примерът да е полезен, макар че не съм го тествал много старателно.


от staafl (5770 точки)


0
едит: сега виждам че има евентуален проблем за хората които са родени на днешната дата или съседния ден; все пак е по-добре от нищо.

от staafl (5770 точки)

0
проблемът е поправен с YEARFRAC - благодарности на Krassi Dimitrov за идеята :-)

от staafl (5770 точки)


2

ето и моето решение...на тази задачка :)

Само че логиката след 2060 та гърми :PP. Тогава ще го фикснем...

От @Velko Nikolov съкратих писането с функцията DATE :)

Предлагам Case Closed....

 


от kpacu (1114 точки)


2
Ето един по-лесен начин, макар и не дотам "изпипан": В колона В са ЕГН-тата, а в колона А с формулата =LEFT(B1,6) е отделена частта за дата. След това маркираш таблицата и даваш възходящо сортиране по първата колона (тук съм ги сортирала). За тази година, за всички, които ще навършат 60 години, това число трябва да е по-малко или равно на 531231. Маркираш тези сортирани редове и voila - правиш с тях, каквото искаш! За следващата година числото 531231 ще стане 541231 и т.н.
Edit: Velko Nikolov, благодаря :-)
При сортирана таблица родените през 21 век ще бъдат наредени в началните редове. Просто предлагам бързо, макар и временно решение. През 2060 г. предстои нова концепция за ЕГН, ако изобщо ще съществува тогава.

от ellapt (6303 точки)


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

от ellapt (6303 точки)

0
много елегантно решение! единственият проблем обаче е че може да се обърка при хората, които не са родени в 20-ти век - например, 0147xxxxxx ще е в същата група като 0107xxxxxx.

от staafl (5770 точки)


3
5307193609
=DATE(MID(A1;1;2);MID(A1;3;2);MID(A1;5;2))
=IF(B1<=D1;"SUCCESS";"ERROR") 19.7.1953

В първата колона са ЕГН-тата

Във втората колона се парсват към дата

В третата колона се проверява за 60 години

В четвъртата колона е датата на която би трябвало да са родени за да навършат 60 години днес - нея я въвеждаш на ръка всеки ден (не го измислих по-умно) ЕДИТ тя даже не се вижда но в нея има 19.7.1953


от todor_pr (1527 точки)


1

Ако имаш нерви да се занимаваш със VBA, можеш да си направиш макрос със функция CalculateAge(egn), която от egn ти пресмята година на раждане, месец и ден. Синтаксиса обаче е адски дървен и е страшно криво да се напише (не е невъзможно де). Ето едно демо как се пишат макроси. Евентуално, ако ти се занимава, може и да си напишеш да ти генерира нова таблица с нужните хора и данни. Сега разбирам защо Наков го храни толкова тоя език.


от d.georgiev.91 (813 точки)


1

Здравейте,

И аз потвърждавам. Най-вазумното решение е това на колегата  Teodor Kurtev 1, просто слагаш един филтър в Excel-a. Ако Ви е страх да не се разбъркат данните просто копирайте филтрираните данни на нов документ. Единствената опция да се прецака консистентността на данните е да ги сортираш без да позлваш опцоята Expand - така сортираш само отделна колона.

Няма нжда нито да се замисляш, нито да пишеш програми. Просто й обясняваш как работят филтрите и си готов.

Поздрави и успех с обясненията!


от nikolaikolarov (2177 точки)


1
Ти си C# програмист, мисли като такъв!
Най-добре вземи си домашното за работа с excel. Направи си една програмка която да изтегля данните, сплитваш стринга на ЕГН-то, правиш нов excel с редовете който отговарят на датата и си готов.
Майка ти ще трябва да сложи excel в папката на програмата, да я стартира и да си отвори после новия файл само с нужните данни.

от saykor (8845 точки)


0
Разбира се файла трябва да е с определено име или примерно да го преименува като му прикачи едно input-xxx. Програмата чете всички файлове в директорията почващи с input и плюе новите почващи с output-xxx. Където xxx е името на файла.

от saykor (8845 точки)