irsmalik:
Simple answer to your question of VBA or Query: Yes, either, both, and, or. -- Thing is you can do this with a query and/or VBA.
There are dozens of ways to reach your goal; however, we need to have a better understanding of your current situation, such as which version of Access/Office you are using, your experience level, how you are feeding your data to the report etc...
However, even without the afore mentioned information, what I think you're root problem starts with is that it sounds like you need to normalize your data:
home > topics > microsoft access / vba > insights > database normalization and table structures
Once you have a properly normalized database and established the proper relationships, one of the easier methods is to setup a form that allows you to pass your selections either as conditionals to the report or as parameters to a query (various ways to do that) that serves as the record source for the report.
--
I typically use cascading combo-boxes (
home > topics > microsoft access / vba > insights > cascaded form filtering ) on a form to filter down the database to show the records that will be printed and have a command button open/print the report. Sometimes I send the selected criteria to report, other times I have the query parameters based on the form, and yet other times I've actually built and set the record-source for the report on-the-fly.