Just use the ASCII values Chart for the characters. I don't know why you're using all those Mod functions? ASCII values for the UpperCase letters run from 64- 90, lowercase from 97 - 122.
You'll have to write code to deal with any shifts that throw you over the limits (90 or 122). But you can add 2 directly to the value of the Ascii Value to obtain the shift value.
For instance the ASCII value of 'a' is 97. Add 2 it would be 99. chr$(99) would be 'c'
There are UCase and LCase functions to convert Upper to Lower and Lower to Upper case.