• Bir süredir maillerde yaşanan sorunlar giderilmiştir. Şifremi unuttum yaparak şifrelerinizi mailinizden alabilirsiniz.

  • Foruma hoş geldin 👋 Ziyaretçi

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Çözüldü Yinelenen değerleri saymak

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

tirimini

Yeni Üye
Kullanıcı Bilgileri
Aktiflik
Çevrimdışı
Katılım
14 Eki 2021
Mesajlar
15
Aldığı beğeni
14
Excel V
Office 2016 TR
Konuyu Başlatan
Herkese merhaba
Bir sorum olacaktı yardımcı olabilirseniz sevinirim.Aşağıda da göreceğiniz üzere A kolonunda yer alan box numaralarından yinelenen değerler varsa kaç tane olduğunu saymasını istiyorum.Kullandığım formul ise =COUNTIF(A:A;A2) dir.
Yalnız Box no kolonunda yer alan numaraların formatından mı kaynaklanıyor bilemiyorum ama nedense formul doğru çalışmıyor.
Eğer A kolonunda yer alan değerleri "convert to number" yaparsam bu sefer de box numaraları çok değişik bir değerler alıyor.Aşağıda ekran görüntüsünü görebilirsiniz.
Rica etsem konu hakkında yardımcı olabilirmisiniz.Gösterecek olduğunuz destek için şimdiden çok teşekkür ederim.
Saygılar

1641569231705.png
 

Ekli dosyalar

  • Box no.xlsx
    11.2 KB · Gösterim: 6
Çözüm
Ekleme yaparsam
Dinamik alan için
OFFSET
işlevini kullandım. INDEX işlevi ile de yapılabilir...
Alan = Sheet1!$A$2:INDEX(Sheet1!$A:$A;k+ROW(Sheet1!$A$2)-1)

INDEX işlevinin avantajı, OFFSET işlevi gibi Volatile (Oynak, uçucu) olmayışıdır. Yani, volatile demek, herhangi bir hücrede değişiklik yapıldığında , veri girildiğinde, veri silindiğinde... vs sayfa yeni baştan hesaplanacaktır. demektir. Bu da performans kaybıdır. Ancak yine de tercih meselesidir...
Selamlar,
Excel'de sayıların saklanmasındaki limit 15 basamaktır.
A kolonunda bulunanlar da, zaten sol üst köşedeki üçgenlerden de (HATA) anlaşılacağı üzere, SAYI görünümlü METİN ya da önlerine kesme işareti konularak METİN şekli verilmiş SAYI hatası verecektir. Bunların bulunduğu hücreye giriş yapıldığında SAYI biçimini alacak ve öngörülen SAYI biçiminde yazılacaktır. Zira, A kolonunda bulunanlar 18 basamaklıdır.

15 basamaktan fazla olanlar için, "convert to number" yapıldığında SOLDAN ilk 15. basamağa kadar Normal rakamlar yazılacak, 16. basamaktan itibaren de 0 rakamı yazılacaktır.

EĞERSAY (COUNTIF) işlemi yapıldığında da, 15 basamağa kadar Normal, 15 den sonrakiler için ise 0 şeklinde değerlendirilecektir.
C kolonunda 2 yazanlara dikkat ederseniz, bunların soldan ilk 15 basamaktaki rakamları AYNI dır. Son 3 basamakları FARKLI olup birisinde 465 ve diğerinde 960 dır. Ancak, 15 basamak limitinden dolayı gerek 465 ve gerekse 960 rakamları yerine 000 geleceğinden, bu 2 Box No birbirleriyle EŞİT (AYNI) olarak sayılacaklardır ve de bu nedenle sayım sonucu 2 olmaktadır.

Bu durumda COUNTIF işlevi uygun olmamaktadır.
Onun yerine SUMPRODUCT işlevi kullanabilirsiniz....

Ancak belirtmekte yarar var ki, SUMPRODUCT işlevi DİZİ Formül mantığında çalışır. O nedenle COUNTIF(A:A;A2) de olduğu gibi A:A yazıp, KOMPLE A kolonunda işlem yaptırmaktan kaçınmak gereklidir. Çünkü hesaplamalarda yavaşlamalara neden olabilecektir.
Ya uygun bir aralık seçilmeli ya da dinamik alan tanımlanıp kullanılmalıdır.

Örneğin kullanılabilecek formül,

=SUMPRODUCT(--($A$2:$A$2000=A2))

