I have successfully established a VPN connection to VPC EC2 Instances (Windows), which reside in single public subnet. But, both instances cannot ping Google or each other. Is it possible to assign a Elastic IP to the public subnet so that the instances can get access to the internet, or is only possible to assign it to the EC2 instance?
So, you can either assign each instance a Public IP (Elastic or Auto-Assigned), or use a NAT Gateway. To use Public IPs, each instance will need one, and you'll also need to attach an Internet Gateway to your subnet. You said this was a public subnet, so it probably already has one, but make sure.
You can also setup a NAT Gateway, and not assign Public IPs to the instances. Hosts will access the internet via the same Elastic IP through the NAT Gateway. Amazon now offers a new Managed NAT Gateway that greatly simplifies this process. Setup instructions for the NAT Gateways can be found via the links provided.
If you go the NAT Gateway route, your subnet will not need an Internet Gateway, and you should remove it. This will make your subnet private. Then, you'll need to place the NAT Gateway on a public subnet with an Internet Gateway.
As far as the VPN question, I think you should post that part as a separate question and remove it from this question--we generally use a one-question-per-question format here.