Vekic of Croatia upset the two-time Wimbledon champion 6-4, 6-1 in one hour 23 minutes to level their head-to-head record at one all.
"At the beginning of this tournament I believed that it will be great to be here for the weekend," eight-seeded Vekic said.
"Now I'm in the semi-final and I'm really happy about that.
"Any of my opponents in the semis will be a good player and it will be definitely a tough match. Hopefully I will be able to win anyway."
Kvitova, who lost to Naomi Osaka in last weekend's Australian Open final, looked tired and rusty from the start, producing a catalogue of unforced errors to allow Vekic to gain a one-set lead after 42 minutes on court.
In the second Vekic, who is ranked 30th in the world, looked firmly in control, breaking Kvitova's serve on three more occasions to chalk up her biggest career win.
On Sunday, Kvitova's manager Miroslav Cernosek said she pulled out of the Czech team to face Romania in the Fed Cup on February 9-10, because she wanted to defend her titles in St Petersburg and in Doha in two weeks.
Vekic now faces Russian 34-year-old veteran wild card Vera Zvonareva, now ranked 97th in the semis.
Zvonareva beat third seed compatriot Daria Kasatkina 6-3, 7-6 (7/3) as she looks to rediscover the form which took her to the 2010 Wimbledon and US Open finals.
Second seeded Kiki Bertens of the Netherlands overpowered the local favourite Anastasia Pavlyuchenkova 6-2, 3-6, 6-0 in one hour 31 minutes to gain revenge for the second-round defeat at this year's Australian Open.
"It's always tough to oppose Anastasia," Bertens said. "We've played in Melbourne and she was the better one. So I'm really happy to win today."
Bertens next plays fourth seed Aryna Sabalenka of Belarus, who advanced into the semis seeing off Russia's qualifier Ekaterina Alexandrova 6-3, 6-4.
"I need to play aggressive tennis (against Sabalenka)," Bertens added. "It's gonna be a tough match but I'm set to show my best tomorrow."