Kaynak: https://oguzerol.com/excel-veri-temizleme/

[![Örnek senaryo: 473 satırlık dağınık sevkiyat sayfasından 55 veri dışı satır ayıklanır, satır ve tutar ERP genel toplamıyla karşılaştırılır; 6 mükerrer satırın silinmesi onay bekler, ham dosyaya dokunulmaz.](https://oguzerol.com/gorseller/senaryo/excel-veri-temizleme-senaryo-tr.webp)

Görseli büyüt](https://oguzerol.com/gorseller/senaryo/excel-veri-temizleme-senaryo-tr.webp)

# Excel Veri Temizleme: Dağınık Tabloyu Formül ve Power Query ile Düzeltmek

[Oğuz Erol](https://oguzerol.com/hakkimda/)  |  16 dk okuma  |  Yayın: 29 Temmuz 2026  |  Güncelleme: 16 Ekim 2026

## Kısa özet

ERP'den dökülmüş dağınık Excel tablosunu formül ve Power Query ile temizleyin, satır ve tutar mutabakatıyla doğrulayın. 473 satırlık örnekle adım adım.

Dağınık bir Excel tablosunu (birleştirilmiş hücreler, ara toplam satırları, metin olarak duran tutarlar, karışık tarihler) temizlemenin doğru sırası şu: önce **teşhis** (hangi sorundan kaç satır var), sonra **ham veriye dokunmadan** yanına temiz sütunlar kurmak, en son **doğrulama** (temizlik sonrası satır sayısı ve toplam tutar, kaynak sistemin kendi toplamıyla tutuyor mu). Tek seferlik iş formülle yapılır; her ay tekrarlanan iş Power Query’de bir kez kurulur ve her ay yenilenir. Doğrulamayı atlarsanız temiz görünen ama yanlış toplayan bir tablo elde edersiniz. Aşağıdaki örnekte ham sayfadaki TOPLA formülü gerçek satış toplamının 2,57 katını gösteriyor.

Bu sayfa ERP’den ya da muhasebe programından dökülmüş, üstüne elle satır eklenmiş tabloyu analiz edilebilir hâle getirmek isteyen finans ve operasyon ekipleri için. Formüller Türkçe Excel adlarıyla ve noktalı virgülle yazıldı; İngilizce Excel’de işlev adları farklı, ayırıcı virgüldür. Sayfadaki Microsoft kaynaklarının hepsini 16 Ekim 2026’da okudum.

## Örnek: 473 satırlık bir sevkiyat sayfası

*Aşağıdaki firma, müşteriler ve bütün sayılar kurgusaldır; senaryoyu bir Python betiğiyle üretip sayfadaki her sayıyı betikte doğruladım.*

Bir rulman ve güç aktarım parçası distribütörü düşünün. Satış operasyon uzmanı her ay ERP’nin sevkiyat raporunu Excel’e alıyor. Depo ekibi ise ERP dışında yaptığı acil sevkiyatları elle tuttuğu bir listede gönderiyor; uzman bu listeyi raporun altına yapıştırıyor. Yönetim müşteri, şehir ve ürün bazında aylık satış istiyor.

| bölüm | satır | içinde ne var |
| --- | --- | --- |
| ERP raporu | 409 | 2 başlık satırı, 1 boş satır, 1 üst bilgi, 24 müşteri grubunda 356 sevkiyat satırı, her grubun altında ara toplam ve boş satır, en altta “Genel Toplam (356 kayıt)” |
| Depo listesi | 64 | 1 boş satır, tekrar eden üst bilgi, 62 elle yazılmış satır |

Sütunlar: A Cari, B Şehir, C Tarih, D İrsaliye No, E Ürün Kodu, F Miktar, G Birim Fiyat, H Tutar. Veri 5. satırda başlıyor, 473. satırda bitiyor.

## Önce teşhis: hangi sorundan kaç satır var?

Temizliğe başlamadan önce her sorunu sayın ve önce toplamı hata vermeden bozanlara bakın. Tabloda bunları **sessiz** diye işaretledim:

| sorun | örnekte | nasıl bulunur | nasıl düzeltilir |
| --- | --- | --- | --- |
| **Ara toplam, genel toplam** (sessiz) | 24 + 1 satır | İrsaliye No boş | Veri satırı sütunuyla dışarıda bırak |
| **Metin olarak sayı** (sessiz) | 37 tutar | Sola yaslı, yeşil üçgen | SAYIDEĞERİ |
| **Farklı yazım** (sessiz) | 7 şehir, 18 yazım | Filtre listesi | Eşleme sayfası |
| **Mükerrer** (sessiz) | 6 satır | İrsaliye + ürün iki kez | Yürüyen ÇOKEĞERSAY |
| **Metin tarih, üç biçim** (sessiz) | 62 tarih | Sola yaslı, ayırıcıya bakın | Biçim başına bir sütun |
| **Boşluk, bölünmez boşluk** (sessiz) | 41 + 9 kod | KIRP’tan sonra uzunluk değişiyor | YERİNEKOY + KIRP |
| Birleştirilmiş hücre | 24 grup, 332 boş hücre | Bul > Biçim | Üstteki değeri al |
| Tek hücrede iki bilgi | Cari = kod + ad | Tire | SOLDAN, PARÇAAL |
| Boş satır, başlık | 26 boş, 2 başlık, 2 üst bilgi | İrsaliye No boş | Dışarıda bırak |

İlk altısı yanlış bir toplam, bölünmüş bir grup ya da kayan bir tarih üretir ve hiçbir hücre hata göstermez. Son üçü gözle görülür. Boş satırların 26’sı: raporun başında 1, grupların altında 24, depo listesinin önünde 1. İki üst bilginin biri ERP’nin, biri depo listesinin.

Ayrıntılar:

- **Boşluk iki türlü.** ERP 41 ürün kodunun sonuna normal boşluk koymuş; depo listesindeki 9 kod e-postadan kopyalandığı için bölünmez boşluk (karakter 160) taşıyor. Microsoft’a göre KIRP yalnız normal boşluğu (32) siler, bölünmez boşluğu silmez ([Microsoft Destek, TRIM](https://support.microsoft.com/en-us/office/trim-function-410388fa-c5df-49c6-b16c-9e5630b479f9)). Ham sayfada 69 farklı ürün kodu görünüyor, temizlikten sonra 30. Bulmak için `=UZUNLUK(E5)<>UZUNLUK(KIRP(E5))` ve `=ESAYIYSA(BUL(DAMGA(160);E5))`.
- **Metin tutar toplamaya girmez.** Depo listesindeki 62 tutarın 37’si metin: 28’i “46.000,00”, 9’u “970,00 TL” biçiminde. Bulmak için `=EMETİNSE(H5)`.
- **Tarihler üç biçimde.** Depo listesindeki 62 tarihin hepsi metin: 35’i gg.aa.yyyy, 19’u aa/gg/yyyy (İngilizce bölge ayarlı bir dizüstüden), 8’i yyyy-aa-gg. “03/02/2026” bu dosyada ayın 2’si; gg.aa diye okunursa başka bir ayın 3’ü olur.
- **Farklı yazım hem elde hem ERP’de.** Depo “İzmir”i “izmir” ve “Izmir”, “Kocaeli”yi “kocaeli” ve ilçe adıyla “Gebze”, “İstanbul”u “İST”, “Istanbul”, “istanbul” ve sonu boşluklu “İstanbul ” diye yazmış. ERP’de de iki cari kartında şehir yanlış: 15 satır “KOCAELİ”, 16 satır “Izmir”. Toplam 61 satır. “Gebze”yi Kocaeli’ye hiçbir fonksiyon kendiliğinden çevirmez; bunu bir eşleme tablosuna sizin yazmanız gerekir.
- **Birleştirilmiş hücre.** ERP her müşterinin adını grubun satırları boyunca tek hücreye yazmış; birleştirmeyi kaldırınca 332 hücre boş kalıyor. Bulmak için Giriş > Bul ve Seç > Bul > Biçim > Hizalama > Hücreleri birleştir > Tümünü Bul ([Microsoft Destek](https://support.microsoft.com/en-us/excel/find-merged-cells)).
- **Cari hücresi kod ve adı birlikte taşıyor:** “C1001 - Akın Rulman A.Ş.”. Depo listesinde 7 satırda tire boşluksuz (“C1120-Tuna Tarım Makine”), 3 satırda adın ortasında Alt+Enter ile satır sonu var. Bir müşterinin adında da tire geçiyor: “Kaya - Er Makine”. ERP tam unvanı, depo kısa adı yazdığı için analizi cari koduna göre kuruyorum.
- **Mükerrer 6 satır.** Depo 4 acil sevkiyatı listesine yazmış, muhasebe aynılarını sonradan ERP’ye de girmiş. 2 satır depo listesinde iki kez yapıştırılmış.

## Formülle temizlik: ham sütunlara dokunmadan

Formülle temizlikte ham A–H sütunlarına dokunmuyorum, sağına temiz sütunlar ekliyorum; böylece her temiz değerin hangi ham değerden geldiği aynı satırda görünür. Yine de önce dosyanın bir kopyasını alın. Her formül J sütunuyla korunuyor; başlık, boş ve ara toplam satırlarında boş kalır. Her yardımcı sütunun 4. satırına aşağıdaki başlığı yazın; Özet Tablo bunları alan adı olarak kullanır.

| sütun | 4. satırdaki başlık | ne yapar | nerede kullanılır |
| --- | --- | --- | --- |
| J | Veri mi | Veri satırını işaretler | Bütün formüller, sayım, Özet Tablo filtresi |
| K | Cari Kodu | Kodu ayırır, birleşik hücreyi doldurur | Özet Tablo |
| L | Cari Adı | Adı ayırır, satır sonunu siler | Rapor |
| M | Şehir Temiz | Doğru şehri eşleme sayfasından alır | Özet Tablo, eşleme kontrolü |
| N, O, P | Tarih gg.aa, Tarih aa/gg, Tarih ISO | Biçim başına tarih parçası | Tarih Temiz |
| Q | Tarih Temiz | Tek, gerçek tarih | Dönem kontrolü, aylık kırılım |
| R | Ürün Temiz | Boşluksuz kod | Anahtar, Özet Tablo |
| S | Tutar Temiz | Sayı olarak tutar | Toplam, kontroller, Özet Tablo |
| T | Anahtar | İrsaliye + ürün | Mükerrer |
| U | Mükerrer | İkinci ve sonraki geçişi işaretler | Sayım, Özet Tablo filtresi |

Satır numaraları örneğe göre (5–473), kendi dosyanızda uyarlayın.

- **J, veri satırı mı:** `=VE(D5<>"";D5<>"İrsaliye No")`. Satır silmek yerine dışarıda bırakıyorum.
- **K, cari kodu:** `=EĞER(J5;EĞER(A5="";K4;SOLDAN(KIRP(A5);5));"")`. A boşsa üstteki kodu alır; birleştirilmiş hücrenin 332 boş satırı böyle dolar.
- **L, cari adı:** `=EĞER(J5;EĞER(A5="";L4;KIRP(YERİNEKOY(PARÇAAL(A5;BUL("-";A5)+1;200);DAMGA(10);" ")));"")`. BUL ilk tireyi bulur; “C1120-Tuna” da “C1064 - Kaya - Er Makine” da doğru ayrılır.
- **M, şehir:** `=EĞER(J5;ÇAPRAZARA(KIRP(B5);Eşleme!$A:$A;Eşleme!$B:$B;"EŞLEME YOK");"")`. “Eşleme” sayfasında A’ya ham yazım, B’ye doğru şehir yazılır; örnekte 17 satır yetiyor.
- **N, O, P, tarih parçaları:** her biçim için ayrı, kısa bir sütun. Hücrede o ayırıcı yoksa boş kalır.
  - N (gg.aa.yyyy): `=EĞER(ESAYIYSA(BUL(".";C5));TARİH(SAĞDAN(C5;4);PARÇAAL(C5;4;2);SOLDAN(C5;2));"")`
  - O (aa/gg/yyyy): `=EĞER(ESAYIYSA(BUL("/";C5));TARİH(SAĞDAN(C5;4);SOLDAN(C5;2);PARÇAAL(C5;4;2));"")`
  - P (yyyy-aa-gg): `=EĞER(ESAYIYSA(BUL("-";C5));TARİH(SOLDAN(C5;4);PARÇAAL(C5;6;2);SAĞDAN(C5;2));"")`
- **Q, tarih:** `=EĞER(J5;EĞER(ESAYIYSA(C5);C5;TOPLA(N5:P5));"")`. Gerçek tarih olduğu gibi geçer; metin tarihte üç parçadan yalnız biri doludur. Gün ve ayın iki haneli yazıldığını varsayar; “5.3.2026” PARÇAAL’ı şaşırtır.
- **R, ürün kodu:** `=KIRP(YERİNEKOY(E5;DAMGA(160);""))`.
- **S, tutar:** `=EĞER(J5;EĞER(ESAYIYSA(H5);H5;SAYIDEĞERİ(YERİNEKOY(YERİNEKOY(H5;"TL";"");DAMGA(160);"");",";"."));"")`. SAYIDEĞERİ ayırıcıları sizden alır, boşlukları yok sayar ([Microsoft Destek, NUMBERVALUE](https://support.microsoft.com/en-us/office/numbervalue-function-1b05c8cf-2bfa-4437-af70-596c7ea7d879)); dosya hangi bölge ayarlı bilgisayarda açılırsa açılsın aynı sonucu verir. Yan yol SAYIYAÇEVİR: binlik noktayı da silip kullanılır, ama metni sayı sayması bölge ayarınızın ondalık virgül kullanmasına bağlı ([Microsoft Destek, VALUE](https://support.microsoft.com/en-us/office/value-function-257d0108-07dc-437d-ae1c-bc2d3953d8c2)).
- **T, anahtar:** `=D5&"|"&R5`.
- **U, mükerrer mi:** `=VE(J5;ÇOKEĞERSAY(T$5:T5;T5;J$5:J5;DOĞRU)>1)`. Aralık aşağı indikçe büyür; bir anahtarın yalnız ikinci ve sonraki geçişi DOĞRU olur. Örnekteki 6 mükerrerin 4’ünde tutulan satır ERP satırı (ERP bölümü üstte), 2’sinde (DP0415, DP0452) ilk depo satırı.

Temiz satır sayısı ve toplamı tek hücrede: `=ÇOKEĞERSAY(J5:J473;DOĞRU;U5:U473;YANLIŞ)` 412 verir, `=ÇOKETOPLA(S5:S473;J5:J473;DOĞRU;U5:U473;YANLIŞ)` 8.331.492,30. Formüllerin mantığını betikte sınadım, Excel’de denemedim; kendi dosyanızın kopyasında bir kez deneyin. Tam sütun başvurularının (Eşleme!$A:$A) kaç satırda yavaşladığını ölçmedim; yavaşlarsa Power Query’ye geçin.

**Fonksiyonların sınırları:**

- **TEMİZ** 0–31 arası karakterleri siler ([Microsoft Destek, CLEAN](https://support.microsoft.com/en-us/office/clean-function-26f3d7c5-475f-4a9c-90e5-4b8ba987ba41)), satır sonunu da, ama yerine boşluk koymaz: örnekte “Oral PlastikSan. Tic. Ltd. Şti.” üretiyor. L’deki YERİNEKOY + KIRP “Oral Plastik San. Tic. Ltd. Şti.” veriyor.
- **METNEÇEVİR** sayıyı metne çevirir; Microsoft özgün değeri ayrı hücrede tutmayı öneriyor ([Microsoft Destek](https://support.microsoft.com/tr-tr/office/text-function-20d5ac4d-7b94-49fd-bb38-93d29371225c)). Tutar ya da tarih sütununu onunla “düzeltmeyin”. Ben yalnız kontrol için kullanıyorum: `=METNEÇEVİR(Q5;"gg.aa.yyyy")` dönüştürülen tarihi ham metnin yanında gösterir.
- **TARİH** hata vermez, taşırır: 12’den büyük ay sonraki yıla, ayın gün sayısını aşan gün sonraki aya geçer ([Microsoft Destek, DATE](https://support.microsoft.com/en-us/office/date-function-e36c0c8c-4104-49da-ab83-82328b832349)). aa/gg/yyyy biçimli 19 satırı N sütununun mantığıyla okusaydınız hiçbiri hata vermezdi: 11’i sonraki yıla, 8’i aynı yılın başka bir ayına düşerdi. Doğrulamadaki dönem kontrolü bu yüzden şart.

**Hızlı çözümler neden yetmedi?** Metin sayılarda Excel’in yeşil üçgenine tıklayıp Sayıya Dönüştür demek Microsoft’un önerdiği ilk yoldur ([Microsoft Destek](https://support.microsoft.com/en-us/office/convert-numbers-stored-as-text-to-numbers-40105f2a-fe79-4477-a171-c5bad0f0a885)); bir başka yaygın yol Özel Yapıştır’daki Çarp işlemidir ([Microsoft Destek](https://support.microsoft.com/en-us/office/paste-options-8ea795b0-87cd-46af-9b59-ed4d8b1669ad); sayfa işlemi anlatıyor, metni sayıya çevirdiğini yazmıyor, ben denemedim). İkisi de “970,00 TL” gibi ekli metni çözmez, tarihlere dokunmaz ve gelecek ay elle tekrarlanır. Tek seferlik, eksiz bir sütunda yeterlidir.

**Üç Excel komutu:**

- **Metni Sütunlara Dönüştür** (Veri sekmesi) sınırlayıcıya göre böler ([Microsoft Destek](https://support.microsoft.com/en-us/office/split-text-into-different-columns-with-the-convert-text-to-columns-wizard-30b14928-5550-41f5-97ca-7a3e9c363ed7)). Tireyi seçerseniz “Kaya - Er Makine”nin adındaki tire de ayırıcı sayılır, hücreleri iki yerine üç sütuna dağılır. Kod sabit uzunlukta olduğu için SOLDAN’ı tercih ediyorum.
- **Hızlı Doldurma** (Ctrl+E) yan sütuna yazdığınız birkaç örnekten deseni çıkarıp sütunu doldurur; Microsoft’un sayfası Microsoft 365 ile Excel 2016–2024’ü listeliyor ([Microsoft Destek](https://support.microsoft.com/en-us/office/using-flash-fill-in-excel-3f9bcf1e-db93-4890-94a0-1578341f73f7)). Örnekteki gibi tutarsız satırlarda doldurduğu her satırı kontrol edin.
- **Yinelenenleri Kaldır** yinelenenleri kalıcı olarak siler, ilk geçeni tutar, hücrede görünen değeri karşılaştırır; Microsoft önce kopya almayı öneriyor ([Microsoft Destek](https://support.microsoft.com/en-us/office/filter-for-unique-values-or-remove-duplicate-values-ccf664b0-81d6-449b-bbe1-8daaec1e83c2)). Temizlikten önce bütün sütunlar seçiliyken 6 mükerrerin yalnız 2’sini (birebir kopyaları) bulur; İrsaliye No ve ham ürün kodu seçiliyken 5’ini (altıncının kodunda bölünmez boşluk var); temiz anahtarla 6’sını. Ben silmeden önce U sütunuyla işaretliyorum.

## Power Query ile tekrarlanabilir temizlik

Bu iş her ay tekrarlanıyorsa adımları Power Query’de bir kez kurun; gelecek ay yeni dosyayı koyup Veri > Tümünü Yenile dersiniz. Microsoft’a göre Power Query özgün kaynağı değiştirmez, sorgu yenilendiğinde her adım otomatik çalışır; Microsoft 365, Excel 2024, 2021, 2019 ve 2016’da var, Mac için Excel 2016 ve 2019’da desteklenmiyor ([Microsoft Destek](https://support.microsoft.com/en-us/excel/about-power-query-in-excel)). Formülden üstün olduğu iki yer: ham dosya hiç değişmez ve her adım Uygulanan Adımlar listesinde tek tek görülür; kaynakta bir sütunun adı değişirse onu adıyla çağıran adım “sütun bulunamadı” hatası verir ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/dealing-with-errors)), formül ise yanlış sütundan sessizce hesaplamaya devam eder.

**Formül yolu ile Power Query yolu aynı 412’ye varır.** Formül yolu senaryodaki tek sayfayla çalışır: 473 satır, J ve U ile 412’ye iner. Power Query’de iki kaynağı ayrı sorgu olarak alırsınız: ERP’den 356 satır + depo listesinden 62 satır − ERP’de zaten olan 4 − depo içindeki 2 kopya = 412, toplam yine 8.331.492,30. Kaynak toplamını Power Query’den almayın, çünkü ERP sorgusu Genel Toplam satırını süzüyor. O satırı ham dosyadan not edin; raporunuz böyle bir satır vermiyorsa ERP ekranında aynı dönem ve filtreyle alınan toplamı kullanın.

Türkçe menü adları sürüme göre değişebilir; Türkçe arayüzde denemedim, ekranınızda farklıysa yanındaki İngilizce adı arayın.

**ERP sorgusu:**

1. Veri > Veri Al > Dosyadan > Çalışma Kitabından, sonra Verileri Dönüştür.
2. **Üst satırları kaldır** (Remove Top Rows): 3. Microsoft’un örneğinde de üst satırlar üst bilgiden önce kaldırılıyor ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/table-promote-demote-headers)).
3. **İlk satırı üst bilgi olarak kullan** (Use First Row as Headers). Otomatik eklenen “Değiştirilen Tür” adımını silin.
4. Cari sütununda **Doldur > Aşağı** (Fill > Down): boş (null) hücreleri üstteki son değerle doldurur ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/fill-values-column)). Birleştirilmiş hücrenin değeri ilk hücrede durur; diğer satırların Power Query’de null geldiğini Doldur’dan önce kendi dosyanızda kontrol edin, ben Power Query’de denemedim.
5. İrsaliye No boş olanları süzün; ara toplamlar, boş satırlar ve Genel Toplam gider, 356 satır kalır.
6. Cari’yi **Sütunu Böl > Sınırlayıcıya Göre** (Split Column > By Delimiter), ”-”, **en soldaki sınırlayıcı** (Left-most delimiter) ile bölün, iki parçayı Kırp ile kırpın ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/split-columns-delimiter)).

**Depo sorgusu:**

1. Dosyayı alın, ilk satırı üst bilgi yapın ve burada da otomatik “Değiştirilen Tür” adımını silin; Tarih metin kalmalı.
2. Tarih için Sütun Ekle > Özel Sütun: `= let t = [Tarih] in if Text.Contains(t, "/") then Date.FromText(t, [Format="MM/dd/yyyy", Culture="en-US"]) else if Text.Contains(t, "-") then Date.FromText(t, [Format="yyyy-MM-dd"]) else Date.FromText(t, [Format="dd.MM.yyyy"])` ([Microsoft Learn](https://learn.microsoft.com/en-us/powerquery-m/date-fromtext)). Sütun tek biçimde olsaydı **Türü Değiştir > Yerel Ayarı Kullanarak** (Change Type > Using Locale) yeterdi ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/data-types)); üç biçim karışıkken tek yerel ayar bir grubu bozar.
3. Tutar: **Değerleri Değiştir** (Replace Values) ile “TL”yi silin, Kırp uygulayın, sonra Türü Değiştir > Yerel Ayarı Kullanarak > Ondalık Sayı, Türkçe (Türkiye).
4. Cari’deki satır sonunu Değerleri Değiştir’in özel karakter seçeneğiyle boşluğa çevirin ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/replace-values)), sonra ERP sorgusundaki gibi bölün.

**İki sorguda ortak:**

- Ürün kodu: Özel Sütun ile `= Text.Trim(Text.Replace([Ürün Kodu], Character.FromNumber(160), ""))`. Text.Trim sayfası bölünmez boşluğu anmıyor ([Microsoft Learn](https://learn.microsoft.com/en-us/powerquery-m/text-trim)); onu açıkça siliyorum.
- Şehir: “Eşleme” tablosunu ayrı sorgu olarak alıp **Sorguları Birleştir** (Merge Queries) ile bağlayın; eşleşmeyen satır null gelir.
- Mükerrer: depo sorgusunu ERP sorgusuyla İrsaliye No + Ürün Kodu üzerinden **sol anti** (Left Anti) birleştirin; 4 satır düşer. Birleştirme türlerini [iki Excel listesini karşılaştırma](https://oguzerol.com/iki-excel-listesini-karsilastirma/) sayfasında anlattım. Depo içindeki 2 birebir kopya için **Yinelenenleri Kaldır** (Remove Duplicates) yeter; Microsoft’a göre Power Query’de bu komut büyük/küçük harfe duyarlıdır ve ilk geçeni tutmayı garanti etmez ([Microsoft Learn](https://learn.microsoft.com/en-us/power-query/working-with-duplicates)). Birebir kopyada bu fark etmez, ERP ile depo arasındaki mükerrerde eder.
- Son adım: **Sorguları Ekle** (Append Queries). 412 satır.

M ifadelerini betikte aynı mantıkla sınadım, Power Query’de çalıştırmadım.

## Temizliği doğrulamak: satır sayısı ve toplam tutar

Temizlik ancak sonunda satır sayısı ve toplam tutar kaynak sistemin kendi toplamıyla tutuyorsa bitmiş sayılır.

| adım | satır |
| --- | --- |
| Ham sayfa | 473 |
| − başlık, boş satır, üst bilgi (2 + 26 + 2) | 443 |
| − ara toplam ve genel toplam (24 + 1) | 418 veri satırı |
| − mükerrer (4 ERP’de de var, 2 kopya) | **412** |

412 = ERP’nin bildirdiği 356 kayıt + depo listesindeki 56 tekil sevkiyat.

| kalem | tutar |
| --- | --- |
| ERP raporunun “Genel Toplam” satırı (356 kayıt) | 6.935.262,60 |
| + depo listesi, 62 satır, çevrilmiş tutarla | 1.511.632,70 |
| − 6 mükerrer satır | 115.403,00 |
| = temiz tablonun toplamı | **8.331.492,30** |

Temiz tablodaki 356 ERP satırının toplamı da Genel Toplam’a kuruşu kuruşuna eşit.

Ham sayfada `=TOPLA(H:H)` 21.429.325,70 gösterir, gerçeğin 2,57 katı. ERP tutarı üç katmanda sayılıyor: 356 satırın kendisi (6.935.262,60), 24 ara toplam (yine 6.935.262,60) ve Genel Toplam (bir kez daha 6.935.262,60). Üstüne depo listesinin sayı olarak duran 25 tutarı (623.537,90) eklenir; metin olan 37 tutar hiç girmez.

Toplam tutsa bile satır düzeyinde üç kontrol daha yapıyorum:

- **Tutar = miktar × birim fiyat:** `=EĞER(J5;YUVARLA(F5*G5;2)=S5;"")`. Doğru çevrimden sonra YANLIŞ çıkan satır yok; metin tutarları ayırıcıları ters okuyarak çevirseydiniz 37’nin 37’si takılırdı.
- **Dönem kontrolü:** Z1’e dönem başı, Z2’ye dönem sonu: `=EĞER(J5;VE(Q5>=$Z$1;Q5<=$Z$2);"")`. Doğru çevrimde dönem dışı satır yok; aa/gg satırları yanlış okunsaydı 19’u da burada çıkardı.
- **Eşleme kontrolü:** `=M5="EŞLEME YOK"`; yalnız veri satırlarında sayım `=ÇOKEĞERSAY(J5:J473;DOĞRU;M5:M473;"EŞLEME YOK")` 0 olmalı.

Şehir temizliğinin etkisi: ham sayfada tam “İstanbul” yazımıyla ve sayı olarak kayıtlı satırların toplamı 995.410,80 (mükerrerler dahil). Öteki dört yazımın sayı olarak duran 4 satırı 31.105,40, metin olan 4 İstanbul tutarı 48.945,90 ekliyor; 1 mükerrer satır 23.000,00 düşüyor. Gerçek İstanbul satışı 1.052.462,10. Excel’in ÇOKETOPLA ve Özet Tablo’da “istanbul” ile “İstanbul”u aynı sayıp saymadığını (büyük/küçük harf ve İ/i) denemedim; eşleme tablosu bu belirsizliği ortadan kaldırıyor.

## Temiz tablodan aylık rapor: Özet Tablo

Temizlik bittikten sonra müşteri, şehir ve ürün bazında aylık rapor tek bir Özet Tablo’dur. Power Query sonucunu Excel’e tablo olarak yükleyip Ekle > Özet Tablo (PivotTable) deyin. Formül yolunda kaynak J4:U473 aralığıdır; Microsoft her sütunda tek satırlık, boş olmayan bir başlık ve birleştirilmiş hücresiz veri istiyor, 4. satırdaki başlıklar bu yüzden şart ([Microsoft Destek](https://support.microsoft.com/en-us/office/create-a-pivottable-to-analyze-worksheet-data-a9a84538-bfe9-40a9-a8e9-f99134456576)). Filtrelere Veri mi (DOĞRU) ve Mükerrer’i (YANLIŞ), satırlara Cari Kodu, Şehir Temiz ya da Ürün Temiz’i, değerlere Tutar Temiz’i koyun. Aylık kırılım için Tarih Temiz’i satırlara alın, bir tarihe sağ tıklayıp Grupla > Aylar seçin ([Microsoft Destek](https://support.microsoft.com/en-us/office/group-or-ungroup-data-in-a-pivottable-c9d1ddd0-6580-47d1-82bc-c84a5a340725)). Microsoft’a göre Excel değer alanındaki veriyi metin sayarsa toplamak yerine sayar. Formül yolunda Tutar Temiz veri dışı satırlarda boş metin taşıdığı için alan “Say” olarak gelebilir; öyleyse Değer Alanı Ayarları’ndan Toplam’a çevirin. Aynı boş metin tarih gruplamasını da engelleyebilir; ikisini de denemedim. Power Query sonucunda bu satırlar yok.

## Her ay birden çok kişiyle tekrarlanıyorsa: sorunu kaynağında önlemek

Power Query temizliği her ay tekrarlar ama hatanın üretilmesini durdurmaz; iş birden çok kişiyle dönüyorsa kalıcı çözüm veriyi girildiği anda kurala bağlamaktır.

**Birincisi ERP’de.** 31 satırlık şehir hatası (15 “KOCAELİ”, 16 “Izmir”) iki cari kartından geliyor. Her ay Power Query’de düzeltmek yerine ERP’de bir kez düzeltin. Depo acil sevkiyatları ERP’ye doğrudan girebiliyorsa ayrı liste tutmayı bırakın.

**İkincisi depo listesi.** Excel’de kalacaksanız Veri Doğrulama koyun: şehir ve cari için açılır liste, tarih için tarih türü. Microsoft’a göre doğrulama mesajı veri kopyalanıp yapıştırıldığında ya da doldurulduğunda çıkmaz ([Microsoft Destek](https://support.microsoft.com/en-us/office/more-on-data-validation-f38dee73-9900-4ca6-9301-8a5f6e1f0c4c)); örnekteki bölünmez boşluklar tam da yapıştırılan satırlardan geldi.

Listeyi tek kişi tutuyor ve kimin neyi değiştirdiğini aramanız gerekmiyorsa yukarıdaki sorgu yeter, ayrı uygulama önermem. Birden çok kişi giriyorsa ihtiyaca göre kurulabilecek yol kurallı bir giriş ekranıdır: cari koddan seçilebilir, şehir carinin kartından gelebilir, aynı irsaliye ve ürünün ikinci kez girilmesi engellenebilir, roller ayrılıp değişiklikler iz kaydında tutulabilir. Yapay zekâ yalnız öneren bir yardımcı olarak eklenebilir; modele yalnız kullanıcının yetkili olduğu satırların gitmesi sağlanabilir. Ayrıntıları [kontrollü Excel aktarım ekranı](https://oguzerol.com/kontrollu-excel-aktarim-ekrani/) sayfasında anlattım. Otomasyon projelerinde en sık gördüğüm hata, ilk otomasyonu en karmaşık süreçten seçmek. Uygulama şirketiniz adına açılabilen bir sunucuda (VPS) çalışır, veri sizindir ve Excel ya da CSV olarak alınır, küçük ve orta ölçekli ekipte kullanıcı başına lisans yoktur (maliyet sunucu ve bakım), kaynak kod da çalıştırma talimatı, bağımlılık listesi ve bilinen sınırlarla erişiminizdeki depoda durur.

Son ayın ham dosyasını, kişi adlarını maskeleyerek [iletişim sayfasından](https://oguzerol.com/iletisim/) gönderin. İlk görüşmede satır ve tutar mutabakatınızın kaynak sistemin toplamıyla tutup tutmadığına birlikte bakarız. İlk görüşme ücretlidir.

## Sıkça Sorulan Sorular

### Excel 2016 ya da 2019 kullanıyorum, Mac’teyim; ne değişir?

Power Query Windows’ta Excel 2016 ve sonrasında var; Microsoft’a göre Mac için Excel 2016 ve 2019’da desteklenmiyor. ÇAPRAZARA Excel 2016 ve 2019’da yok ([Microsoft Destek, XLOOKUP](https://support.microsoft.com/en-us/office/xlookup-function-b7fd680e-6d10-43e6-84f9-88eae8bf5929)). Şehir sütununda yerine `=EĞER(J5;EĞERHATA(DÜŞEYARA(KIRP(B5);Eşleme!$A:$B;2;YANLIŞ);"EŞLEME YOK");"")` kullanın; dördüncü bağımsız değişkeni YANLIŞ yazmazsanız DÜŞEYARA varsayılan olarak yaklaşık eşleşme yapar ([Microsoft Destek, VLOOKUP](https://support.microsoft.com/en-us/office/vlookup-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1)).

### Aynı sütunda hem “1.250,00” hem “1,250.00” varsa ne yaparım?

Her satır için ayırıcıyı tahmin etmeyin. “1,250” tek başına bin iki yüz elli de olabilir, bir virgül iki beş de. Satırları kaynağa göre ayırın (hangi şube, hangi dosya) ve her kaynağı kendi ayırıcısıyla SAYIDEĞERİ’ne verin: `SAYIDEĞERİ(H5;",";".")` ya da `SAYIDEĞERİ(H5;".";",")`. Kaynağı belli olmayan satırları sorun; sonra tutar = miktar × birim fiyat kontrolüyle doğrulayın.

### Tabloyu bir yapay zekâ sohbetine yapıştırıp temizletebilir miyim?

İki ayrı soru var. Birincisi kişisel veri: cari listesinde şahıs şirketinin unvanı bir gerçek kişinin adıdır. Böyle bir tabloyu yurt dışında çalışan bir servise vermek KVKK’nın 9. maddesine girer (7499 sayılı Kanun md. 34 ile değişik, RG 12.03.2024/32487, yürürlük 1.6.2024); önce şirketinizin o servis için onayladığı hesap ve veri şartlarına bakın ya da adları maskeleyin. Hukuki görüş vermiyorum. İkincisi doğruluk: sohbetten dönen tabloya da yukarıdaki satır ve tutar mutabakatını uygulayın. Toplam tutmuyorsa nedenini bulmadan kullanmayın.

[Başa dön ↑](https://oguzerol.com/excel-veri-temizleme/#icerik)

## Bunları da okumak ister misiniz?

[Excel Otomasyonu: Hangi İş Formülle, Power Query'yle, Makroyla ya da Web Uygulamasıyla Çözülür?Tekrar eden Excel işini formül, Power Query, makro, Office Script ya da web uygulamasından hangisiyle çözersiniz? Dört soruluk karar tablosu ve örnek ay.](https://oguzerol.com/excel-otomasyonu/)[ChatGPT ile Excel: Formül Yazdırma, Hata Kontrolü ve AnalizChatGPT'ye Excel formülü yazdırırken istemi nasıl kurarsınız, ayırıcı ve boş hücre hatalarını nasıl yakalarsınız? Betikle doğrulanmış dört örnek.](https://oguzerol.com/chatgpt-ile-excel/)[İki Excel Listesini Karşılaştırma ve Eşleştirme: Anahtar, ÇAPRAZARA, Power Queryİki Excel listesini ÇAPRAZARA, EĞERSAY ve Power Query ile karşılaştırın: anahtar temizliği, mükerrer kayıt ve bulanık eşleşme. 233 satırlık örnekle görün.](https://oguzerol.com/iki-excel-listesini-karsilastirma/)

[Tüm yazılara göz atın →](https://oguzerol.com/yazilarim/)
