Мульти-выборки сложно. Сохраняйте свой подход максимально простым.
Вот один альтернативный подход, который я использовал раньше. Вместо ListBox в каждой строке, выберите событие select во всплывающей форме, показывающей доступные варианты цвета. Пользователь выбирает один или несколько элементов в этом списке, и выбранные значения передаются обратно в содержимое ячейки в виде строки через запятую.
Итак, когда пользователь щелкает ячейку Цвет в заданной строке, всплывающее диалоговое окно выглядит так:
Select colors for this product:
[] Red
[] Green
[] Blue
[] ...
<OK> <Cancel>
Вы, конечно, должны написать некоторый код для обработки этого события и пользовательскую форму.
При нажатии кнопки «ОК» выбранные элементы возвращаются в ячейку в виде «Красный, Синий, Белый». Если нажать кнопку «Отмена», ячейка останется как есть.
Удачи.