---
title: 'Elektronik Tablonun Sınırları'
source: 'https://academia.sh/tr/kurslar/elektronik-tablolar/elektronik-tablonun-sinirlari'
course: 'Elektronik Tablolarla Analiz'
language: tr
updated: '2026-08-17T18:08:43+00:00'
license: 'CC BY-SA 4.0'
---

# Elektronik Tablonun Sınırları

Kursun on bir dersinde alınan 32 karar taranıyor ve yaygın yazımda yalnız 7'si sayfadan geri okunuyor: 6'sı bir adımda, 1'i iki adımda, 25'i hiçbir hücrede yok. Kararların tamamını yazmak 32 hücre eder, yani 9.385 veri hücreli sayfanın binde 3,4 kadarı. Sayfa büyüdükçe aralık okuyan bir sütun sabit işli sütundan 626 kat pahalıya çıkıyor ve satır iki katına çıkınca dört katına; aynı sırada bir satırlık aralık hatası 60 satırlık sayfada dört özetten ikisinde görünürken 1.877 satırlık sayfada hiçbirinde görünmüyor. İki formül metni 7.508 hücreyi dolduruyor: aracın ucuza yaptığı iş de budur.

Bir önceki ders grafiğin iki kararını saydı ve dördünden üçünün sayfada hiç durmadığını gösterdi.
Aynı sonuç on bir dersin hepsinde çıktı: hesap doğru yapıldı, sayı üretildi, karar kayboldu. Bu ders
o kayboluşu tek bir sayıya indirir ve aracın sınırını üç yerde ölçer — **kaç karar geri
okunabiliyor**, sayfa büyüdükçe ne büyüyor, bir hata ne zaman görünmez olur.

Sınır bir kusur değildir. Elektronik tablo on bir derste hiçbir kurulum istemeden on bir soruyu
cevapladı ve bu dersin son sayısı o ucuzluğu da ölçer. Ölçülen şey aracın kötü olduğu değil,
**hangi işi ucuza, hangi işi hiç yapmadığıdır**.

- **TO23.** Bu ders yeni bir veri kümesi kurmaz. On bir dersin sayıları kaynak derslerden okunur;
  koşan bölüm bu sayıları **döküm olarak** tutar ve üzerinde sayar. Sayfa modeli yine `node` ile
  kurulur ve **model olduğu yazılır**.
- **TO24.** Döküm her dersin **yaygın yazımını** ölçer. Aynı derslerde kurulan izli sürümlerde
  kararların hepsi bir adımda okunur; ölçülen fark yazım biçiminin farkıdır, aracın yeteneğinin
  değil.
- **TO25.** Boyut **süreyle** ölçülmez. Sayılan şey tek bir yeniden hesapta değerlendirilen hücre
  sayısıdır; bu sayı donanımdan bağımsızdır ve sayfanın biçiminden çıkar.
- **TO26.** Bir değişimin **görünür** sayılması için eşik yüzde 1'dir, çünkü bu kursun özetleri
  iki anlamlı basamakla raporlanıyor.

## Kaç Karar Geri Okunabiliyor

