|Yes, you can do it with one line, but the line would be slightly different than the others.|
The first 2 lines are not forcing anything in the Excel sheet to be uppercase. They are reading the contents of the cell and forcing it to be uppercase in "VBA memory" so that VBA can compare apples to apples regardless of what the user enters. If we didn't do it that way, we'd have to check for every combination of Yes, YeS, etc. line by line. The code then puts a "Y" or "N" in the cell based on the input.
Your second request is slightly different. You are asking for 2 things:
1 - Force the contents of the actual cell to be uppercase
2 - Limit this to Column E.
So first we have to check and see if the Target cell is in Column E, then, if it is, we can replace the contents with the uppercase version.
Note: VBA checks some things with a "double negative" i.e. if Not something is Nothing, then it must be something. That's why the new line might look a little strange.
Here's the code to handle Yes and No in every cell in the sheet and to force the contents of any cell in Column E to be uppercase:
Private Sub Worksheet_Change(ByVal Target As Range)
If UCase(Target) = UCase("Yes") Then Target = "Y"
If UCase(Target) = UCase("No") Then Target = "N"
If Not Intersect(Target, Columns("E")) Is Nothing Then Target = UCase(Target)