Perbedaan antara "Make a copy" (seluruh file) dan "Copy to" (tab individual) inilah yang paling sering menjadi penyebab template model keuangan rusak di tim FP&A.
Apa yang Ikut Tersalin, Apa yang Tidak
| Yang Anda salin | Named ranges | Formula yang mereferensikan named ranges | Data validation yang menggunakan named ranges |
|---|---|---|---|
| File > Make a copy (seluruh spreadsheet) | Tersalin | Tetap utuh | Tetap utuh |
| Tab > Copy to > New spreadsheet | Tidak tersalin | Ditulis ulang ke notasi A1 | Kehilangan sumber |
| Tab > Copy to > Existing spreadsheet | Tidak tersalin | Ditulis ulang ke notasi A1 | Kehilangan sumber |
Dokumentasi resmi Google Sheets menyatakan pada halaman "Named ranges" di support.google.com: "Named ranges are scoped to the spreadsheet, not to individual sheets." Artinya, begitu satu tab ditarik keluar dari file, setiap named range yang direferensikannya akan ditulis ulang atau menjadi yatim piatu.
Referensi formula dikonversi secara diam-diam. Jika named range menunjuk ke sel di sheet yang sama dengan yang disalin, Sheets akan menulis ulangnya ke notasi A1. =DiscountRate berubah menjadi =Assumptions!$B$4. Formula Anda tetap berjalan, tetapi lapisan dokumentasi yang membuat formula mudah dibaca sudah hilang. Siapa pun yang mengaudit formula tersebut hanya akan melihat alamat sel mentah, bukan maksud di baliknya.
Named range lintas tab langsung rusak. Jika named range menunjuk ke sheet yang tidak ikut disalin, Anda akan mendapatkan #REF! atau #NAME?. Dalam model 8 tab dengan asumsi WACC, TaxRate, TerminalGrowthRate, dan FX yang semuanya berada di tab Assumptions terpusat, satu kali "Copy to" bisa menghasilkan cascade error di seluruh model.
Data validation berhenti bekerja. Dropdown yang bersumber dari named range kehilangan referensinya. Sel mempertahankan nilai terakhir yang dimasukkan, tetapi entri baru tidak akan divalidasi.
Google Sheets mendukung hingga 1.000 named ranges per spreadsheet, sesuai batas kuota yang tercantum di halaman Sheets API v4 Quotas pada developers.google.com. Sebagian besar model FP&A menggunakan sekitar 8 hingga 30, cukup sedikit sehingga terasa layak dibangun ulang secara manual, tetapi cukup banyak untuk terasa menyakitkan ketika salinan template menghapus semuanya sekaligus.
Tiga Skenario yang Paling Sering Dialami Tim FP&A
Template laporan dewan triwulanan. Anda telah membangun laporan Q4 yang rapi, dengan pendapatan Rp 65 miliar, margin kotor 38,5%, EBITDA Rp 9,6 miliar, lengkap dengan named ranges untuk ReportingPeriod, FXRate, dan BudgetRevenue. Anda menyalin tab P&L ke file Q1 yang baru. Formula ditulis ulang ke alamat keras, tetapi karena tab Assumptions untuk Q1 belum ada, sekitar separuh formula menghasilkan #REF!. Anda menghabiskan 45 menit melacak referensi yang seharusnya sudah terdokumentasi.
Konsolidasi per entitas. Model LBO satu entitas Anda memiliki 8 tab. Anda menduplikasi file tersebut 4 kali untuk struktur 4 entitas, dan karena menggunakan "Make a copy," semua named ranges aman. Kemudian Anda menormalisasi tab Revenue entitas ketiga dengan menyalin versi milik entitas pertama ke dalamnya. Named ranges rusak di setiap pertukaran tab antar file.
Memasukkan tab ke model yang sudah ada. Anda telah membangun analisis waterfall di file tersendiri dan ingin menyambungkannya ke paket DCF sindikasi bank Anda. Anda menyalin tab tersebut. Semua referensi named range ditulis ulang ke alamat file sumber, yang kini tidak menunjuk ke mana pun di file tujuan.
Tiga Cara Mengatasinya
Opsi 1: Gunakan Referensi Tab Eksplisit untuk Portabilitas
Untuk setiap asumsi yang ditarik oleh beberapa sheet, lewati named ranges dan gunakan referensi tab langsung:
// Mudah rusak saat Copy To:
=NPV(WACC, 'Cash Flow'!C5:C14)
// Portabel:
=NPV(Assumptions!$B$4, 'Cash Flow'!C5:C14)
Kurang mudah dibaca, tetapi bertahan dari operasi copy apapun selama tab Assumptions ikut terbawa. Untuk model yang akan dijadikan template dan disalin berulang kali, seperti laporan dewan, model klien, atau konsolidasi entitas, pendekatan ini membutuhkan lebih sedikit perawatan jangka panjang.
Opsi 2: Bangun Ulang Named Ranges dengan Apps Script (Dijalankan Sekali)
Jika Anda menggunakan "Copy to" sebagai bagian dari alur kerja rutin, Apps Script berikut dijalankan sekali di file tujuan untuk membangun ulang named ranges dari tabel definisi. Tempel ke Tools > Apps Script di file tujuan, perbarui objek definitions agar sesuai dengan model Anda, lalu jalankan satu kali.
// Jalankan sekali setelah menyalin sheet ke file baru.
// Membangun ulang named ranges dari peta definisi yang sudah dikodekan.
function rebuildNamedRanges() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Peta: named range -> NamaSheet!Sel
var definitions = {
'WACC': 'Assumptions!B4', // 9,2% biaya modal blended
'TerminalGrowthRate': 'Assumptions!B5', // 2,5% pertumbuhan terminal
'TaxRate': 'Assumptions!B6', // 27% tarif efektif
'ReportingPeriod': 'Assumptions!B2', // "FY2026"
'FXRate_USD_EUR': 'Assumptions!B9' // 0,923 per Juni 2026
};
var rebuilt = 0;
for (var name in definitions) {
var parts = definitions[name].split('!');
var sheet = ss.getSheetByName(parts[0]);
if (sheet) {
ss.setNamedRange(name, sheet.getRange(parts[1]));
rebuilt++;
}
}
Logger.log('Rebuilt ' + rebuilt + ' named ranges.');
}
Eksekusi memakan waktu sekitar 3 detik. Tempel fungsi ini sebagai komentar di tab Assumptions template Anda agar siapa pun yang mewarisi model bisa menemukannya dengan mudah.
Opsi 3: Salin Seluruh File, Hapus yang Tidak Diperlukan
Jika Anda butuh named ranges tetap utuh, gunakan "File > Make a copy" pada seluruh spreadsheet, bukan menarik tab satu per satu. Kemudian hapus sheet yang tidak diperlukan. Pendekatannya kurang presisi, tetapi named ranges, data validation, dan referensi lintas tab semuanya selamat. Untuk template triwulanan di mana struktur model stabil dan Anda hanya perlu menggeser periode, cara ini biasanya lebih cepat daripada mengelola salinan di tingkat tab.
Per Juni 2026, belum ada opsi UI bawaan di Google Sheets untuk menyalin named ranges bersamaan dengan operasi "Copy to". Keterbatasan ini sudah dikenal selama beberapa tahun dan tidak ditangani dalam dokumentasi Sheets API v4 yang tersedia saat ini di developers.google.com.
Argumen untuk Dokumentasi Named Ranges
Jika Anda membangun model yang akan disalin, dan hampir semua model FP&A pada akhirnya akan disalin, sertakan tab NamedRanges. Tabel tiga kolom yang memetakan RangeName → NamaSheet!Sel → Deskripsi hanya butuh sekitar 20 menit untuk dibangun.
RangeName | Sel | Deskripsi
WACC | Assumptions!B4 | WACC blended untuk discount rate DCF
TerminalGrowthRate | Assumptions!B5 | Tingkat pertumbuhan perpetuitas pasca proyeksi
TaxRate | Assumptions!B6 | Tarif pajak korporat efektif
FXRate_USD_EUR | Assumptions!B9 | Kurs penutupan bulanan, EUR/USD
ReportingPeriod | Assumptions!B2 | Label tahun fiskal untuk header
Ketika operasi "Copy to" menghapus named ranges Anda, tabel ini menjadi panduan untuk membangunnya kembali. Dan jika Anda menghubungkan objek definitions pada Apps Script untuk membaca dari tab ini alih-alih mengkodekannya secara langsung, Anda mendapatkan template yang mendokumentasikan dirinya sendiri sekaligus bisa membangun ulang dirinya sendiri.
Formula lintas tab seperti =SUMIFS('P&L'!C:C,'P&L'!B:B,">="&Assumptions!$B$3) tetap berfungsi tanpa named ranges, tetapi maksud di baliknya tersembunyi di balik alamat sel. Named ranges membuat review model menjadi lebih cepat, dan review yang cepat berarti lebih sedikit bolak-balik dengan tim sindikasi sebelum kesepakatan ditutup.