```js
// kapanis.mjs — kursun on bir dersinde alinan kararlarin dokumu. Her satir bir
// dersin kararlarini ve o kararin YAYGIN YAZIMDA sayfadan kac adimda geri
// okundugunu tutar: 1 adim formulde ya da baslik satirinda yazili, 2 adim ayri
// bir not hucresinde, null hicbir hucrede yok. Sayilar kaynak derslerden okundu.
export const DERS = [
  ["temeller/01 calisma sayfasi", ["basvuru turu", "birim ucret kaynagi"], [2, null]],
  ["temeller/02 temel islevler",
    ["sayma isleminin secimi", "ortalamanin paydasi", "metin sayilarin atlanmasi"],
    [1, null, null]],
  ["temeller/03 mantiksal islevler",
    ["sinir karsilastirmasi", "kosullarin sirasi", "basamak esikleri"], [null, null, null]],
  ["temeller/04 metin islevleri",
    ["kirpma duzeyi", "harf donusumunun dili", "duzeltmenin yeri"], [1, 1, null]],
  ["temeller/05 tarih islevleri",
    ["gun sayma kurali", "ay sonu kurali", "tarihin turu"], [null, null, null]],
  ["temeller/06 arama islevleri",
    ["sutun numarasinin turu", "eslesme turu"], [null, null]],
  ["ozet/01 yinelenen kayitlar",
    ["olcut sutunlari", "metin kirpma", "tutulan satir", "silinen sayisi"],
    [null, null, null, null]],
  ["ozet/02 eksik veri",
    ["hangi hucre bostu", "doldurma yontemi", "sifirin anlami", "hesaba giren satir"],
    [null, null, null, null]],
  ["ozet/03 ozet tablolar",
    ["kirilim alani", "olcu islevi", "filtrenin yeri", "hesaplanan alanin duzeyi"],
    [1, 1, null, null]],
  ["ozet/04 temel grafikler",
    ["grafik turu", "eksen baslangici", "cizilen aralik", "dilimler butun veriyor mu"],
    [null, null, 1, null]],
];
// Kursun sayfasi: tekillestirmeden sonra kalan satirlar ve tasidigi sutunlar.
export const SATIR = 1877, SUTUN = 5;
export const y = (w) => (h) => h.map((v, j) => (j ? String(v).padStart(w[j])
  : String(v).padEnd(w[0]))).join("");

if (import.meta.url === `file://${process.argv[1]}`) {
  const y1 = y([30, 8, 9, 9, 11]);
  console.log(y1(["ders", "karar", "1 adim", "2 adim", "okunamaz"]));
  let t = 0, bir = 0, iki = 0;
  for (const [ad, kararlar, adim] of DERS) {
    const a = adim.filter((x) => x === 1).length, b = adim.filter((x) => x === 2).length;
    t += kararlar.length; bir += a; iki += b;
    console.log(y1([ad, kararlar.length, a, b, kararlar.length - a - b]));
  }
  const okunur = bir + iki;
  console.log(y1(["TOPLAM", t, bir, iki, t - okunur]));
  console.log(`\non bir dersin ilk onunda ${t} karar alindi; yaygin yazimda ${okunur} tanesi ` +
    `sayfadan geri okunuyor, ${t - okunur} tanesi hicbir hucrede yok`);
  console.log(`geri okunanlarin ${bir} tanesi bir adimda, ${iki} tanesi iki adimda okunuyor; ` +
    `oran yuzde ${(100 * okunur / t).toFixed(0)}`);
  // Kararin yazilmasinin bedeli: karar basina bir hucre.
  const veri = SATIR * SUTUN;
  console.log(`${t} kararin tamamini yazmak ${t} hucre eder; sayfanin ${SATIR} satir ve ` +
    `${SUTUN} sutunu ${veri} veri hucresi tutuyor, kaydin bedeli sayfanin binde ` +
    `${(1000 * t / veri).toFixed(1)} kadari`);
  // Kararin gomulu oldugu yerler, konuya gore.
  const konu = (p) => DERS.filter(([a]) => a.startsWith(p))
    .reduce((s, [, k, d]) => [s[0] + k.length, s[1] + d.filter(Boolean).length], [0, 0]);
  const [tt, to] = [konu("temeller"), konu("ozet")];
  console.log(`hucre islevleriyle calisan alti derste ${tt[1]}/${tt[0]} karar okunuyor, ` +
    `sayfanin butunune bakan dort derste ${to[1]}/${to[0]}`);
}
```

```
ders                             karar   1 adim   2 adim   okunamaz
temeller/01 calisma sayfasi          2        0        1          1
temeller/02 temel islevler           3        1        0          2
temeller/03 mantiksal islevler       3        0        0          3
temeller/04 metin islevleri          3        2        0          1
temeller/05 tarih islevleri          3        0        0          3
temeller/06 arama islevleri          2        0        0          2
ozet/01 yinelenen kayitlar           4        0        0          4
ozet/02 eksik veri                   4        0        0          4
ozet/03 ozet tablolar                4        2        0          2
ozet/04 temel grafikler              4        1        0          3
TOPLAM                              32        6        1         25

