Но так - всё же нечестно, ибо вы наплевали на вариант ya2500, а с него всё началось.
На что конкретно я наплевал? Во втором варианте, который твой переписанный с макросами - код один в один как у него, только вместо if/else используется тернарный оператор.