As per José-Luis' comment, using numbered variables is a bad idea. In your case, it's going to make the code harder to expand as well. What if you want 10 zones? Ok, you can copy/paste two more lines. What if you want 100 zones? copy/paste is going to be a nightmare.
You could make your zone creation more clever (and shorter), which at the same time would help with your question, identifying which zone a pixel belongs to.
let's start by defining your zones colours:
zonecolours = [128 128 0
193 221 198
126 0 1
127 127 127
205 204 0
0 0 204
229 126 127
0 229 0
185 122 87];
Note that I use the power of matlab: matrices, to just have everything in one variable. It's trivial to add more zones: just add rows.
Now let's find out which zone a pixel belongs to:
[~, pixelzone] = ismember(reshape(img, , 3), zonecolours, 'rows');
pixelzone = reshape(pixelzone, size(img, 1), size(img, 2));
What I've done here is reshape the image into just rows of pixels where each column is an RGB triplet. Then the second output of ismember tells me which row of zonecolour each pixel belongs to (it'll be 0 if the pixel doesn't belong to any zone). I then reshape that output back into the image shape.
Now you can simply use that pixelzone matrix for your imfill:
for zoneindex = 1:size(zonecolours, 1)
imfill(pixelzone == zoneindex, 'holes');
And finding which zone a pixel belongs to is trivial: it's the pixelzone matrix, pixelzone(row, col) tells you which zone the pixel at (row, col) belongs to. If you work in axes coordinates, you just have to convert these coordinates to pixel coordinates.