on bir dersin ilk onunda 32 karar alindi; yaygin yazimda 7 tanesi sayfadan geri okunuyor, 25 tanesi hicbir hucrede yok
geri okunanlarin 6 tanesi bir adimda, 1 tanesi iki adimda okunuyor; oran yuzde 22
32 kararin tamamini yazmak 32 hucre eder; sayfanin 1877 satir ve 5 sutunu 9385 veri hucresi tutuyor, kaydin bedeli sayfanin binde 3.4 kadari
hucre islevleriyle calisan alti derste 4/16 karar okunuyor, sayfanin butunune bakan dort derste 3/16
```

Yedi. Otuz iki karardan yedisi sayfadan geri okunuyor, yirmi beşi hiçbir hücrede durmuyor; oran
**yüzde 22**. Geri okunan yedinin altısı bir adımda okunuyor ve bunun bir nedeni var: o altısında
kararı taşıyan şey ayrı bir açıklama değil, işlevin ya da başlığın **kendi adı**. Kırpma işlevi
kırptığını söyler, harf dönüşümü hangi dilin kuralını uyguladığını söyler, özet tablonun başlığı
kırılım alanını yazar. **Kendi adını taşıyan karar kurtulur.**

Kalan yirmi beşi kaybeden şey ortak bir biçimdir: karar bir sayıya dönüşüp bir formülün içine
girmiştir. Sütun numarası bir sabit, sınır karşılaştırması bir işleç, eşleşme türü bir sıfır,
doldurma değeri bir ondalık sayı olur. Sayı hesabı doğru yapar ve hangi soruya cevap verdiğini
söylemez.

Dökümün alt satırı bir beklentiyi bozuyor. Hücre işlevleriyle çalışan altı derste 16 karardan 4'ü
okunuyor, sayfanın bütününe bakan dört derste 16 karardan 3'ü. Tablonun bütününe geçmek durumu
düzeltmiyor: tekilleştirme ve doldurma kararlarının **hiçbirini** bırakmıyor, çünkü ikisi de
sayfayı değiştirip kendini siliyor.

Son satır bedeli veriyor. Otuz iki kararın tamamını yazmak 32 hücre eder. Sayfanın kendisi 1.877
satır ve 5 sütunla 9.385 veri hücresi tutuyor, yani kaydın bedeli sayfanın **binde 3,4 kadarı**.
Kararların yazılmamasının nedeni maliyet değildir.

## Sayfa Büyüdükçe Ne Büyüyor

```js
// boyut.mjs — sayfa buyudukce ne buyuyor. Sure olculmez; sayilan sey tek bir
// yeniden hesapta degerlendirilen hucre sayisi ve bir satirlik hatanin ozette
// gorunur olup olmadigidir. MODELDIR: hucre bir eslemede durur.
import { y } from "./kapanis.mjs";
const HARF = (j) => String.fromCharCode(65 + j);
const DEGER = (i) => 10 + ((i * 7) % 40) * 0.5;

// Iki formul turu. Sabit isli formul yalnizca kendi satirini ve bir parametre
// hucresini okur. Aralik okuyan formul her satirda butun sutunu tarar --
// kosullu toplama ve arama islevleri boyle davranir.
const kur = (n, aralikli) => {
  const h = new Map(); let sayac = 0;
  h.set("P1", 8.4);
  for (let i = 0; i < n; i++) h.set(`A${i + 2}`, DEGER(i));
  const oku = (ad) => { sayac++; const v = h.get(ad);
    return typeof v === "function" ? v() : v; };
  for (let i = 0; i < n; i++) h.set(`B${i + 2}`, aralikli
    ? () => { let t = 0;
        for (let j = 0; j < n; j++) { const v = oku(`A${j + 2}`); if (v > 20) t += v; }
        return t; }
    : () => oku(`A${i + 2}`) * oku("P1"));
  return () => { sayac = 0;
    for (let i = 0; i < n; i++) oku(`B${i + 2}`); return sayac; };
};

const y1 = y([10, 16, 20, 12]);
console.log("tek yeniden hesapta degerlendirilen hucre sayisi");
console.log(y1(["satir", "sabit isli sutun", "aralik okuyan sutun", "oran"]));
let onceki = null;
for (const n of [1877, 3754, 7508]) {
  const [a, b] = [kur(n, false)(), kur(n, true)()];
  console.log(y1([n, a, b, (b / a).toFixed(0)]));
  if (onceki) console.log(`  satir iki katina cikinca sabit isli sutun ` +
    `${(a / onceki[0]).toFixed(1)} katina, aralik okuyan sutun ` +
    `${(b / onceki[1]).toFixed(1)} katina cikti`);
  onceki = [a, b];
}
console.log(`iki sutunun her biri tek bir formul metniyle yazildi ve 7508 hucreye ` +
  `kopyalandi; sayfanin ucuza yaptigi is budur`);

