Farklı rakam adedini veren formül?

Katılım
3 Aralık 2007
Mesajlar
5
Excel Vers. ve Dili
2007 - Türkçe
Merhaba,
Bir hücreye girilen bir sayının içerdiği farklı rakam adedini veren bir formül var mı?

Örneğin:
82822 => 2 (2 adet farklı rakam var: 8 ve 2)
717217 => 3 (3 adet farklı rakam var: 7, 1 ve 2)

Şimdiden Teşekkürler.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar,

Bunu Kullanıcı Tanımlı Fonksiyon'la (KTF/UDF) yazarak çözebilirsiniz.

Not: Ek olarak, bu sayıların ne olduğunu da fonksiyonla bulabilirsiniz.

Şöyle ki;

Kod:
Public Function Farkli_Say_Adet(hucre As Range)
Dim arrVeri()
Dim i%, j%, x%, y%
If hucre <> Empty Then
   For i = 1 To Len(hucre)
       If IsNumeric(Mid(hucre, i, 1)) Then
          On Error Resume Next
          If UBound(arrVeri) = Empty Then
             ReDim Preserve arrVeri(1)
             arrVeri(0) = Mid(hucre, i, 1)
          Else
             For j = 0 To UBound(arrVeri)
                 If Mid(hucre, i, 1) = arrVeri(j) Then: x = x + 1
             Next j
             If x = 0 Then
                y = y + 1
                ReDim Preserve arrVeri(y)
                arrVeri(y) = Mid(hucre, i, 1)
             End If
             x = 0
          End If
       End If
   Next i
End If
Farkli_Say_Adet = UBound(arrVeri) + 1
Erase arrVeri
End Function
 
Katılım
3 Aralık 2007
Mesajlar
5
Excel Vers. ve Dili
2007 - Türkçe
Çok teşekkürler, harika olmuş.

İşin içine formül yerine fonksiyon girince excel bilgim yeterli olmadı.
Excel dosyayı göndermeniz çok iyi olmuş, sağolun.

Ancak, son bir şey daha isteyeceğim eğer vaktiniz varsa:

Hücredeki sayının içerdiği farklı sayıların adetlerini hücrelere yan yana yazdırmam gerekiyor.

Örneğin 99977 sayısında 3 adet dokuz ve 2 adet yedi var: Bu sayının bulunduğu hücrenin sağına 3, onun sağındaki hücreye de 2 yazdırmam gerekiyor.

Aşağıda bir çok örneğe yer verilmiştir:


99977-> 3 2
88833-> 3 2
99966-> 3 2
881-> 2 1
55454-> 3 2
911-> 2 1
88822-> 3 2
66644-> 3 2
77755-> 3 2
933-> 2 1
97766-> 2 2 1
211-> 2 1
87766-> 2 2 1
22-> 2
55544-> 3 2
33311-> 3 2
54433-> 2 2 1
11-> 2
42222-> 4 1

Dediğim gibi, fonksiyon konusunda hiç bir bilgim yok.
Yardımınızı rica ediyorum.

Emekleriniz için şimdiden teşekkürler.
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
O zaman aşağıdaki gibi bir kod geliştiririz.

NOT : Formül isimleri birbirine çok benzer oldu ama, kodlardaki tanımları düzelterek daha mantıklı isimler verebilirsiniz.

Kod:
Public Function Farkli_Sayi_Adedi(hucre As Range, eleman As Integer)
Dim arrVeri()
Dim i%, j%, x%, y%
y = 1
If hucre <> Empty Then
   For i = 1 To Len(hucre)
       If IsNumeric(Mid(hucre, i, 1)) Then
          On Error Resume Next
          If UBound(arrVeri) = Empty Then
             ReDim Preserve arrVeri(1 To 1)
             arrVeri(1) = Mid(hucre, i, 1)
          Else
             For j = 1 To UBound(arrVeri)
                 If Mid(hucre, i, 1) = arrVeri(j) Then: x = x + 1
             Next j
             If x = 0 Then
                y = y + 1
                ReDim Preserve arrVeri(1 To y)
                arrVeri(y) = Mid(hucre, i, 1)
             End If
             x = 0
          End If
       End If
   Next i
End If
If eleman > UBound(arrVeri) Then
   Farkli_Sayi_Adedi = "#ELEMAN HATASI#"
Else
   For i = 1 To Len(hucre)
       If Mid(hucre, i, 1) = arrVeri(eleman) Then: x = x + 1
   Next i
   Farkli_Sayi_Adedi = x
End If
Erase arrVeri
End Function
 
Son düzenleme:
Katılım
3 Aralık 2007
Mesajlar
5
Excel Vers. ve Dili
2007 - Türkçe
Harika.
Çok teşekkür ederim.

sadece bir yerde sorun var:

Diyelimki sayımız 111 -> Bunu 3 0 olarak yazıyor. Oysa ssadece 3 yazmalı.
Bunun dışında kusursuz çalışıyor.
bu sorunu nasıl hallederiz?
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Hakl&#305;s&#305;n&#305;z, bu k&#305;sm&#305; atlam&#305;&#351;&#305;z. 4 Nolu mesajdaki kodlar&#305; ve dosyay&#305; revize ettim. &#304;nceleyiniz.
 
Katılım
3 Aralık 2007
Mesajlar
5
Excel Vers. ve Dili
2007 - Türkçe
çok teşekkürler.
Sayenizde tüm problemlerimi hallettim.

sağolun.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
İşin içine formül yerine fonksiyon girince excel bilgim yeterli olmadı.
Ancak, son bir şey daha isteyeceğim eğer vaktiniz varsa:

Hücredeki sayının içerdiği farklı sayıların adetlerini hücrelere yan yana yazdırmam gerekiyor.

Örneğin 99977 sayısında 3 adet dokuz ve 2 adet yedi var: Bu sayının bulunduğu hücrenin sağına 3, onun sağındaki hücreye de 2 yazdırmam gerekiyor.

Dediğim gibi, fonksiyon konusunda hiç bir bilgim yok.
Yardımınızı rica ediyorum.

Emekleriniz için şimdiden teşekkürler.

Fonksiyon başlığına açtığınız için fonksiyonluda örnek vereyim istedim.


A sütununa veri girdiğinizde sarı alanda hücre içinde o sayıdan kaç adet geçtiğini bulabilirsiniz.

Örneğiniz ektedir.
 
Katılım
3 Aralık 2007
Mesajlar
5
Excel Vers. ve Dili
2007 - Türkçe
Çok teşekkürler Ali Bey.
 
Üst