По сути нам нужно узнать размер всего диапазона и место текущей ячейки в нем. Главная проблема — избежать циклических ссылок.
Например, с помощью COUNTA() можно определить, сколько ячеек заполнено слева. Или справа. Но вот использовать и то, и другое в одной формуле не получается, т.к. возникают циклические ссылки.
Позицию текущей ячейки можно ещё определить с помощью COLUMN() и вычесть фиксированное смещение. Это небольшой хак, может можно и лучше.
Дальше уже простая арифметика. Получаем распределение в диапазоне 0-1, умножаем на 3, округляем.
Например, для начальной ячейки C4:
=CEILING((COUNTA(D4:$XFD4) + 1) / (COUNTA(D4:$XFD4) + COLUMN() - 2) * 3; 1)
Для другой начальной ячейки нужно поправить константу в "COLUMN() - 2".