// Bir satirlik hata: aralik son satiri disarida birakiyor. Degisimin gorunur
// sayilmasi icin esik yuzde 1'dir, cunku ozetler iki anlamli basamakla okunuyor.
const ESIK = 1.0;
const OZET = [["toplam", (a) => a.reduce((x, z) => x + z, 0)],
  ["ortalama", (a) => a.reduce((x, z) => x + z, 0) / a.length],
  ["en buyuk", (a) => Math.max(...a)], ["sayim", (a) => a.length]];
const y2 = y([10, 12, 12, 12, 12, 14]);
console.log(`\naralik bir satir kisa alinirsa ozet yuzde kac degisir (esik ${ESIK})`);
console.log(y2(["satir", ...OZET.map((o) => o[0]), "gorunur"]));
for (const n of [60, 1877]) {
  const tam = Array.from({ length: n }, (_, i) => DEGER(i)), eksik = tam.slice(0, n - 1);
  const fark = OZET.map(([, f]) => 100 * Math.abs(f(tam) - f(eksik)) / f(tam));
  console.log(y2([n, ...fark.map((v) => v.toFixed(2)),
    `${fark.filter((v) => v > ESIK).length}/${OZET.length}`]));
}
console.log(`ayni hata 60 satirlik sayfada iki ozette gorunur, 1877 satirlik sayfada ` +
  `hicbirinde gorunmez: sayfa buyudukce hatanin kendisi degil gorunurlugu kuculur`);
```

```
tek yeniden hesapta degerlendirilen hucre sayisi
satir     sabit isli sutun aralik okuyan sutun        oran
1877                  5631             3525006         626
3754                 11262            14096270        1252
  satir iki katina cikinca sabit isli sutun 2.0 katina, aralik okuyan sutun 4.0 katina cikti
7508                 22524            56377572        2503
  satir iki katina cikinca sabit isli sutun 2.0 katina, aralik okuyan sutun 4.0 katina cikti
iki sutunun her biri tek bir formul metniyle yazildi ve 7508 hucreye kopyalandi; sayfanin ucuza yaptigi is budur

