Unpublishing Components and Component Templates is a dangerous activity.
If you unpublish a Component, you will, by default, unpublish every presentation of that Component (including the ones you want!) and unpublish every page it is used on (including the homepage if it's on there).
If you unpublish a Component Template, you will, by default, unpublish all Dynamic Component Presentations using that template and every page that uses that CT (including the homepage if it's on there).
In this case, you cannot unpublish Components, since you will then have to republish them having changed the Component Template not to be associated with the given Schema. Also, it seems, that unpublishing the Component Template is taking ... rather a long time.
So, what to do?
I can't think of any solution in the GUI, so that leaves code.
I would suggest, as Nuno does in the comments, that you use a Core Service script to get a list of Components used by the Template and unpublish them, one by one. But that will of course unpublish the Components you do want, which is bad.
Before doing so, therefore, you will need to implement a Custom Resolver (see: https://docs.sdl.com/LiveContent/content/en-US/SDL%20Web-v1/GUID-F792AB1A-060A-4757-802D-3A2DB18F022D) to ensure you are only unpublishing the items using the template you want. The resolver will have to check the template each resolved item is using and remove. Something like this (I have not tested, this is just modified from one of our existing resolvers, so due diligence, checking, etc.):
class GetMeOutOfJailResolver : IResolver
public void Resolve(IdentifiableObject item, ResolveInstruction instruction, PublishContext publishContext, ISet<ResolvedItem> resolvedItems)
Session session = publishContext.Session;
int SCHEMA_ITEM_ID = 123456; //i.e. 123456 in tcm:12-123456-8 to cater for localizations
int TEMPLATE_ITEM_ID = 345678;
string USER_ID = "tcm:my-user-id";
if (item is Component
&& instruction.Purpose == ResolvePurpose.UnPublish
&& session.User.Id == USER_ID
//&& other safeguards
Component component = (Component)item;
if (component.Schema.Id.ItemId == SCHEMA_ITEM_ID)
ResolvedItem originalResolvedItems = new ResolvedItem[resolvedItems.Count];
foreach (ResolvedItem resolvedItem in originalResolvedItems)
&& resolvedItem.Template.Id.ItemId != TEMPLATE_ITEM_ID)
Obviously a resolver is called every time something is published or unpublished. Add whatever safeguards you need to (be it only allowing a particular user to use the resolver, implementing some change freeze across the system while the resolver is active, or whatever).
Sorry, I don't see any easier or more elegant options. It would be nice to see this as a product feature ((Un)publish -> choose Component Presentations to (Un)publish).