• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Harfin Yerini bul

Katılım
26 Ocak 2007
Mesajlar
4,625
Excel Vers. ve Dili
Ofis 2016
Merhaba arkadaşlar. Ekteki örnek dosyada detaylı olarak belirttim. Bir harfin bir metin içinde bulunduğu en son noktanın soldan sağa sırası nedir ?
 

Ekli dosyalar

Merhaba,

Dizi Formüldür, Formülü yazdıktan sonra Ctrl+Shift+Enter ile formülü bitirmelisiniz.

C2

=MAK((PARÇAAL(A2;SATIR(DOLAYLI("1:"&UZUNLUK(A2)));1)=B2)*SATIR(DOLAYLI("1:"&UZUNLUK(A2))))
 
Çok teşekkür ederim Sayın Necdet Yeşertener. Allah sizden razı olsun.
 
Merhaba,

Dizi Formüldür, Formülü yazdıktan sonra Ctrl+Shift+Enter ile formülü bitirmelisiniz.

C2

=MAK((PARÇAAL(A2;SATIR(DOLAYLI("1:"&UZUNLUK(A2)));1)=B2)*SATIR(DOLAYLI("1:"&UZUNLUK(A2))))

hocam elinize sağlık çalışıyor.
bu formüllerin hepsinin ne işe yardığını biliyorum fakat siz öyle bir yazmışsınız ki kafam karıştı. rica etsem bu formülü detaylı bir şekilde açıklar mısınız ?

Kod:
=PARÇAAL(A2;SATIR(DOLAYLI("1:"&UZUNLUK(A2)));1)=B2
sonuç DOĞRU olarak görüntüleniyor

Kod:
SATIR(DOLAYLI("1:"&UZUNLUK(A2)))
sonuç 1 olarak görüntüleniyor. mak formülü içinde * işlemi yapınca 5 veriyor

dizi formülü olunca 5, dizi olmayınca 1 veriyor. bununda mantığını açıklayabilir misiniz acaba?

teşekürlerimle
 
Merhaba,

Dizi formüllerini bu şekilde değerlendirirseniz yanılgıya düşersiniz. Formüllerin algoritmasını görmek için "formül değerlendir" menüsünü kullanmanızı tavsiye ederim.

=MAK((PARÇAAL(A2;SATIR(DOLAYLI("1:"&UZUNLUK(A2))); 1)=B2)*SATIR(DOLAYLI("1:"&UZUNLUK(A2))))

A2 deki veri excel olsun.
Formüldeki kırmızı alan A2 hücresindeki veriyi tek tek dizi ye alır.

{"e"\"x"\"c"\"e"\"l"} gibi. Bu değeri = B2 ile B2 deki değer ile karşılaştırırz. B2 deki değerin "e" olduğunu varsayarsak.

{"e"\"x"\"c"\"e"\"l"}="e" Bu dizide e olan değerler DOĞRU, diğerleri YANLIŞ olarak değerlendirilir.

{DOĞRU\YANLIŞ\YANLIŞ\DOĞRU\YANLIŞ} gibi. Oluşan bu dizede bize en sondaki DOĞRU nun harf karşılığı gerektiği için, mak fonksiyonundaki diğer işleme geçeriz. (Anlatımı mavi alandan sonra)
-------------------------------------------------------------------------

Mavi alandaki formül A2 deki veri uzunluğu kadar dizi oluşturmak için yazıldı. Bu diziyi oluşturmak için de satır fonksiyonu kullanıldı.

A2 de excel vardı. Uzunluk değeri 5 dir.

satır(dolaylı("1:"&5)) ... satır(dolaylı("1:5")) ... satır("1:5") ... ile

{1\2\3\4\5} şeklini alır.
-------------------------------------------------------------------------

Kırmızı alanla mavi alandaki formülün oluşturduğu dizileri birleştirelim.

=mak({DOĞRU\YANLIŞ\YANLIŞ\DOĞRU\YANLIŞ}*{1\2\3\4\5})

Neden bu işlemi yapıyoruz. Çünkü ilk dizide bize son doğru olan değerin dizi sonucu gerekliydi. Bu son değeri bulmak için küçükten başlayıp artarak ilerleyen sayı dizisi ile çarparızki bu oluşan dizi de mak ile büyük rakamı alır.

İşleme girdikten sonra, Doğru değeri dizide 1, yanlış ise 0 sonucu döndürür.

İki dizi çarpılanca,

=mak({1\0\0\4\0}) Dizisi oluşur. Mak fonksiyonu da bu dizideki en büyük değer olan 4 değerini bize verir ve amaçımız olan değere ulaşmış oluruz.

Kısaca açıklaması bu şekildedir. Anlamadığınız bölümler olursa belirtin, o kısmı biraz daha açarım.

Not: Hızlı yazımdan dolayı, yazım hatası ve anlatım bozukluğu varsa kusuruma bakmayın.
 
