Т.е. предлагаете написать Вам новый макрос?
Смотрю пример - сразу напрашивается фильтр.
Но проще как начинающему делать так:
циклом по исходному диапазону (или массиву) собираем словарь уникальных значений, каждому новому в item кладём увеличивающийся счётчик (начинаем с 2).
Но сперва проверка - если уникального ещё нет в словаре - заносим в словарь, на лист этого счётчика в первую свободную строку копируем текущую строку.
Если уже есть - извлекаем счётчик-номер листа из словаря, на лист этого счётчика в первую свободную строку копируем текущую строку.
Вот такая схема.
Можно использовать массив при чтении/анализе диапазона, можно использовать массивы и при копировании, но это расточительно по использованию памяти - нужно на каждое уникальное значение создать массив размером с исходный (чтоб точно хватило места), держать его в словаре вместе с счётчиком заполненных строк.
На примере таких всего 2, но представьте что на листе 10000 строк, и там например 100 уникальных - значит нужно будет 100 массивов по 10000 строк!
Или тогда такой ход - сперва анализ всего массива данных, сразу каждому уникальному собираем коллекцию номеров отбираемых строк (коллекция наращивается в процессе).
Затем уже цикл по словарю - создаём массив по размеру очередной коллекции, циклом по коллекции копируем данные из одного массива (исходного) в созданный, выгружаем массив на очередной лист.
Вот так будет и быстро, и на массивах/словарях/+коллекциях
P.S. Т.е. логика использования словаря простая - запоминаем где что лежит, или сколько чего было (или сразу всё вместе). Посмотрите на свою память
В данной задаче вторая схема - просмотрели данные, прикинули сколько листов понадобится и какие строки куда будем копировать (сколько их будет).
Далее это реализуем - для скорости копируем через массив, хотя можно и без него копировать строки прямо с листа на лист. Но тогда не нужна коллекция номеров строк - можно просто по ходу дела запоминать на какой лист кого собираем, и просто их пополнять следующей строкой. Это первая схема.