Based on the data you provided, I cannot be 100% sure my answer is correct, but here is a thought.
The most common reason for no public IP address for your EC2 instance is that you are launching your EC2 instance using a private subnet. A private subnet means any EC2 instances located in that subnet aren't directly addressable from the public web. In different words, by definition, EC2 instances in a private subnet cannot have a public IP address.
This would justify why checking "public IP address" has no impact, and why you are unable to assign an Elastic IP address.
You can't simply relocate an instance from one subnet to another. If you wish to do that, you'll create an AMI of your instance (right-click on the EC2 instance and click on create image), and then launch a new instance from that AMI in a different subnet.
To determine if your subnet is private, look into the Route Table and see if you've got an internet gateway route. Go to VPC > Subnets > choose a Subnet > Route Table tab. Look for an entry that has something like igw-***. If you see this, it's a public subnet. If you see one thing like eni-*** / i-***, it is a private subnet.