şeklinde olabilir...
Ama, =SUMPRODUCT(--($A:$A=A2)) şeklindeki kullanımdan kaçınılmalıdır... yine de tercih meselesi dir.
 
Selamlar,
Excel'de sayıların saklanmasındaki limit 15 basamaktır.
A kolonunda bulunanlar da, zaten sol üst köşedeki üçgenlerden de (HATA) anlaşılacağı üzere, SAYI görünümlü METİN ya da önlerine kesme işareti konularak METİN şekli verilmiş SAYI hatası verecektir. Bunların bulunduğu hücreye giriş yapıldığında SAYI biçimini alacak ve öngörülen SAYI biçiminde yazılacaktır. Zira, A kolonunda bulunanlar 18 basamaklıdır.

15 basamaktan fazla olanlar için, "convert to number" yapıldığında SOLDAN ilk 15. basamağa kadar Normal rakamlar yazılacak, 16. basamaktan itibaren de 0 rakamı yazılacaktır.

EĞERSAY (COUNTIF) işlemi yapıldığında da, 15 basamağa kadar Normal, 15 den sonrakiler için ise 0 şeklinde değerlendirilecektir.
C kolonunda 2 yazanlara dikkat ederseniz, bunların soldan ilk 15 basamaktaki rakamları AYNI dır. Son 3 basamakları FARKLI olup birisinde 465 ve diğerinde 960 dır. Ancak, 15 basamak limitinden dolayı gerek 465 ve gerekse 960 rakamları yerine 000 geleceğinden, bu 2 Box No birbirleriyle EŞİT (AYNI) olarak sayılacaklardır ve de bu nedenle sayım sonucu 2 olmaktadır.

Bu durumda COUNTIF işlevi uygun olmamaktadır.
Onun yerine SUMPRODUCT işlevi kullanabilirsiniz....

Ancak belirtmekte yarar var ki, SUMPRODUCT işlevi DİZİ Formül mantığında çalışır. O nedenle COUNTIF(A:A;A2) de olduğu gibi A:A yazıp, KOMPLE A kolonunda işlem yaptırmaktan kaçınmak gereklidir. Çünkü hesaplamalarda yavaşlamalara neden olabilecektir.
Ya uygun bir aralık seçilmeli ya da dinamik alan tanımlanıp kullanılmalıdır.

Örneğin kullanılabilecek formül,

=SUMPRODUCT(--($A$2:$A$2000=A2))

şeklinde olabilir...
Ama, =SUMPRODUCT(--($A:$A=A2)) şeklindeki kullanımdan kaçınılmalıdır... yine de tercih meselesi dir.
Hocam Merhaba;
Detaylı açıklamnız ve çözümünüz içn çok çok teşekkür ederim.Önerdiğiniz Formulu uygun bir aralık seçerek yaptığımda problemi çözmüş oldum.
Bu arada "dinamik alan tanımlaması" nedir rica etsem bunun hakkında bilgi vermeniz mümkün mü?
Teşekkürler
Hayırlı akşamlar
 
Dinamik Alan : Başlangıç hücresinden, son DOLU satırdaki hücreye kadarki alan olarak tanımlanabilir.
Avantajları
--- Formüllerde kullanıldığında gereksiz hücre (fazladan hesaplanan hücre aralığı) aralıkları hesaplanmaya dahil edilmez ve performanslı hesaplama sağlanır.
--- Satır ekleme ve çıkarmalarda (Başlangıç hücresinin bulunduğu satır HARİÇ olmak üzere) dinamik alan otomatik olarak hesaplanır. Formüllerde kullanılan Hücre aralıkları değiştirilmek zorundayken, dinamik alanlarda değişikliğe gerek kalmaz.

Dinamik Alan için Ad Tanımlamaları yapılmalı... Ad Tanımlamaları için Bak. Formüller >>> Ad yöneticisi (Formulas >>> Name Manager)
1 - Son DOLU hücreye göre Liste satır adedi hesaplanmalı...
Bunun için çeşitli formüller mevcut. Örneğin,
=LOOKUP(2;1/(Sheet1!$A$2:$A$10000<>"");ROW(Sheet1!$A$2:$A$10000))-ROW(Sheet1!$A$2)+1
ya da
=MATCH(2;1/(Sheet1!$A$2:$A$10000<>""))

