İş yerinde e-tablolar
GAS (Google Apps Script) nedir?
Google E-Tablolar otomasyonuna giriş
Her hafta bir tabloyu aynı biçime getirmek. Yapıştırılan verilerden boş satırları silmek. Bir koşulu karşılayan satırları işaretlemek. E-tablolar adımları belli işlerle doludur.
Bu tür işleri otomatik yapan şey GAS'tır (Google Apps Script). Bu yazıda GAS'ın neler yapabildiğini, nereden başlanacağını ve birçok kişinin ilk seferde takıldığı “yetkilendirme” ekranlarının nasıl geçileceğini anlatıyoruz.
GAS nedir?
GAS, Google'ın program çalıştırma yoludur. JavaScript ile aynı sözdizimini kullanır ve Google E-Tablolar'ın yanı sıra Gmail, Google Takvim, Google Drive ve Google Formlar'ı da yönetir.
Yalnızca bir Google hesabı gerekir. Ücretsizdir ve hiçbir şey kurmanız gerekmez: tarayıcıda bir e-tablo açın ve yazmaya başlayın. Program kendi bilgisayarınızda değil, Google'ın sunucularında çalışır.
Kaydedilen makrolar ve GAS
Google E-Tablolar'da yaptıklarınızı kaydedip istediğiniz kadar tekrarlamanızı sağlayan “makrolar” vardır. “Uzantılar” → “Makrolar” → “Makro kaydet” ile kaydı başlatın, hücreleri seçip yazın; işlemleriniz GAS kodu olarak kaydedilir.
/** @OnlyCurrentDoc */
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B2').activate();
spreadsheet.getCurrentCell().setValue('test');
spreadsheet.getActiveRangeList().setFontWeight('bold');
};Yani bir makronun içi GAS'tır. Makroya “Kalın testi” gibi bir ad verseniz bile koddaki fonksiyonun adı myFunction olur. Menüdeki ad ile fonksiyon adı ayrı tutulur.
Kayıt sırasında alttaki çubuktan “Mutlak referansları kullan” veya “Göreli referansları kullan” seçilir. Mutlak referanslar B2 gibi hücre adresi olarak kaydedilir; makro hangi hücre seçili olursa olsun hep aynı yere yazar. Göreli referanslar “geçerli hücrenin bir satır altı” gibi kaydedilir ve seçili hücreden başlar.
Yalnızca kayıtla uzunluğu değişen tablolar ya da koşula bağlı adımlar yapılamaz. Oradan sonrası, kaydedilen kodu okuyup üzerine eklemektir.
GAS ile neler yapılabilir
- Yapıştırılan verilerdeki boş satırları silmek ve başlıkları düzenlemek
- Tutarlara veya tarihlere bakıp bir sütuna “Büyük” ya da “Gecikmiş” yazmak
- E-tabloya kendi menünüzü eklemek ve işleri bir düğmeyle çalıştırır gibi çalıştırmak
- Hücrelerde kullanılacak kendi fonksiyonlarınızı yazmak (özel fonksiyonlar)
- Bir tabloya göre Gmail ile e-posta göndermek
- Bir işi sabit bir saatte çalıştırmak, örneğin her sabah 8'de (tetikleyiciler)
- Google Formlar yanıtlarını gelir gelmez başka bir sayfaya aktarmak
Elle yapıldığında bunların her biri birkaç dakikadan onlarca dakikaya kadar sürer. Bir kez yazınca sonrasında bir menüye tıklamak yeter, ya da kendi kendine çalışır.
GAS'a nasıl başlanır
- E-tabloyu açıp “Uzantılar” → “Apps Script”i seçin
- Düzenleyici yeni bir sekmede açılır: solda “Kod.gs”, sağda
function myFunction() { }yazar - Kodu
{ }içine yazıp kaydedin (Ctrl+S, Mac'te ⌘+S) - Üstteki “▷ Çalıştır”a tıklayın. Sonuç alttaki “Yürütme günlüğü”nde görünür
function myFunction() {
const sheet = SpreadsheetApp.getActiveSheet();
const value = sheet.getRange('A1').getValue();
Logger.log(value);
sheet.getRange('B1').setValue('Kontrol edildi');
}Logger.log bir değeri yürütme günlüğüne yazar. Sayılar ondalık noktalı görünür, örneğin 120.0 (console.log 120 gösterir). Bir şey beklendiği gibi çalışmazsa önce günlükteki değerlere bakın.
İlk çalıştırmadaki yetkilendirme ekranları
Yazdığınız kodu ilk kez çalıştırdığınızda, betiğin e-tablonuzu okuyup düzenlemesine izin verip vermediğinizi soran bir ekran çıkar. Çoğu kişi burada takılır, o yüzden adım adım bakalım.
- “Yetkilendirme gerekli” → İzinleri incele / Tamam
- Bir hesap seçin
- “Google bu uygulamayı doğrulamadı” → sol alttaki “Gelişmiş”
- “(proje adı) sayfasına git (güvenli değil)”
- Neye izin verdiğinizi kontrol edip “İzin ver”e tıklayın (seçilecek öğeler varsa seçip “Devam”a tıklayın)
“Google bu uygulamayı doğrulamadı”, Google'ın incelemediği betiklerde çıkan bir uyarıdır. Kendi yazdığınız betikler ve kaydettiğiniz makrolar incelenmez, bu yüzden bu ekran her zaman çıkar. Kendiniz yaptıysanız devam etmekte sakınca yok.
Buna karşılık, tanımadığınız birinden gelen bir e-tabloda bu ekran çıkarsa “Güvenli sayfaya dön”ü seçin. İzin verildikten sonra betik, hesabınızla e-tablolarınızda ve e-postanızda işlem yapabilir.
Kodun başına /** @OnlyCurrentDoc */ yazarsanız betik yalnızca “bu e-tabloya” dokunabilir ve istenen izinler daralır. Kaydedilen makrolarda bu baştan vardır.
Aynı adımları alıştırmanın 1. görevinde deneyebilirsiniz.
Sık kullanılan kodlar
E-tabloyla çalışırken en sık kullanılanlar şunlardır. Satır ve sütun numaraları 1'den, getValues ile okunan dizinin dizinleri 0'dan başlar.
| Kod | Anlamı |
|---|---|
| const sheet = SpreadsheetApp.getActiveSheet(); | Şu an açık olan sayfa |
| sheet.getRange('A1').getValue() | A1'in değerini oku |
| sheet.getRange('A1').setValue('Tamamlandı') | A1'e yaz |
| sheet.getRange(2, 3) | 2. satır, 3. sütun (C2). Sütunlar sayıyla verilebilir |
| sheet.getRange('A2:C10').getValues() | Bir aralığı tek seferde oku (iki boyutlu dizi) |
| sheet.getRange(2, 1, 9, 3).setValues(values) | Tek seferde yaz (satır ve sütunları diziyle eşleştir) |
| sheet.getLastRow() | Değer içeren son satırın numarası |
| sheet.appendRow(['10/31', 'Sato', 5000]) | Son satırın altına bir satır ekle |
| sheet.deleteRow(5) | 5. satırı sil (alttaki satırlar yukarı kayar) |
| sheet.getRange('A1:D1').setFontWeight('bold') | Kalın yap |
| sheet.getRange('A1:D1').setBackground('#fff2cc') | Arka plan rengini ayarla |
| Logger.log(value) | Yürütme günlüğüne yaz (değerleri kontrol etmek için) |
function judgeTargets() {
const sheet = SpreadsheetApp.getActiveSheet();
for (let row = 2; row <= sheet.getLastRow(); row++) {
const sales = sheet.getRange(row, 2).getValue();
const target = sheet.getRange(row, 3).getValue();
if (sales >= target) {
sheet.getRange(row, 4).setValue('Ulaşıldı');
} else {
sheet.getRange(row, 4).setValue('Ulaşılmadı');
}
}
}function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Ay sonu işlemleri')
.addItem('Büyük satışları işaretle', 'markLarge')
.addToUi();
}onOpen adlı bir fonksiyon, e-tablo açıldığında otomatik çalışır. Düzenleyicideki “▷ Çalıştır” ile çalıştırırsanız Cannot call SpreadsheetApp.getUi() from this context. hatası alırsınız; bu yüzden kaydedip e-tabloyu yeniden açarak kontrol edin.
E-posta göndermek ve tetikleyicilerle zamanlamak
GAS'ta en çok aranan konular e-posta gönderme ve tetikleyicilerdir.
function sendReminders() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
rows.forEach(([name, email]) => {
MailApp.sendEmail(email, 'Teslim tarihi hatırlatması', name + ',\n\nteslim tarihi bu cuma.');
});
}Gönderim sınırı vardır: ücretsiz bir Google hesabı günde en fazla 100 e-posta gönderebilir (Google Workspace hesapları daha fazla). Bir çalıştırma en fazla 6 dakika sürebilir; sonrasında “Exceeded maximum execution time” ile durur.
Zamanlamak için düzenleyicinin solundaki “Tetikleyiciler”e (saat simgesi) → “Tetikleyici ekle”ye tıklayıp fonksiyonu ve “Zamana dayalı”yı seçin. Her gün, hafta veya ay için bir saat aralığı belirleyebilirsiniz.
Yalnızca denerken bile e-postalar gerçekten gönderilir. Önce yalnızca kendi adresinizin olduğu bir tabloyla deneyin.
Excel VBA'dan farkları
| GAS | Excel VBA | |
|---|---|---|
| Kod | JavaScript | VBA(Visual Basic) |
| Nerede çalışır | Google'ın sunucuları | Kendi bilgisayarınızdaki Excel |
| Neler gerekir | Bir tarayıcı ve bir Google hesabı | Excel'in masaüstü sürümü (çoğunlukla Windows'ta) |
| Bağlandığı yerler | Gmail, Takvim, Drive, Formlar | Word, Outlook, bilgisayardaki dosyalar |
| Zamanlanmış çalıştırma | Tetikleyicilerle (bilgisayar kapalıyken bile çalışır) | Windows Görev Zamanlayıcı veya benzeriyle birlikte |
İkisinde de fikirler aynıdır: hücreleri okumak, yazmak, tekrarlamak ve koşullara göre ayırmak. Birini bilen diğerini de okuyabilir. Excel makrolarını Excel makrolarına giriş yazımızda anlatıyoruz.
Tarayıcıda alıştırma yapın
Bu sitenin makro ve GAS simülasyonunda sanal bir e-tablo ve Apps Script düzenleyicisinde gerçek kodu çalıştırarak alıştırma yaparsınız. Koddaki boşlukları doldurursunuz; telefonda her boşluğu dört seçenekten seçersiniz.
- Bölüm 1 Makro kaydetmek ve çalıştırmak
Kaydedilmiş bir makroyu çalıştırın ve kendiniz de kaydedin. Mutlak ve göreli referanslar, kaydedilen kodu okumak ve düzeltmek.
- Bölüm 2 Okumak, tekrarlamak, ayırmak
Hücreleri getValue ile okuyun, setValue ile yazın ve değerleri yürütme günlüğünde kontrol edin. for ile tüm satırları dolaşın, if ile ayırın.
- Bölüm 3 Vaka çalışması: aylık satış tablosunu düzenlemek
Boş satırları silin, büyük satışları tek seferde işaretleyin ve hepsini kendi menünüzden çalıştırın. Son olarak hücreler için kendi fonksiyonunuz.
GAS nasıl öğrenilir
İyi bir başlangıç, kendi e-tablolarınızdan birinde “Makro kaydet”i kullanıp ortaya çıkan kodu okumaktır. Böylece her komutun ne yaptığı daha kolay görülür.
Kodu üretken yapay zekâ da yazabilir. Ama doğru olup olmadığına ve nereyi düzelteceğinize karar vermek için en azından bu yazıdaki “sık kullanılan kodları” okuyabilmeniz gerekir.
* Ekran adları ve sınırlar Ekim 2026 itibarıyladır; Google'ın güncellemeleriyle değişebilir.
* Google E-Tablolar, Google LLC'nin ticari markasıdır. Bu sitenin Google ile bir ilgisi yoktur.