On a new sheet, pick a cell such as A1 and type in the date of the 1st of the first month that you need to use, eg 1/1/2001.
Under that, type in the 1st of the next month eg 1/2/2001
Select both cells and drag the cell handle down to create a list of months for as long as you need.
Select all those months and apply a custom format such as as "mmm yy" to get "Jan 01". With those months selected, in the name box type a new name to refer to this list by such as "MonthsList".
On your original sheet, choose where you want to pick the month, and apply data validation to that cell, using =MonthsList as the source. You now have a picklist to choose the month. Apply a suitable number format to this too.
Select this cell and give that a name too, maybe "SelectedMonth"
Back on your new sheet, in a new column, maybe at C1, enter this formula:
=SelectedMonth
in the cell beneath that, C2, enter this:
=IF(C1+1=DATE(YEAR(SelectedMonth),MONTH(SelectedMonth)+1,1),"",C1+1)
That checks what would happen if you add 1 to the date above - is it equal to the first day of the month after the selected month (that's why the +1 in the middle). Format both C1 and C2 as dates.
Drag this down 30 rows to row 31.
Now select C1:C31 and give that a name such as DatesList.
Back on your original sheet, under the cell where you select a month, apply data validation and use =DatesList as the source.
Job done. For months with <31 days you will have some blank rows at the end of the second picklist. You could tidy this up using a formula for DatesList instead of just cell references, then you can use OFFSET or INDEX techniques to return only as many rows as have data in them. But realistically I would probably not worry about that for this use case where it should be obvious not to choose them.
In the end you now have a date selected which you can use in formulas or whatever to do comparisons, filtering etc.