The problem is that {0:10} is not {0,1,...,10}, but rather {[0,1,...,10]}. So it's a single cell containing a vector, and of course x never equals that vector.
To solve it, use cell arrays with one element per cell. To create them from vectors you can use mat2cell (or better yet num2cell, as in @thewaywewalk's answer)
x = round(rand*10);
switch (x)
case mat2cell(0:10,1,ones(1,11))
disp('x between 0 and 10');
case mat2cell(11:20,1,ones(1,11))
disp('x between 11 and 20');
case mat2cell(21:100,1,ones(1,81))
disp('x between 21 and 100');
end
Or, more easily, use elseifs instead of switch, and then you can use vectors and any:
x = round(rand*10);
if any(x==0:10)
disp('x between 0 and 10');
elseif any(x==11:20)
disp('x between 11 and 20');
elseif any(x==21:80)
disp('x between 21 and 100');
end