Нужно сделать checkbox или radio.
В Excel есть данные элементы, но если их будет много на странице (от 50-100), то появятся заметные лаги.
Я такую проблему решал, делая из обычных ячеек checkbox-ы. То есть, как-нибудь помечаем ячейки с checkbox-ами (отдельная колонка, отдельный стиль, именованный диапазон, массив с адресами, что-то ещё) и вешаем свой обработчик на событие Worksheet_SelectionChange. В обработчике проверяем, является ли кликнутая ячейка чекбоксом и, если является, ставим/убираем галочку, если нет - просто пропускаем событие.
Тут ещё нужно подумать, копировать ли сразу товар на страницу печати при клике на чекбокс, либо добавить кнопку копирования, чтобы пользователь после всех отметок мог "сгенерировать" страницу печати. Уверен, остановитесь на втором варианте, так как намного проще в реализации + не будет тормозов от пересчетов, когда страница печати будет большой.
Так же что бы строка с названием группы товара, как на картинке "каркасы для швабр", попадала, если выбран хоть один из checkbox. Если в столбцах БЕЗ НДС или С НДС нет ни одного выбранного checkbox, то данный столбец не должен попадать в сформированную для печати страницу.
Дублируете категории на странице печати, делаете им высоту в 0 px. Попутно категории можно сделать именованными диапазонами.
Если выбранный товар попадает в скрытую категорию - просто делаете высоту > 0 px и добавляете ниже строку с товаром.
Вывод общей цены с ндс и без внизу колонок
Ну, это обычной формулой СУММ решается. На VBA можно динамически диапазоны генерировать ей на вход.