Using the REF(block#, index) MATH function and REFWRITE value, block#, index instruction, you can implement 2D arrays.
Create a set of Data-Blocks, one for each "column". User block numbers will start at 32, but if you already have other user blocks, it may be higher. Regardless, create all of them contiguously. Attached is an example where I created 4 Columns' worth of bits, ColA, ColB, ColC, and ColD.
The Data-Block's block number is the "Block#" in the two instructions above. So you would use an "index" of 32 for the "column" index for ColA, 33 for ColB, 34 for ColC, and 35 for ColD.
Hence, you could easily use V0 and V1 as your two 0-based array indexes, but then use V2 as the Block Number calculated from V0+32 in a MATH:
MATH V2 "V0 +32"
If you are doing Boolean logic, you could easily do that in MATH instead of LADDER using the Boolean && || and ! operators:
MATH C100 "REF(V2, V1) && REF(V2, V1+22) || !REF(V2-1, 0)" // yes, the REF parameters can be expressions, so you could just use V0+32 as the sub-expression for the block#
or to write the value of C100 into a 2D reference:
REFWRITE C100 V2 V1