I reformatted the tables a little bit, and read between the lines on how this should work, but hopefully this will give you a starting point.
First, I created separate tables for the Sunny day and Rainy days (I'm guessing these are already separate tables, but it isn't clear from the screenshot). These tables were named appropriately (important) and had the same 'Activities' heading (also important). For example:
(you can put whatever text you like in them, and they don't have to have the same number of items).
I wasn't sure how 'Quiet time' and Music & Movement fit into this, since they could apply on any day... but hopefully that's something you can implement.
Second change was a second Header row on the main calendar table - this is where you enter the weather for the day. The cells in this row are formatted as 'Pop-up menu', with options that match the table names created above (e.g. 'Sunny', 'Rainy', etc.) - that's why the table names are important).
Now comes the magic. The cells in the calendar create a dynamic lookup using the value of the pop-up menu to determine which table to fetch data from.
The formula in cell B5, for example, is:
=INDIRECT(B$2 & "::A" & RANDBETWEEN(2, 1+COUNTA(INDIRECT(B$2 & "::Activities"))))
This does several things. First, the INDIRECT() function is used to build a reference to another cell. In this case, we use the value of B$2 (the 'weather' popup in the current day) to identify the table name to use (which is why the activity table names are important). We add to that '::A' (to reference column A in that table), plus a random number between 2 (avoiding the header row) and the number of values in the 'Activities' column (hence the importance of the column header).
Now each time you select a value from the pop-up menu (e.g. either Sunny or Rainy) the cell updates with a new random item from the appropriate table.
Like I said, I don't know how this relates to the Quiet and Music activities, but hopefully you can expand this idea to incorporate them as needed.