Intersect(Target, Columns(...)) zwraca zakres komórek typu Range(), będący wspólną częścią - w przypadku zdarzenia Worksheet_Change - obszaru, który uległ zmianie (Target) oraz wybranej kolumny (Columns(...)).
Tym obszarem który uległ zmianie (Target) może być tylko jedna komórka (np. kiedy wpisujesz w nią wartość ręcznie), ale też zakres komórek (np. kiedy usuwasz wiersz lub wiersze albo wklejasz do kilkunastu komórek jednocześnie).
Przytoczę raz jeszcze kod który podawałem wcześniej, zmodyfikowany do działania dla wielu kolumn oraz rozbudowany o sprawdzanie warunku dla kolumn A, B i E:
Kod, przyznaję, nie jest doskonały, są przypadki kiedy nie zaznaczy poprawnie (np. przy wklejaniu x w kilka kolumn jednocześnie, bo wtedy Target.Column będzie równe tylko pierwszej kolumnie), ale mi to jakoś specjalnie nie przeszkadza, a nie chciałem jeszcze bardziej kodu komplikować i spowalniać...