To be perfect, I did this:
data = shape(Number Col Box("", dt[1,0]) << get as matrix, 1, N Cols(dt));
Now, given similarly constructed matrices for the LSL/USL specs, I can do:
If( max(data < LSL) > 0 | max(data > USL) > 0, "FAIL", "PASS")
to check a row of data against the limits specified in the column properties, without having to loop through the columns for every row - taking a mXn process and turning it into a m+n process.