MATCH formülü DİZİ formüldür. LOOKUP ise standart Normal formüldür (ama DİZİ formül mantığında çalışır)
Fazla miktarda satır içeren listelerde kullanılması yavaşlamalara neden olabilir.

Ben genelde, eklenen dosyada olduğu gibi
=MAX(IFERROR(MATCH(9^99;Sheet1!$A$2:$A$1000000);1);IFERROR(MATCH("zzzz";Sheet1!$A$2:$A$1000000);1))
formülünü tercih ediyorum...
Burada
MATCH(9^99;Sheet1!$A$2:$A$1000000) : formülüyle Sheet1!$A$2:$A$1000000 aralığında SAYI olanların en sonuncusunun (9^99 ile en sonuncusuna bakılıyor) kaçıncı olduğu bulunmakta... Eğer listede SAYI Yok ise HATA verecektir. O nedenle de IFERROR ile 1 hesaplanır.
MATCH("zzzz";Sheet1!$A$2:$A$1000000) : formülüyle Sheet1!$A$2:$A$1000000 aralığında METİN olanların en sonuncusunun (zzzz ile en sonuncusuna bakılıyor) kaçıncı olduğu bulunmakta... Eğer listede METİNI Yok ise HATA verecektir. O nedenle de IFERROR ile 1 hesaplanır.

Örnek dosyada bu son DOLU satır adedi k ad tanımlamasıyla yapıldı.

2 - Dinamik Alan bu k ad tanımlamasıyla beraber yapılabilir artık.
Örnek dosyada Alan ad tanımlamasıyla yapıldı.
=OFFSET(Sheet1!$A$2;;;k;1)
Başlangıç hücresi : Sheet1!$A$2
Satır adedi : k
Sütun Adedi 1
Yani örneğinizde dinamik alanı bulacaksak
k = 7 (A2 den itibaren son dolu hücre olan A8 hücresine kadar 7 adet satır)

Dinamik Alan = Alan =Sheet1!$A$2:$A$8
olacaktır.

Şimdi bu tanımlamayı formülde kullanırsak
=SUMPRODUCT(--(Alan=A2))

Önceki mesajda uygun aralık olarak Sheet1!$A$2:$A$2000 vermiştik... burada ise Sheet1!$A$2:$A$8..... Yani uygun aralıkta fazladan 1992 hücre için hesaplama yapılmakta... Dinamik alan performanslı olacaktır.

Anlatabilmişimdir diye umuyorum....
 

Ekli dosyalar

  • Box no.xlsx
    11.7 KB · Gösterim: 11
Ekleme yaparsam
Dinamik alan için
OFFSET
işlevini kullandım. INDEX işlevi ile de yapılabilir...
Alan = Sheet1!$A$2:INDEX(Sheet1!$A:$A;k+ROW(Sheet1!$A$2)-1)

INDEX işlevinin avantajı, OFFSET işlevi gibi Volatile (Oynak, uçucu) olmayışıdır. Yani, volatile demek, herhangi bir hücrede değişiklik yapıldığında , veri girildiğinde, veri silindiğinde... vs sayfa yeni baştan hesaplanacaktır. demektir. Bu da performans kaybıdır. Ancak yine de tercih meselesidir...
 
Çözüm
Ekleme yaparsam
Dinamik alan için
OFFSET
işlevini kullandım. INDEX işlevi ile de yapılabilir...
Alan = Sheet1!$A$2:INDEX(Sheet1!$A:$A;k+ROW(Sheet1!$A$2)-1)

INDEX işlevinin avantajı, OFFSET işlevi gibi Volatile (Oynak, uçucu) olmayışıdır. Yani, volatile demek, herhangi bir hücrede değişiklik yapıldığında , veri girildiğinde, veri silindiğinde... vs sayfa yeni baştan hesaplanacaktır. demektir. Bu da performans kaybıdır. Ancak yine de tercih meselesidir...
 
Hocam Tekrar merhaba;
Vaktinizi ayırdığınız için çok çok teşekkür ederim.Gayet bilgilendirici oldu.(Yani Excel de tek tek yazarak inceledim ama tabi formüllerin içeriğini tam olarak bilmediğim için biraz yabancı kaldım .)
Umarım her şey gönlünüze göre olur.Yardımlarınız için tekrar tekrar teşekkür ederim.
Hayırlı akşamlar dilerim.
 
Ben teşekkür ediyorum...
Yardımcı olabildiysem ne mutlu...
İyi akşamlar sizlere....
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst