I'm not sure exactly what you want, but in an effort to demonstrate some possibilities:
Join @@ Table[{{a, b},
NMinimize[{a x + b y, 0.2 x + 0.1 y >= 14, 0.25 x + 0.6 y >= 30, 0.1 x + 0.15 y >= 10,
x >= 0, y >= 0}, {x, y}][[2]]}, {a, 0, 3, 1}, {b, 0, 3, 1}] // Column
Or:
Join @@ Table[{{HoldForm[a] -> a, HoldForm[b] -> b},
NMinimize[{a x + b y, 0.2 x + 0.1 y >= 14, 0.25 x + 0.6 y >= 30, 0.1 x + 0.15 y >= 10,
x >= 0, y >= 0}, {x, y}][[2]]}, {a, 0, 3, 1}, {b, 0, 3, 1}] // MatrixForm
Based on your comment perhaps:
expr =
{a x + b y, 0.2 x + 0.1 y >= 14, 0.25 x + 0.6 y >= 30, 0.1 x + 0.15 y >= 10, x >= 0, y >= 0};
tab =
Table[
{a, b, x, y, #} /. #2 & @@ NMinimize[expr, {x, y}],
{a, 0, 3}, {b, 0, 3}
] ~Flatten~ 1;
TableForm[tab, TableHeadings -> {None, {"a", "b", "x", "y", "value"}}]

If wish to use specific values rather than a range you merely need this syntax for Table:

For example:
aVals = RandomInteger[{0, 20}, 7]
{3, 9, 4, 5, 18, 13, 3}
expr =
{a x + b y, 0.2 x + 0.1 y >= 14, 0.25 x + 0.6 y >= 30, 0.1 x + 0.15 y >= 10, x >= 0, y >= 0};
tab =
Table[
{a, b, x, y, #} /. #2 & @@ NMinimize[expr, {x, y}],
{a, aVals}, {b, 0, 3}
] ~Flatten~ 1;
TableForm[tab, TableHeadings -> {None, {"a", "b", "x", "y", "value"}}]

Explanation
brama requested an explanation of this code:
I have trouble understanding the role of #2 and ~Flatten~ 1. Also, How does it transfer the optimal x and y values from the NMinimize to the table?
The documentation for NMinimize states:

The first part is the minimum value found, and the second part is a list of replacement rules.
I used the combination of Function, Slot, and Apply to handle these two parts. An independent example:
{a, b, x, y, #} /. #2 & @@ {"part1", "part2"} // Quiet
{a, b, x, y, "part1"} /. "part2"
(I used Quiet to suppress the message informing us that "part2" is not a list of replacement rules.)
With actual output from NMimimize: {0., {x -> 55., y -> 30.}} this becomes:
{a, b, x, y, 0.} /. {x -> 55., y -> 30.}
Then after the ReplaceAll replacements and evaluation of a and b within Table:
{0, 0, 55., 30., 0.}
See this answer for other ways to work with the output of NMinimze.
The final piece of the code is ~Flatten~ 1. First: a ~op~ b is infix notation for op[a, b]. Flatten is used to combine expressions with the same head (by default List) and different levels. Here it is used to combine the lists of solutions for each a value into a single list of solutions. An independent example:
x1 = Array[Plus, {3, 4, 5}]
{{{3, 4, 5, 6, 7}, {4, 5, 6, 7, 8}, {5, 6, 7, 8, 9}, {6, 7, 8, 9, 10}},
{{4, 5, 6, 7, 8}, {5, 6, 7, 8, 9}, {6, 7, 8, 9, 10}, {7, 8, 9, 10, 11}},
{{5, 6, 7, 8, 9}, {6, 7, 8, 9, 10}, {7, 8, 9, 10, 11}, {8, 9, 10, 11, 12}}}
x1 ~Flatten~ 1
{{3, 4, 5, 6, 7},
{4, 5, 6, 7, 8},
{5, 6, 7, 8, 9},
{6, 7, 8, 9, 10},
{4, 5, 6, 7, 8},
{5,6, 7, 8, 9},
{6, 7, 8, 9, 10},
{7, 8, 9, 10, 11},
{5, 6, 7, 8, 9},
{6, 7, 8, 9, 10},
{7, 8, 9, 10, 11},
{8, 9, 10, 11, 12}}
Table, then if necessary edit your question with what you tried and in what way it did not work. (I will reopen the question at that time.) – Mr.Wizard Jul 21 '14 at 07:14TableForm[ Table[NMinimize[{a x+b y,0.2 x+0.1 y>=14,0.25 x+0.6 y>=30,0.1 x+0.15 y>=10,x>=0,y>=0},{x,y}][[1]],{a,0,2,0.2},{b,0,3,0.3}], TableHeadings->{"a = "<>ToString[#]&/@Range[0,2,0.2],"b = "<>ToString[#]&/@Range[0,3,0.3]}]? – seismatica Jul 21 '14 at 07:47TableForm[Table[Grid[NMinimize[{a x+b y,0.2 x+0.1 y>=14,0.25 x+0.6 y>=30,0.1 x+0.15 y>=10,x>=0,y>=0},{x,y}]/.{axby_,{x->xp_,y->yp_}}:>{{"x","y","ax+by"},{xp,yp,axby}},Frame->All],{a,0,3,1},{b,0,3,1}],TableHeadings->{"a = "<>ToString[#]&/@Range[0,2,0.2],"b = "<>ToString[#]&/@Range[0,3,0.3]}]. I don't know what CT is but I assume it is the same as ax + by. – seismatica Jul 22 '14 at 03:48TableForm[Table[Grid[NMinimize[{a x+b y,0.2 x+0.1 y>=14,0.25 x+0.6 y>=30,0.1 x+0.15 y>=10,x>=0,y>=0},{x,y}]/.{axby_,{x->xp_,y->yp_}}:>{{"x","y","ax+by"},{xp,yp,axby}},Frame->All],{a,0,3,1},{b,0,3,1}],TableHeadings->{"a = "<>ToString[#]&/@Range[0,3,1],"b = "<>ToString[#]&/@Range[0,3,1]}]– seismatica Jul 22 '14 at 03:53