Google Sheets'te Canlı Döviz Kurları Nasıl Alınır (GOOGLEFINANCE, Apps Script ve bir Döviz Kuru API'si)
Google Sheets'te canlı döviz kurları almak çözülmüş bir problem gibi görünür. =GOOGLEFINANCE("CURRENCY:USDEUR") yazarsınız, bir sayı belirir ve yolunuza devam edersiniz. Kişisel bir seyahat bütçesi için bu gayet iyi çalışır. Ancak elektronik tablo bir faturayı, bir bordro dönemini, bir gelir raporunu ya da bir meslektaşınızın aksiyon alacağı herhangi bir şeyi beslemeye başladığı anda çalışmayı bırakır — bir lisans kısıtlaması, belgelenmiş bir tarih tuhaflığı ve neredeyse hiçbir eğitim içeriğinin bahsetmediği bir Apps Script sınırlaması yüzünden.
Bu rehber üç pratik yöntemin hepsini kapsıyor — yerleşik GOOGLEFINANCE fonksiyonu, bir döviz kuru API'siyle desteklenen bir Apps Script özel fonksiyonu ve zamana dayalı bir tetikleyiciyle yenilenen zamanlanmış bir kur tablosu — gerçek kota rakamları, Google'ın kendi uyarılarının birebir ifadeleri ve çalıştırılabilir kodla birlikte. Aşağıda Google'ın davranışına dair her iddia Google'ın kendi dokümantasyonundan alıntıdır ve belgelenmemiş her iddia açıkça öyle işaretlenmiştir.
Döviz Kurlarını Google Sheets'e Çekmenin Üç Yolu
GOOGLEFINANCE | Apps Script özel fonksiyonu | Zamanlanmış kur tablosu | |
|---|---|---|---|
| Kurulum süresi | Saniyeler | ~10 dakika | ~20 dakika |
| API anahtarı gerekli mi | Hayır | Evet | Evet |
| Yenileme | Otomatik, yeniden hesaplamada | Yeniden hesaplamada | Sizin kontrol ettiğiniz bir tetikleyiciyle |
| Geçmiş kurlar | Evet (uyarılarla birlikte) | Planınıza bağlı | Evet |
| Apps Script / Sheets API içinde çalışır mı | Geçmiş veriler: hayır | Evet | Evet |
| Ticari / profesyonel kullanım | Google'ın koşullarıyla kısıtlı | API sağlayıcınızın koşullarına tabi | API sağlayıcınızın koşullarına tabi |
| En uygun kullanım | Hızlı sorgulamalar, kişisel tablolar | Tek seferlik dönüşüm sütunları | Başkalarının bağımlı olduğu her şey |
Yöntem 1: GOOGLEFINANCE — ve Google'ın Bu Konuda Tam Olarak Ne Dediği
Temel döviz formülü
Her eğitimin öğrettiği kalıp, birleştirilmiş iki ISO 4217 para birimi kodundan oluşan bir CURRENCY: sembolüdür:
=GOOGLEFINANCE("CURRENCY:USDEUR")A2 hücresindeki bir tutarı dönüştürmek için:
=A2 * GOOGLEFINANCE("CURRENCY:USDEUR")Para birimi kodlarını tutan iki hücreden pariteyi oluşturmak için:
=GOOGLEFINANCE("CURRENCY:" & B2 & C2)Rakip hiçbir makalenin yapmadığı dürüst bir uyarı: CURRENCY:XXXYYY sembol biçimi, Google'ın resmî GOOGLEFINANCE dokümantasyonunun hiçbir yerinde geçmez. Belgelenmiş imza GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval]) şeklindedir ve yardım sayfasındaki tek para birimi içeriği bir "currency" özniteliği (bir menkul kıymetin fiyatlandırıldığı para birimi) ile bir grafik örneğidir. CURRENCY: parite söz dizimi çalışıyor ve yıllardır çalışıyor, ama bu belgelenmiş bir taahhüt değil, topluluk tarafından yerleşmiş bir davranış — yani Google bunu bir kullanımdan kaldırma duyurusu yapmadan değiştirmekte serbest. Google ayrıca desteklenen para birimi paritelerinin bir listesini de yayımlamıyor, dolayısıyla size "yaklaşık 50 para birimini" desteklediğini söyleyen her makale tahmin yürütüyor.
Geçmiş kurlar: herkesin yanlış anladığı öznitelik kuralı
Bir tarih geçirin, geçmiş veriyi alırsınız:
=GOOGLEFINANCE("CURRENCY:USDEUR", "close", DATE(2026,1,15))=GOOGLEFINANCE("CURRENCY:USDEUR", "close", DATE(2026,1,1), DATE(2026,1,31), "DAILY")Özniteliğe dikkat edin. Google bunu açıkça belgeliyor: "Herhangi bir tarih parametresi belirtilirse istek geçmiş veri isteği sayılır ve yalnızca geçmiş veri özniteliklerine izin verilir." Geçmiş veri öznitelikleri open, close, high, low, volume ve all — ve "price" bunların arasında değil. "price" yalnızca gerçek zamanlı bir öznitelik olarak belgelenmiştir ("Gerçek zamanlı fiyat kotasyonu, 20 dakikaya kadar gecikmeli").
Şu anda en üst sıradaki Google Sheets döviz eğitimlerine bir bakın: çoğu size GOOGLEFINANCE("CURRENCY:USDEUR", "price", DATE(...)) veriyor. Bu kombinasyon Google'ın kendi dokümantasyonuyla çelişiyor. "close" kullanın.
İçselleştirmeye değer, belgelenmiş iki davranış daha:
- "
start_datebelirtilmiş ancakend_date|num_daysbelirtilmemişse, yalnızca tek bir günün verisi döndürülür." - "Gerçek zamanlı sonuçlar tek bir hücre içinde bir değer olarak döndürülür. Geçmiş veriler, tek bir gün için bile olsa, sütun başlıklarıyla birlikte genişletilmiş bir dizi olarak döndürülür." İşte bu yüzden doğru görünen bir geçmiş veri formülü, düzenli yerleşiminize iki sütun ve bir başlık satırı taşırır ve bu yüzden genellikle etrafına
INDEX(...,2,2)sarmanız gerekir.
UTC öğlen kayması
Bu, tarih eşleştirmeli raporları sessizce bozar. Google'dan birebir:
"Google, GOOGLEFINANCE fonksiyonuna geçirilen tarihleri UTC öğlen saati olarak değerlendirir. Bu saatten önce kapanan borsalarda değerler bir gün kayabilir."
Her satırın ilgili kayıt tarihine ait kuru kullanması gereken bir defteri mutabakata alıyorsanız, bir günlük kayma yuvarlama meselesi değil, gerçek bir mutabakat kırılmasıdır. Tablonuz buna benziyorsa, taşan bir GOOGLEFINANCE dizisine denetim kaydınız olarak güvenmeden önce döviz kurları ve vergi raporlaması rehberimizi okuyun.
Gecikme 20 dakika değil, 3 dakika
Bu konudaki neredeyse her makale size GOOGLEFINANCE döviz kurlarının "20 dakikaya kadar gecikmeli" olduğunu söyler. Bu 20 dakika rakamı, "price" özniteliğine iliştirilmiş genel menkul kıymet kotasyonu feragatnamesinden gelir. Google'ın kendi Google Finance feragatname sayfası varlık türüne göre bir gecikme tablosu yayımlıyor ve Döviz satırı — küresel, Morningstar tarafından sağlanıyor — 3 dakika. Kripto para da 3 dakika.
Yani veri, internetin sandığından daha taze. Google'ın yayımlamadığı şey ise Sheets'in formülü ne sıklıkla yeniden hesapladığı — ki aslında önemsediğiniz sayı da bu: salı gününden beri yeniden hesaplanmamış bir hücrede duran 3 dakikalık bir kur, hâlâ salı gününün kurudur. Belirli bir yeniden hesaplama aralığı söyleyen herkes, Google'ın hiç belgelemediği bir şeyi aktarıyor demektir.
Karşılaştırma için: Finexly kurları her dakika yeniler ve talep üzerine döndürür, dolayısıyla tazelik sizin ne zaman çağırdığınıza bağlıdır, elektronik tablonun ne zaman yeniden hesaplamaya karar verdiğine değil. Genel olarak sağlayıcılar arasında "canlı"nın ne anlama geldiğini anlamak istiyorsanız, döviz kuru API'leri verilerini nereden alıyor yazımıza bakın.
Kimsenin alıntılamadığı kullanım kısıtlaması
Bu, makalenin en önemli tek paragrafı ve en üst sıradaki eğitimlerin hiçbirinde yer almıyor. Google'ın GOOGLEFINANCE yardım sayfasından, birebir:
"Kullanım kısıtlamaları: Veriler, finans sektörü profesyonellerinin kullanımı ya da finans dışı firmalardaki (devlet kurumları dâhil) diğer profesyonellerin kullanımı için değildir. Profesyonel kullanım, üçüncü taraf bir veri sağlayıcıdan ek lisans ücretlerine tabi olabilir."
Ve Google Finance feragatnamesinden:
"Burada bulunan hiçbir veriyi veya bilgiyi önceden yazılı izin almaksızın kopyalamamayı, değiştirmemeyi, yeniden biçimlendirmemeyi, indirmemeyi, saklamamayı, çoğaltmamayı, yeniden işlememeyi, iletmemeyi veya yeniden dağıtmamayı ve böyle bir veriyi veya bilgiyi ticari bir teşebbüste kullanmamayı kabul edersiniz."
"Google, görüntülenen döviz kurlarının doğruluğunu garanti edemez. Döviz kurlarındaki değişikliklerden etkilenebilecek herhangi bir işlem yapmadan önce güncel kurları teyit etmelisiniz."
Bunu, tablonuzun gerçekte ne yaptığıyla birlikte okuyun. Bir müşteri faturasını fiyatlandırmak, muhasebe ekibi için tedarikçi faturalarını dönüştürmek ya da dönüştürülmüş bir gelir rakamını bir müşteriye gönderdiğiniz rapora aktarmak, açıkça "bilgilendirme amaçlı" sayılmaz. Lisanslı bir döviz kuru API'si bu soruyu tümüyle ortadan kaldırır ve finans ekiplerinin GOOGLEFINANCE'ten uzaklaşmasının gerçek nedeni de — ham doğruluk değil — budur.
Ve asıl engel
"Geçmiş veriler Sheets API veya Apps Script üzerinden indirilemez ya da erişilemez. Bunu denerseniz, elektronik tablonuzun ilgili hücrelerinde değerlerin yerine bir #N/A hatası görürsünüz."
Bir şeyi otomatikleştirmek istediğiniz an — gecelik bir dışa aktarım, bir Sheets API çekimi, kurların anlık görüntüsünü alan bir betik — geçmiş GOOGLEFINANCE verileri tasarım gereği masadan kalkar. İnsanları 2. yönteme iten duvar tam olarak budur.
Yöntem 2: Bir Döviz Kuru API'siyle Desteklenen Apps Script Özel Fonksiyonu
Özel fonksiyon, Apps Script içinde yazdığınız ve bir hücreden tıpkı yerleşik bir fonksiyon gibi çağırdığınız bir JavaScript fonksiyonudur. Google bunun web istekleriyle çalıştığını açıkça doğruluyor: özel fonksiyonlar "yalnızca kişisel verilere erişimi olmayan servisleri çağırabilir" ve URL Fetch izin verilenler listesinde.
Adım 1: Bir API anahtarı alın ve düzgün saklayın
Finexly kontrol panelinden ücretsiz bir anahtar alın — ayda 1.000 istek, kredi kartı gerekmez. Sonra, ki bu önemli: anahtarı koda gömmeyin. En çok bağlantı verilen iki Google Sheets döviz eğitimi, API anahtarını doğrudan betiğe yapıştırıyor — hem de elektronik tabloyla birlikte paylaştığınız herkese giden bir dosyaya.
Apps Script düzenleyicisinde (Uzantılar → Apps Script), anahtarı Script Properties içinde saklamak için bunu düzenleyiciden bir kez çalıştırın:
function storeApiKey() {
PropertiesService.getScriptProperties()
.setProperty('FINEXLY_API_KEY', 'YOUR_API_KEY');
}Sonrasında düz metin değeri dosyadan silin. Belgelenmiş sınırlara dikkat: bir özellik değeri 9 KB ile, bir özellik deposu ise toplam 500 KB ile sınırlıdır — bir anahtar için fazlasıyla yeterli, ama veri önbelleklemek için uygun bir yer değil.
Adım 2: Tek parite için bir özel fonksiyon
/**
* Returns the live exchange rate for a currency pair.
*
* @param {string} from Base currency code, e.g. "USD".
* @param {string} to Quote currency code, e.g. "EUR".
* @return The exchange rate.
* @customfunction
*/
function FX_RATE(from, to) {
if (!from || !to) throw new Error('Both currency codes are required.');
var pair = String(from).toUpperCase() + '_' + String(to).toUpperCase();
var cache = CacheService.getScriptCache();
var hit = cache.get(pair);
if (hit !== null) return Number(hit);
var key = PropertiesService.getScriptProperties().getProperty('FINEXLY_API_KEY');
var res = UrlFetchApp.fetch(
'https://api.finexly.com/v1/rate?from=' + encodeURIComponent(from) +
'&to=' + encodeURIComponent(to),
{
headers: { Authorization: 'Bearer ' + key },
muteHttpExceptions: true
}
);
var code = res.getResponseCode();
var body = JSON.parse(res.getContentText());
if (code !== 200) {
throw new Error(body.error ? body.error.code + ': ' + body.error.message : 'HTTP ' + code);
}
cache.put(pair, String(body.rate), 300); // 5 minutes
return body.rate;
}Bir hücrede kullanımı:
=FX_RATE("USD","EUR")
=A2 * FX_RATE($B$1, $C$1)/v1/rate uç noktası {"pair": "USD_EUR", "rate": 0.9215} döndürür. Tüm parametre referansı Finexly API dokümantasyonunda yer alıyor.
Adım 3: Aralığı toplu işleyin — her rakibin atladığı kısım
İşte hata senaryosu. Google bunu doğrudan belgeliyor:
"Bir özel fonksiyon elektronik tabloda her kullanıldığında, Sheets Apps Script sunucusuna ayrı bir çağrı yapar. Elektronik tablonuz düzinelerce (ya da yüzlerce, ya da binlerce!) özel fonksiyon çağrısı içeriyorsa, bu süreç yavaş olabilir."
FX_RATE'i 400 satır aşağı sürükleyin ve 400 gidiş-dönüş yapmış olun. Özel fonksiyonlardaki çalıştırma başına 30 saniyelik sınırla, API kotanıza ulaşmadan çok önce Exceeded maximum execution time (line 0). notuyla #ERROR! alacaksınız.
Google'ın önerdiği çözüm dizi toplu işleme: bir aralık kabul edin, bir dizi döndürün. Finexly'nin /v1/convert uç noktası virgülle ayrılmış pariteler alır, böylece tüm sütun tek bir HTTP isteğine dönüşür:
/**
* Converts a column of amounts from one currency to another in a single API call.
*
* @param {A2:A400} amounts Range of amounts.
* @param {string} from Base currency code.
* @param {string} to Quote currency code.
* @return {Array} Converted amounts.
* @customfunction
*/
function FX_CONVERT_RANGE(amounts, from, to) {
var rate = FX_RATE(from, to); // one fetch, then cached
var rows = Array.isArray(amounts) ? amounts : [[amounts]];
return rows.map(function (row) {
return row.map(function (v) {
return (v === '' || v === null) ? '' : Number(v) * rate;
});
});
}=FX_CONVERT_RANGE(A2:A400, "USD", "EUR")Tek formül, tek ağ çağrısı, 399 daha az gidiş-dönüş. Aynı anda birkaç pariteye ihtiyacınız varsa /v1/convert?q=USD_EUR,USD_GBP,USD_JPY çağırın ve body["USD_EUR"].rate değerini okuyun.
Google'ın özel fonksiyonlarda önbellekleme hakkında gerçekte söyledikleri
Yukarıda CacheService kullanıldı, ama nedeni konusunda net olalım. Google'ın özel fonksiyonlar rehberi Cache servisini "Çalışır, ancak özel fonksiyonlarda pek kullanışlı değildir." diye derecelendiriyor. Önbellekleme avantajı yalnızca ayrı çalıştırmalar arasında gerçektir — aynı paritenin tekrar tekrar yeniden hesaplanması gibi — tek bir taşan dizi içinde değil. Belgelenmiş optimizasyon dizi toplu işlemedir; önbellekleme yararlı bir ikincil önlemdir.
Belgelenmiş önbellek sınırları: anahtarlar en fazla 250 karakter, değerler en fazla 100 KB, üst sınır 1.000 öğe ve geçerlilik süresi 1 saniye ile 21.600 saniye (6 saat) arasında, varsayılan 600 saniye. Önbellek çağrıları için yayımlanmış bir günlük kota yok.
Belgelenmiş bir tuzak daha, çünkü bu geçici çözüm çok yaygın dolaşıyor: yenilemeyi zorlamak için argüman olarak NOW() eklemek fonksiyonu bozar. Google: "Özel fonksiyon argümanları deterministik olmalıdır … Bir özel fonksiyon bu değişken yerleşik fonksiyonlardan birine dayalı bir değer döndürmeye çalışırsa, süresiz olarak Loading... görüntüler."
Yöntem 3: Zamanlanmış Bir Kur Tablosu (Üretim Kalıbı)
Özel fonksiyonlar Sheets canı ne zaman isterse o zaman yeniden hesaplanır ve bu, başkasının okuduğu bir tablo için tam olarak istenmeyen özelliktir. Sağlam kalıp, hücrelerden veri çekmeyi tamamen bırakmaktır: kurları bir zamanlamayla bir tabloya yazın, sonra düz formüllerle sorgulayın.
Yenileme betiği
var PAIRS = ['USD_EUR', 'USD_GBP', 'USD_JPY', 'USD_CAD', 'USD_AUD', 'USD_CHF'];
function refreshRates() {
var key = PropertiesService.getScriptProperties().getProperty('FINEXLY_API_KEY');
var res = UrlFetchApp.fetch(
'https://api.finexly.com/v1/convert?q=' + PAIRS.join(','),
{ headers: { Authorization: 'Bearer ' + key }, muteHttpExceptions: true }
);
if (res.getResponseCode() !== 200) {
console.error('Finexly refresh failed: ' + res.getContentText());
return; // keep yesterday's rates rather than blanking the sheet
}
var data = JSON.parse(res.getContentText());
var stamp = new Date();
var rows = PAIRS.map(function (p) {
return [p, p.split('_')[0], p.split('_')[1], data[p].rate, stamp];
});
var sheet = SpreadsheetApp.getActive().getSheetByName('Rates') ||
SpreadsheetApp.getActive().insertSheet('Rates');
sheet.clear();
sheet.getRange(1, 1, 1, 5)
.setValues([['Pair', 'From', 'To', 'Rate', 'Updated (UTC)']])
.setFontWeight('bold');
sheet.getRange(2, 1, rows.length, 5).setValues(rows);
}Bunu başka yerlerde bulacağınız betiklerden ayıran iki ayrıntı. Birincisi, hücre başına bir tane değil, tek bir setValues() çağrısı — toplu aralık yazmaları çarpıcı biçimde daha hızlıdır. İkincisi, başarısız bir istek tabloyu temizlemek yerine erkenden geri döner, böylece sağlayıcı kaynaklı bir aksaklık, aşağı akıştaki her toplamı sessizce sıfıra çeviren boş hücrelerle dolu bir tablo yerine eski ama etiketli kurlar bırakır.
Tetikleyiciyi oluşturma
function installTrigger() {
ScriptApp.getProjectTriggers().forEach(function (t) {
if (t.getHandlerFunction() === 'refreshRates') ScriptApp.deleteTrigger(t);
});
ScriptApp.newTrigger('refreshRates').timeBased().everyHours(1).create();
}Google, zamana dayalı tetikleyicilerin "her dakika kadar sık ya da ayda bir kez kadar seyrek" çalışabildiğini ve tetikleme zamanının bilinçli olarak bulanıklaştırıldığını belgeliyor: "tekrarlayan bir 09:00 tetikleyicisi oluşturursanız, Apps Script 09:00 ile 10:00 arasında bir zaman seçer." everyMinutes(n) kullanırsanız, n değeri 1, 5, 10, 15 veya 30 olmalıdır — başka hiçbir değer kabul edilmez.
Kurları okuma
=XLOOKUP("USD_EUR", Rates!A:A, Rates!D:D)
=A2 * XLOOKUP($B$1 & "_" & $C$1, Rates!A:A, Rates!D:D)Çalışma kitabındaki her dönüşüm artık yerel hücrelerden anında çözülür, tek bir tutarlı kuru kullanır ve görünür bir zaman damgası taşır. Denetçilerin sorduğu şey de tam olarak bu son maddedir.
Gerçekten Karşılaşacağınız Kotalar ve Sınırlar
Bunlar Google'ın yayımladığı Apps Script rakamları — etraflarında tasarım yapmadan önce bilmeye değer:
| Sınır | Bireysel hesap (gmail.com) | Google Workspace hesabı |
|---|---|---|
| URL Fetch çağrıları | 20.000 / gün | 100.000 / gün |
| Tetikleyicilerin toplam çalışma süresi | 90 dk / gün | 6 sa / gün |
| Properties okuma/yazma | 50.000 / gün | 500.000 / gün |
| Özel fonksiyon çalışma süresi | 30 sn / çalıştırma | 30 sn / çalıştırma |
| Betik çalışma süresi | 6 dk / çalıştırma | 6 dk / çalıştırma |
| Kullanıcı başına betik başına tetikleyici | 20 | 20 |
| URL Fetch URL uzunluğu | 2 KB / çağrı | 2 KB / çağrı |
?q= toplu isteğine kaç pariteyi sığdırabileceğinizin pratik tavanıdır — rahatlıkla yüzün üzerinde, ama sınırsız değil.API tarafında, Finexly ücretsiz plan dakikada 10 istek hızıyla ayda 1.000 isteğe izin verir. Saatlik bir tetikleyici ayda kabaca 730 istek kullanır — ücretsiz katmanın içinde, üstelik bolca payla. Buna birkaç tek seferlik özel fonksiyon çağrısı ekleyince Starter planını isteyebilirsiniz; güncel katmanlar fiyatlandırma sayfasında. Geçmiş kurların ücretli bir plan gerektirdiğini unutmayın; yani geriye dönük kurlara ihtiyacınız varsa ve bütçeniz sıfırsa, kişisel ve profesyonel olmayan kullanım için GOOGLEFINANCE dürüst cevap olmayı sürdürüyor.
Her yanıt X-RateLimit-Limit, X-RateLimit-Used ve X-RateLimit-Units başlıklarını taşır, böylece kullanımı res.getAllHeaders() üzerinden loglayıp yaklaşan bir sınırı görebilirsiniz.
Sık Karşılaşılan Hatalar ve Çözümleri
| Gördüğünüz şey | Nedeni | Çözüm |
|---|---|---|
GOOGLEFINANCE'ten #N/A | Desteklenmeyen ya da yanlış yazılmış parite veya Apps Script / Sheets API üzerinden istenen geçmiş veri | Her iki ISO kodunu kontrol edin; otomasyon için bunun yerine bir API kullanın |
"Exceeded maximum execution time (line 0)." notuyla #ERROR! | Çok fazla tekil özel fonksiyon çağrısı | Toplu işleyen FX_CONVERT_RANGE kalıbına geçin |
Sonsuza kadar Loading... | Özel fonksiyon argümanı olarak geçirilmiş NOW(), RAND() ya da başka bir değişken fonksiyon | Kaldırın — Google bunu desteklenmiyor olarak belgeliyor |
401 UNAUTHORIZED / invalid token | Eksik veya yanlış API anahtarı | Script Property'nin ayarlı olduğunu ve başlığın Bearer <key> şeklinde olduğunu doğrulayın |
429 RATE_LIMIT_EXCEEDED | Dakikalık veya aylık sınıra ulaşıldı | Önbellek TTL'sini uzatın, çağrı başına daha çok parite toplayın ya da planı yükseltin |
You do not have permission to call X service. | Bir özel fonksiyon, yetkilendirme gerektiren bir servisi çağırdı | O mantığı tetikleyiciyle çalışan bir fonksiyona taşıyın |
| Geçmiş veri formülü fazladan sütun taşırıyor | Belgelenmiş davranış — geçmiş sonuçlar başlıklarla birlikte dizi olarak döner | INDEX(..., 2, 2) içine sarın |
Hangi Yöntemi Kullanmalısınız?
- Kişisel tablo, hızlı sorgulama, ortada para yok:
GOOGLEFINANCE. Ücretsiz, anında ve lisans kısıtlaması sizi ısırmaz. - Çalışan bir elektronik tabloda bir dönüşüm sütunu: toplu işleyen Apps Script özel fonksiyonu. Öngörülebilir veri kaynağı, lisans belirsizliği yok, aralık başına tek çağrı.
- Bir meslektaşın, müşterinin ya da denetçinin okuduğu her şey: zamanlanmış kur tablosu. Yenileme döngüsü başına tek kur, görünür bir zaman damgası ve Sheets'in ne zaman yeniden hesaplayacağına bağımlılık yok.
Bunun yerine Excel'de mi çalışıyorsunuz? Eşdeğer yöntemler — Power Query, WEBSERVICE ve Para Birimleri veri türü — Excel'de canlı döviz kurları nasıl alınır yazımızda ele alınıyor. Hâlâ sağlayıcıları değerlendiriyorsanız, döviz kuru API karşılaştırmamız farkları ortaya koyuyor ve herhangi bir kuru Finexly döviz çevirici ile kontrol edebilirsiniz.
Sıkça Sorulan Sorular
Google Sheets'te canlı döviz kurlarını ücretsiz nasıl alırım?
=GOOGLEFINANCE("CURRENCY:USDEUR") hiçbir maliyeti yoktur ve kurulum gerektirmez. Google'ın belirttiği kullanım kısıtlamasını — verilerin "finans sektörü profesyonellerinin kullanımı ya da finans dışı firmalardaki diğer profesyonellerin kullanımı için olmadığını" — ve geçmiş değerlerin Apps Script veya Sheets API üzerinden okunamayacağını unutmayın. Sıfır maliyetli lisanslı bir alternatif için, ayda 1.000 istekten oluşan ücretsiz bir API katmanı saatlik bir yenilemeyi (yaklaşık 730 çağrı) rahatlıkla karşılar.
GOOGLEFINANCE döviz kurlarını ne sıklıkla günceller?
Google'ın Google Finance feragatname tablosu, Morningstar kaynaklı döviz verileri için 3 dakikalık bir gecikme listeliyor — internette sıkça tekrarlanan 20 dakika değil; o rakam "price" özniteliğine iliştirilmiş genel menkul kıymet kotasyonu değeridir. Ayrıca Google, Sheets'in formülü ne sıklıkla yeniden hesapladığını hiç yayımlamadı, dolayısıyla hücrenizdeki sayının yaşı güvenebileceğiniz bir şey değil.
GOOGLEFINANCE'i Apps Script içinde kullanabilir miyim?
Geçmiş veriler için hayır. Google şunu belirtiyor: "Geçmiş veriler Sheets API veya Apps Script üzerinden indirilemez ya da erişilemez. Bunu denerseniz bir #N/A hatası görürsünüz." Ayrıca hiçbir Apps Script servisinde GOOGLEFINANCE metodu yoktur — bir betik yalnızca bir hücrenin zaten hesapladığı bir değeri okuyabilir. Kurlara kod içinde ihtiyacınız varsa, UrlFetchApp ile bir döviz kuru API'si çağırın.
Google Sheets döviz formülüm neden yavaş ya da neden #ERROR! gösteriyor?
Her özel fonksiyon çağrısı, Apps Script sunucusuna ayrı bir gidiş-dönüştür ve her çalıştırma 30 saniyeyle sınırlıdır. Yüzlerce tekil çağrı zaman aşımına uğrar. Bir aralık kabul edip bir dizi döndürün ki tek çağrı tüm sütunu kapsasın, kuru önbelleğe alın ve zamanlanmış her şey için veri çekme işini bir hücre yerine zamana dayalı bir tetikleyiciye taşıyın.
Google Sheets'te geçmiş döviz kurlarını alabilir miyim?
Evet, iki yolla. GOOGLEFINANCE("CURRENCY:USDEUR", "close", DATE(2026,1,1), DATE(2026,1,31), "DAILY") günlük bir seri döndürür — "close" kullanın, çünkü "price" geçerli bir geçmiş veri özniteliği değildir ve Google'ın tarihleri UTC öğlen olarak değerlendirdiğini, bunun da bir değeri bir gün kaydırabileceğini unutmayın. Ya da ücretli bir planda bir API'den geçmiş kurları çekip bir tetikleyiciyle bir tabloya yazın; otomasyondan sağ çıkan tek yol budur.
Elektronik tablonuza lisanslı, dakikalık tazelikte döviz kurları koymaya hazır mısınız? Ücretsiz Finexly API anahtarınızı alın — kredi kartı gerekmez. 170'ten fazla para birimi üzerinde ayda 1.000 istekle başlayın ve tablolarınız bunu aştığında planı yükseltin.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →