1. Amaç
Bu yazımda Excel’de iki listeyi nasıl tek bir liste olarak birleştirebileceğinizden bahsedeceğim. Bunun için Excel’e eklenen yeni bir işlevi kullanacağız.
Elimde oldukça basit bir liste var, Excel şablonlarından bir tanesini kullanarak bir dosya hazırladım. Buradan dosyayı indirebilirsiniz.
2. Uygulama
Bu uygulama için bir tür döngü kullanmamız lazım. Elimde iki liste var, bu iki listenin toplam satır sayısı n diyelim. n değeri ilk listenin toplam satırından düşük iken İNDİS işlevi ile ilk listenin n. elemanını çekmem lazım. n değeri ilk listenin toplam satır sayısından büyük olduğunda ise yine İNDİS kullanarak 2. listeden eleman çekmem lazım. Ancak buradaki satır numarası, n değerinden ilk listenin satır sayısını düşerek elde etmem gerek.
Biraz karışık gibi gelebilir. Ancak adım adım ilerleyerek bu mantığı biraz açalım.
a. Toplam Döngü Sayısını Bulma
Elimizde 2 tane farklı liste ve bu listelerin ikisinin de farklı sayıda satırı var. Bu iki listenin toplam satır sayısı birleştirdiğim listedeki toplam satır sayısını verecek. Bunu SATIRSAY illevi ile yapabiliriz:
=SATIRSAY(Liste1)+SATIRSAY(Liste2)
Bu işlemde satır satır tüm değerleri dikkate almak istediğimde bana 1 ile bulduğum sayıya kadar giden bir sayı dizisi lazım. Bunu da SIRALI işlevi ile yapabilirim:
=SIRALI(SATIRSAY(Liste1)+SATIRSAY(Liste2))
Artık elimde 1 ile toplam satır sayısına kadar ilerleyen bir rakam dizisi var. Bu bir tür VBA döngüsünde olduğu gibi sıralı ilerleyen bir adımlama işleminde kullanacağız. Yani bu değer her adımda bir artarak en son toplam satır sayısına ulaşacak.
b. Hangi Listeden Eleman Çekileceğinin Bulunması
Bu aşamada yazdığım formülleri Excel’e aktarmayacağım, açıklama olarak yazıyorum. Yapmak istediğim hangi listeden eleman çekeceğimi belirleyeceğim. Buradaki kıstasım da bir önceki adımda SIRALI işlevi ile bulduğum sayı dizisi. Bu sayı dizisinde adım adım ilerlediğimizde, rakam eğer ilk listenin toplam satır sayısından küçük veya eşit ise ilk listeden, büyük ise ikinci listeden eleman çeksin.
Bunu formüle dökmek için öncelikle daha kolay yazım adına bir varsayımda bulunacağım. Bir önceki adımda bulduğum SIRALI listeye S diyelim. VBA değişken ataması gibi:
S=SIRALI(SATIRSAY(Liste1)+SATIRSAY(Liste2))
Sonrasında bu değerin ilk listenin toplam satır sayısından küçük olması şartını yazalım. Şart olan yerde EĞER işlevi devreye girer. Eğer S değeri ilk listenin toplam satır sayısından düşük ise o sıradaki elemanı çeksin. Çekme işlemini İNDİS ile yapacağız:
=EĞER(S<=SATIRSAY(Liste1);İNDİS(Liste1;S;);…)
Şimdi de S değerinin 1. listedeki satır sayısından büyük olması şartını yazalım. Bu sefer ikinici listeden eleman çekeceğim. İkinci listenin ilk elamanından başlamam lazım ancak S değeri artık ilk listenin toplam satır sayısından büyük. Bu durumda çekeceğim elemanın sırasını bulmak için S değerinden ilk listenin toplam satır sayısını çıkarmam lazım:
=S-SATIRSAY(Liste1)
Hangi sıradaki elemanı çekeceğimizi bulduk. Şimdi bunu indis ile birleştirelim:
=İNDİS(Liste2;S-SATIRSAY(Liste1);)
Son bir adım kaldı. Bu formülü EĞER formülü ile birleştirmek:
=EĞER(S<=SATIRSAY(Liste1);İNDİS(Liste1;S;);İNDİS(Liste2;S-SATIRSAY(Liste1);))
c. Döngünün Kurulması
Excel 365 ve 2022’de gelen LET işlevi ile kendi işlevlerimizi yazabiliyoruz. Bu işlev için bir veya birden fazle değişken ve bir tane işlev tanımlayabiliyoruz. Bir önceki adımlarda değişkenimizi tanımlamıştık. Değişkenimiz S, idi. İşlevimiz de EĞER formülü ile tanımlamıştık. Şimdi bunları bir LET işlevi ile birleştireceğiz:
=LET(S;SIRALI(SATIRSAY(Liste1)+SATIRSAY(Liste2)); EĞER(S<=SATIRSAY(Liste1);İNDİS(Liste1;S;); İNDİS(Liste2;S-SATIRSAY(Liste1);)))
Artık iki listemizi birleştirerek tek bir liste elde etmiş olduk.
Not: