Hola Alba... lo que se me ocurre para este problema es trabajar con listas enlazadas... espero que ya conozcas la forma de trabajar de éstas, sino te será un poco más complicado... una posible implementación de listas sería la siguiente:
Nota: uso guiones para mostrar la indentación.
TYPE
----Fila = ^NodoFila;
----Columna = ^NodoColumna;
----NodoFila = RECORD
--------Dato : string; {sea el dato que sea, incluso otro registro}
--------Col : Columna; {enganche con las columnas}
--------Sig : Fila; {enganche con su siguiente}
----END;
----NodoColumna = RECORD
--------Dato : string;
--------Sig : Columna;
----END;
La explicación:
Hay una fila y tantas columnas como elementos tenga la lista FILA; las columnas a su vez pueden tener diferente cantidad de elementos unas con otras, por ej:
FILA > A B C D E F G H
--------- I J K M N O
--------- P Q R
--------- S T
--------- U V
--------- W
La manera de manejarte sería primero buscando la columna moviéndote a través de la lista FILA, y al encontrarla "bajar" por la lista COLUMNA correspondiente hasta encontrar la posición, siempre teniendo en cuenta que no se termine ninguna de las dos listas.
Puede implementarse una lista doble o incluso una lista circular en base a las necesidades propias del problema.
Cualquier duda lo consultas aquí, o a cualquiera de los participantes en el foro, si tienen alguna otra alternativa espero que la publiquen también.
Hasta luego y mucha suerte.