Estoy escribiendo un script para mi Hoja de Google e intenté hacer algo como esto:
function test() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Cabins"); const range = sheet.getRange(4, 27); const value = range.getValue(); Logger.log(value); } lo que me da un resultado de "#ERROR!" a pesar de que la hoja de cálculo muestra un valor de "0" en esa celda (R4C27). 
Desconcertado, comencé a jugar y copié exactamente la misma fórmula en una celda diferente (R1C13) y luego hice esto:
function test() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Cabins"); const range1 = sheet.getRange(4, 27); const range2 = sheet.getRange(1, 13); const value1 = range1.getValue(); const value2 = range2.getValue(); Logger.log(`value1: ${value1}`); Logger.log(`value2: ${value2}`); } value1 todavía da "#ERROR!" pero value2 da la respuesta correcta de "0". 
Aquí están las dos celdas y su fórmula. Primero está el problemático R4C27: 
¿Qué podría causar que el primero devuelva un valor de rango de "#ERROR!"?
ACTUALIZACIÓN 1: Creo que me estoy acercando a descubrir la causa, pero no la solución. Entonces, mi función personalizada COSTO calculará un valor, pero las llamadas posteriores a COSTO más bajo en la hoja de cálculo en realidad pueden referirse a una celda que a su vez necesita llamar COSTO, por lo que es una función recursiva. En esta imagen, la celda con error en realidad se refiere a la celda resaltada que también usa COSTO.
Dado que todas las fórmulas se ejecutan simultáneamente cuando se carga la hoja, las que son recursivas apuntarán a celdas cuyas fórmulas aún no han terminado.
No estoy seguro de cuál es la solución, pero me inclino por convertir la fórmula personalizada basada en celdas en un elemento de menú que puedo activar a pedido, que llamará a todas las fórmulas en el orden correcto y garantizará que las llamadas posteriores tengan acceso a los datos