Un par de puntos…
- Necesitas trabajar tanto con las referencias de las celdas como con los valores de las celdas
- Numbers no te permite borrar una celda
- Necesitas especificar la tabla en el script, no solo la hoja
Lo que hace este script es recorrer cada valor de la lista usada y recorrer la lista maestra para ver si hay alguna coincidencia. Ambas listas están invertidas para que las entradas más recientes se procesen primero, pero dado que no se pueden borrar celdas, esto podría no producir ningún beneficio.
Cuando encuentra una celda coincidente en la lista maestra, borra el valor y luego pasa a la siguiente entrada en la lista usada — por lo tanto, asume que habrá solo una coincidencia por cada elemento de la lista usada.
Si deseas colocar la lista usada en una segunda tabla, puedes hacerlo incluyendo 'tabla 2' en cualquier referencia a la lista usada. Si las dos están en tablas separadas, entonces podría facilitar ordenar la lista maestra resultante, y así empujar las celdas en blanco hacia abajo por debajo de las que tengan un valor restante.
-- Editar una columna de una tabla basada en otra
tell application "Numbers"
activate
tell front document
tell sheet 1
tell table 1
ordenar por columna 2 -- si ya está ordenado, entonces quitar
set hrc1 to contar filas de encabezado
set frc1 to contar filas de pie
-- excluir celdas en blanco en la parte inferior
set mcc to (contar (celdas de la columna 2 cuyo valor no es valor faltante)) - frc1
set mbr to rango ("B2:B" & mcc as texto) -- construir rango de datos maestro
set vmr to valor de celdas de mbr -- lista de valores maestros
end tell
tell table 2 -- también debe estar ordenado
ordenar por columna 2 -- si ya está ordenado, entonces quitar
set hrc2 to contar filas de encabezado
set frc2 to contar filas de pie
-- excluir celdas en blanco en la parte inferior
set ucc to (contar (celdas de la columna 2 cuyo valor no es valor faltante)) - frc2
set ubr to rango ("B2:B" & ucc as texto) -- construir rango de datos usados
set vur to valor de celdas de ubr -- lista de valores usados
end tell
set lenVmr to longitud de vmr
set mc to 0
repetir con uc de 1 a longitud de vur -- recorrer los valores usados
repetir -- recorrer los valores maestros
set mc to mc + 1
if (elemento uc de vur) es igual a (elemento mc de vmr) then -- si los valores coinciden
borrar celda mc de mbr -- borrar celda coincidente en la tabla maestra
salir repetir
end if
if mc es igual a lenVmr then salir repetir
end repeat
if mc es igual a lenVmr then salir repetir
end repeat
-- después de que todas las celdas coincidentes hayan sido borradas
ordenar tabla 1 por columna 2 de tabla 1
end tell -- hoja
end tell -- documento
end tell -- numbers
Actualización: Hice algunos cambios al script y debería ser más rápido con tablas más grandes. En mi antiguo sistema, tomaba alrededor de 110 segundos para procesar una lista maestra de 2000 registros y una lista usada de 500 registros. La mayoría de las computadoras deberían ser más rápidas que la mía, así que tenlo en cuenta.
Sugiero probarlo en una tabla pequeña primero para confirmar que esté haciendo lo que se desea y para tener una idea del rendimiento.
También lo separé en dos tablas, como se indicó en la pregunta.
Ahora lo que hace es, después de ordenar, generar una lista de los valores en cada columna y luego recorrer ambas listas, tomando cada valor usado y encontrando el valor coincidente en la lista maestra. Luego borra la celda correspondiente. Como las listas están ordenadas, debería comenzar cada ciclo donde el anterior terminó, por lo que no debería haber más de un ciclo por cada elemento de la lista maestra. Al trabajar con las listas en lugar de las tablas, significa que solo regresa a la tabla al borrar cada celda coincidente.
Después de borrar todas las celdas coincidentes, volverá a ordenar.
Actualización 2: Agregué un salir repetir al bucle externo también. Aparentemente, solo debería activarse cuando un elemento tardío del lado maestro es una coincidencia, ya que este evento hace que se omita el primer salir. Sin eso, los bucles se repetirán con un elemento que no existe, lo que provocaría el error mencionado.