aralik bir satir kisa alinirsa ozet yuzde kac degisir (esik 1)
satir           toplam    ortalama    en buyuk       sayim       gorunur
60                1.40        0.27        0.00        1.67           2/4
1877              0.04        0.01        0.00        0.05           0/4
ayni hata 60 satirlik sayfada iki ozette gorunur, 1877 satirlik sayfada hicbirinde gorunmez: sayfa buyudukce hatanin kendisi degil gorunurlugu kuculur
```

İlk tablo iki formül türünü yan yana koyuyor. Sabit işli bir sütun her satırda yalnız kendi satırını
ve bir parametre hücresini okur; 1.877 satırda tek bir yeniden hesap 5.631 hücre değerlendirmesi
ister ve satır iki katına çıkınca sayı iki katına çıkar. Aralık okuyan bir sütun — koşullu toplama,
dikey arama, eşleşme–dizin bu türdendir — her satırda bütün sütunu tarar; aynı sayfada 3.525.006
değerlendirme ister, yani **626 kat**, ve satır iki katına çıkınca sayı **dört katına** çıkar.

Sınır buradadır ve donanımla ilgisi yoktur: sayfa on kat büyüdüğünde sabit işli sütun on kat,
aralık okuyan sütun yüz kat ağırlaşır. Aynı tablonun son satırı aracın öbür yüzünü gösteriyor: iki
sütunun her biri **tek bir formül metniyle** yazıldı ve 7.508 hücreye kopyalandı. Bir soruyu bir kez
yazıp binlerce satıra yaymak elektronik tablonun ucuza yaptığı iştir.

İkinci tablo boyutun ikinci yüzünü ölçüyor. Bir aralık son satırı dışarıda bırakırsa 60 satırlık bir
sayfada toplam yüzde 1,40, sayım yüzde 1,67 oynar ve dört özetten **ikisi** görünür biçimde değişir.
Aynı hata 1.877 satırlık sayfada toplamı yüzde 0,04 oynatır ve dört özetin **hiçbirinde** görünmez.
Hata küçülmedi, sayfa büyüdü. Her satırın özet üzerindeki payı düştükçe gözle denetim işe yaramaz
hale gelir — oysa o, kararların yazılmadığı bir sayfada elde kalan tek denetimdir.

## Özet

- Kursun on bir dersinde alınan 32 karardan yaygın yazımda 7'si geri okunuyor, 25'i hiçbir hücrede
  yok; oran yüzde 22.
- Geri okunan yedinin altısı bir adımdadır ve hepsinde kararı taşıyan şey işlevin ya da başlığın
  kendi adıdır; kaybolan yirmi beşi bir sabite ya da bir işlece dönüşmüştür.
- Kararların tamamını yazmak 32 hücre eder, sayfanın 9.385 veri hücresinin binde 3,4 kadarı;
  yazılmamalarının nedeni maliyet değildir.
- Aralık okuyan bir sütun 1.877 satırda sabit işli sütundan 626 kat pahalıdır ve satır iki katına
  çıkınca dört katına çıkar; sabit işli sütun iki katına çıkar.
- Aynı bir satırlık aralık hatası 60 satırlık sayfada dört özetten ikisinde görünür, 1.877 satırlık
  sayfada hiçbirinde görünmez.
- Aynı sayfa iki formül metniyle 7.508 hücreyi doldurur; aracın ucuza yaptığı iş budur.

## Kurs Kapanışı

| Ders | Sayı | Değişen karar | Fark | Karar geri okunabilir mi |
|---|---|---|---|---|
| temeller/01 çalışma sayfası | 13 427,16 toplam | başvuru türü | 3 354,98, 59 hücre | 1/2, iki adım |
| temeller/02 temel işlevler | 708,5 m³ toplam | metin sayıların sayılması | 967,2 m³, yüzde 26,7 | 1/3, bir adım |
| temeller/03 mantıksal işlevler | 26 219,52 tutar | sınır karşılaştırması | 26 698,32, yüzde 35,5 | 0/3, okunamaz |
| temeller/04 metin işlevleri | 8 eşleşen kayıt | kırpma ve harf dönüşümü | 48 kayıt, 1204,8 m³ | 2/3, bir adım |
| temeller/05 tarih işlevleri | 6,33 gün ortalama | gün sayma kuralı | 5,20 ve 7,33 gün | 0/3, okunamaz |
| temeller/06 arama işlevleri | 1204,8 m³ toplam | gömülü sütun numarası | 1084,6 m³, 48 kayıt | 0/2, okunamaz |
| özet/01 yinelenen kayıtlar | 1.877 satır kalır | tekilleştirme ölçütü | 1.400 satır, 12 121,0 m³ | 0/4, okunamaz |
| özet/02 eksik veri | 19,23 m³ ortalama | boş hücre dışlanır mı | 18,04 ve 20,54 m³ | 0/4, okunamaz |
| özet/03 özet tablolar | kuzey 10.905,8 m³ | kırılımın ölçüsü | doğu ve merkez birinci | 2/4, başlıkta |
| özet/04 temel grafikler | 1,63 çubuk oranı | eksen başlangıcı | 13,00 oran, 8,0 kat | 1/4, aralık |
| özet/05 sınırlar | 7 karar okunur | kararın yazıldığı yer | 25 karar kayıp | 7/32, yüzde 22 |

Kursun kuralı bu tablodan çıkıyor: **elektronik tablo bir hesap aracıdır, bir kayıt aracı değildir;
hücreye gömülü karar, yazılmamış karardır.** On bir derste hiçbir hesap yanlış yapılmadı ve hiçbir
işlem hata vermedi; kaybolan şey hesap değil, hesabın hangi soruya cevap verdiğiydi. Aynı tabloyu
iki kişi açtığında aynı sayıyı bulmasını sağlayan şey tablonun kendisi değil, tablonun **dışında**
tutulan tanımdır. Aracın ucuza yaptığı iş de aynı ölçüyle yazılabilir: tek bir formül metni 7.508
hücreye yayılır, kararların tamamını yazmak ise sayfanın binde 3,4'ü kadar yer tutar.

Bu on bir ders boyunca kararlar hücrelere gömüldü ve çoğu geri okunamadı. Ama daha temel bir soru
hiç sorulmadı: bu veri tabloya **nereden** geldi ve gelirken ne oldu. 1.877 satırın hepsi bir saha
formundan, bir okuma cihazından ya da bir başka sistemin dışa aktarımından geçti; her geçişte bir
alan yeniden adlandırıldı, bir tarih biçimlendi, bir kod kırpıldı. Sonraki kurs, **Veri Toplama ve
Hazırlama**, tablonun başladığı yerden öncesini açar ve verinin tabloya girene kadar kaç elden
geçtiğini sayar.
