I would take a look at the Response Screening platform:
http://www.jmp.com/support/help/Response_Screening.shtml
which is designed for this kind of thing.
But, if you want to stick with your current method, you can use the kind of approach shown below. Do 'File > New > New Script', copy the code, then 'Edit > Run Script'.
NamesDefaultToHere(1);
// Make some data
nr = 25; // Numer of rows
nc = 21; // Number of columns
m = J(nr, nc, RandomNormal());
cNames = {"Y"}; For(c=2, c<=nc, c++, InsertInto(cNames, "X"||Char(c-1)));
dt = AsTable(m, << ColumnNames(cNames));
dt << setName("Many Xs");
// 'Traditional' Fit Y By X . . .
// (1) Launch the platform invisibly
biv = dt << Bivariate(Y(cNames[1]), X(cNames[2::NItems(cNames)]), FitLine, Invisible);
// (2) Get the R Squared values into an invisible table
dt2 = Report(biv[1])[TableBox(1)] << makeCombinedDataTable(Invisible(1));
r2Del = dt2 << getRowsWhere(:Column 1 != "RSquare");
dt2 << deleteRows(r2del);
dt2 << Sort(By(:Column 2), Order(Descending), ReplaceTable);
// (3) Get the ordering of the Xs by R Squared
xOrder = Column(dt2, "X") << getValues;
// (4) Close the invisible report and table
Report(biv[1]) << closeWindow;
Close(dt2, NoSave);
// (5) Launch the platform with the correct order of Xs
biv = dt << Bivariate(Y(cNames[1]), X(Eval(xOrder)), FitLine);
// Response Screening Platform . . .
Wait(3);
rs = dt << Response Screening( Y(cNames[1]), X(cNames[2::NItems(cNames)]) );