Explanation
This formula relies on the FILTER function to retrieve data based on a logical test created with the MONTH function. The array argument is provided as the named range data, which contains the full set of data without headers. The include argument is constructed with the MONTH function:
MONTH(date)=7
Here, MONTH receives the range C5:C15. Since the range contains 11 cells, MONTH returns an array with 11 results:
{6;7;7;7;7;8;8;8;8;8;8}
Each result is then compared to 7, and this operation creates an array of TRUE and FALSE values, which is delivered to the FILTER function as the include argument.
{FALSE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
Only rows where the result is TRUE make it into the final output. The if_empty argument is set to "No data" in case no matching data is found.
Filter by month and year
To filter by month and year, you can construct a formula using boolean logic like this:
=FILTER(data,(MONTH(date)=7)*(YEAR(date)=2019),"No data")
Although the values for month and year are hardcoded above into the formula, they can easily be replaced with cell references.