sn. Ömer hocam anlatımınız için teşekkür ederim.
şu formül
Kod:
PARÇAAL(A2;SATIR(DOLAYLI("1:"&UZUNLUK(A2))
normalde bir veriyor. 1:5 aralığı için satır() fonksiyonundaki en küçük değeri veriyor(1). dizi olunca 1.harf, 2.harf, 3.harf şeklinde aldı

sanırım kelimeyi bir defada harf harf kodlaması için dizi formülüne gerek duyuldu. normalde parçaal fonksiyonu başlangıç noktasından bitiş noktasına kadar kelimeyi alıyor. burda harf harf alıyor.

hiç dizi formülü yapmadığımdan biraz yabancıyım bu konuya.

dizi formülünü biraz daha anlamama yardımcı oldunuz teşekürler :)
 
Merhaba,

Ömer bey gayet güzel açıklamış. Ayrıca Sayın senkron2010'un önerdiği formül de kullanılır.
 
Merhabalar

Bu formülü KTF olarak yapabilir miyiz?
 
Merhabalar

Bu formülü KTF olarak yapabilir miyiz?

Merhaba,

Tip parametresini 0 ya da yazmazsanız (seçeneklidir) Büyük/Küçük Harf duyarlı değildir, 1 değerinde ise duyarlıdır.


Kod:
Function SonHarf(Hucre As Range, Aranan As String, Optional Tip As Integer)
    
    Dim i   As Integer, _
        Drm As Boolean, _
        s   As String
        
    If Tip = 1 Then Aranan = UCase(Replace(Replace(Aranan, "i", "İ"), "ı", "I"))
    Do
        i = i + 1
        s = Mid(StrReverse(Hucre), i, 1)
        If Tip = 1 Then s = UCase(Replace(Replace(Aranan, "i", "İ"), "ı", "I"))
        If s = Aranan Then Drm = True
        
    Loop Until Drm = True Or i = Len(Hucre)
    
    If Drm = True Then
        SonHarf = Len(Hucre) - i + 1
    Else
        SonHarf = "Aranan Harf Yok"
    End If
    
End Function
 
Necdet hocam ilginiz için teşekkürler

Ancak sizin kod hatalı çalışıyor.
 

Ekli dosyalar

Aşağıdaki ktf'yi deneyin. KTF içindeki hucre; verinin bulunduğu hücreyi, aranan; aranacak harfi ve duyarlilik ise büyük-küçük harf ayrımını gösterir. Eğer ayrım istenirse 0, istenmezse 1 yazılmalıdır.

Kod:
Function sonharfibul(hucre As Range, aranan As String, duyarlilik As Integer)
fonksiyon = Array("FIND", "SEARCH")
kontrol = IsError(Evaluate(fonksiyon(duyarlilik) & "(" & """" & aranan & """,""" & hucre & """,1)"))
If kontrol = False Then
sonharfibul = Len(hucre) - Evaluate(fonksiyon(duyarlilik) & "(" & """" & aranan & """,""" & StrReverse(hucre) & """,1)") + 1
Else
sonharfibul = 0
End If
End Function
 
Levent bey cevap için teşekkürler,
Konuyu sadece beyin cimnastiği olsun diye devam ettirdim.Bu konu ileride mutlaka birilerine lazım olur diye düşünmüştüm.
Ancak sizin ktf de hatalı değer döndürüyor.

Yanlış anlaşılma olmasın diye konuyu takip edenlere hatırlatmak istiyorum.
Bir metin içinde aranan harfin soldan sağa en son yerini veren ktf oluşturmaya çalışıyoruz, değil mi?

Mesela
büyük küçük duyarlılık yokken
aslanadam
aslanAdam
aslanadAm

büyük küçük duyarlılık varken
aslanadam----a için
aslanadAm----a için
aslAnadam----A için
AslanadAm----A için
 

Ekli dosyalar

Son düzenleme:
Benim yazdığım fonksiyonun doğru işlemi yapması lazım. Dosyanızdaki fonksiyon adındaki "1" rakamını kaldırın ve sonharfibul şeklinde isimlendirin.
 
Levent bey sizin kodlar doğru çalışıyor.

Hata benden kaynaklanmış, dosyayı düzelterek tekrar yükledim.
 
Necdet hocam ilginiz için teşekkürler

Ancak sizin kod hatalı çalışıyor.

Merhaba,

opsiyon 1 iken yani büyük/küçük harf duyarlı iken hem aranan hemde bakılan değerleri büyük harfe çevirerek kontrol ediyor.

Opsiyon 0 iken bu iki değeri de kontrol etmediğinden siz hatalı diyorsunuz.

Yanlış yorumluyorsunuz.
 
Merhaba,

Alternatif olarak aşağıdaki kulanıcı tanımlı fonksiyonuda kullanabilirsiniz.

Kod:
Function HARF_BUL(Veri As Range, Aranan_Harf As Variant, Optional Kriter As Byte = 0)
    Dim X As Long, Data As String
 
    Application.Volatile True
 
    Select Case Kriter
        Case 0
            Data = UCase(Replace(Replace(Veri.Text, "ı", "I"), "i", "İ"))
            Aranan_Harf = UCase(Replace(Replace(Aranan_Harf, "ı", "I"), "i", "İ"))
        Case 1
            Data = Veri.Text
    End Select
 
    For X = Len(Data) To 1 Step -1
        If Mid(Data, X, 1) = Aranan_Harf Then
            HARF_BUL = X
            Exit For
        End If
    Next
End Function

Örnek dosyada kullanım şekilleri gösterilmiştir.

0 parametresi ile büyük-küçük harf duyarsız hesaplama yapabilirsiniz. (Varsayılan bu tanımlanmıştır. Sıfır yerine birşey yazmasanızda fonksiyon yazılmış gibi hesaplama yapar.)
1 parametresi ile büyük-küçük harf duyarlı hesaplama yapabilirsiniz.
 

Ekli dosyalar

Geri
Üst