Matrix Keypad - Optimisation

you say that Case won't work right? it would be nice if it did. why wouldn't it and what situation would be appropriate for the case function??

"Case" is part of the switch statement and it needs discrete values like int char long or byte. A typical usage of a switch is

incomingChar = Serial.read();
switch (incomingChar)
{
  case 'A' : DoTheAcommand();
    break;     // this jumps out of the switch 
  case 'B' : DoTheBcommand();
    break;
  ...
 default:  DoError("unexpected char");
}

In essence a switch statement is a faster and more intuitive way to write many if .. if ... if ... statements or many if .. else if ... statements. See more switch...case - Arduino Reference