Epey uğraştığım çözümü detaylı anlatmaya çalışırsam.....
çözüme ulaştığım formül şöyle...
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(1 satır)
Sırasıyla yazmaya çalışırsam
**
PARÇAAL(KÜÇÜKHARF(alan);SIRALI(;MAK(UZUNLUK(alan)));1)
formülü ile, B4 : B8 aralığındaki tüm metinlerin (Harfler Küçük Harf olarak) bir - bir karakterlerini yazdırıyoruz. (Burada her bir hücrenin karakter uzunluğundan ziyade, maksimum uzunluk kullanıldı.
Sonuçta elde edilen...
***
ÖZDEŞ(KÜÇÜKHARF("x");BÜYÜKHARF("x")) formülü ile
Harf, küçük ve büyük harf değerleri arasında farklı değerlere sahip bir karakter olduğundan, örneğin "x" harfini ele alırsak ve =ÖZDEŞ(
KÜÇÜKHARF("x");
BÜYÜKHARF("x")) formülünü yazarsak, bu bize sonuç olarak
YANLIŞ değeri üretiyor.
DOĞRU değeri üretiyorsa eğer, bu bir Harf olmayıp, ya RAKAM ya da diğer karakterlerdir.
Şimdi, Bu işlemi
DEĞİL işlevine sararsak
DEĞİL(ÖZDEŞ(
KÜÇÜKHARF("x");
BÜYÜKHARF("x"))) bu bize
DOĞRU değerini döndürecek ve Harfleri bulmamızı sağlayacak.
O zaman, Rakamları da
ESAYIYSA işlevi ile bulabildiğimiz için, soruda da Rakam ve harfler istendiğinden,
PARÇAAL işleviyle elde edilen diziyi,
MAP - LAMBDA ile, (Sayı olacak şekilde), 1 ve 0 elde edecek şekilde yazıyoruz.
--MAP(a;LAMBDA(x;YADA(ESAYIYSA(--x);EĞERHATA(ONDALIK(x;36)<16;0)*DEĞİL(ÖZDEŞ(KÜÇÜKHARF(x);BÜYÜKHARF(x))))))
ESAYIYSA ile Rakam olup olmadığının kontrolü yapılıyor.
DEĞİL(ÖZDEŞ(KÜÇÜKHARF(x);BÜYÜKHARF(x))) ile Harf olup olmadığının kontrolü yapılıyor.
EĞERHATA(ONDALIK(x;36)<16;0) ile Harflerin Base36 olarak 36 tabanında a=10, b=11.... f=15 e karşılık geldiğinden (ya da Hexadecimal sistemde, 16 tabanında, F=15 olmakta) harflerin a, b, c, d, e, f olanlarını alıp, diğerlerini almama koşulunun kontrolü yapılıyor. Ve dizi oluşturuluyor.
Bu elde edilen dizide, 1 ler koşulu sağlayanlar ve 0 lar ise koşula uymayanlar olmakta.
***
BYROW(EĞER(b;a;"");LAMBDA(s;ARALIKBİRLEŞTİR(s)))
Elde edilen dizide, 1 olanlara Metinlerdeki Harf ya da Rakam karşılıkları ve 0 olanlara da "" değeri yazdırılıp, bu değerler
ARALIKBİRLEŞTİR işlevi ile birleştiriliyor. Harf ve Rakamlardan oluşan dizi elde ediliyor.
***
REDUCE(z;PARÇAAL("0123456789";SIRALI(10);1);LAMBDA(x;y;YERİNEKOY(x;y;"*")))
formülü ile de, elde edilen dizideki her bir rakamın yerine "*" işareti konuluyor... Ve üst resimdeki sonuç elde ediliyor.