Tüm Versiyonu Göster : Hücrelerdeki metinlerin sağındaki sayıları toplamak
N.Ziya Hiçdurmaz
16-06-2007, 23:23
İstenen B1 hücresinne yazılan kritere göre A sütununda verileri bulacak.
Bulunan metinlerin sağındaki sayıları c1 hücresinde toplayacak.
Levent Menteşoğlu
17-06-2007, 00:10
Ben aşağıdaki kodu öneriyorum.
Sub topla()
For a = 1 To [a65536].End(3).Row
deger = Replace(Cells(a, "a"), [b1], "", , , vbTextCompare)
If deger <> Cells(a, "a") Then toplam = toplam + CDbl(deger)
Next
[c1] = toplam
End Sub
'A sütununda son hücreyide dikkate alan döngü başlangıcı
'deger değişkenine, B1 hücresindeki kriter, A sütunundaki hücrelerdeki veride bulunarak yerine boşluk verilir. Böylece sadece sayısal değer kalmış olur.
'deger değişkeni ile A sütunundaki taranan hücredeki veri karşılaştırılır eğer farklı ise toplam değişkenine deger değişkenindeki sayı atanır.
'döngü sınu
'toplam değişkeninin değeri C1 hücresine yazılır.
Arşivimde olan , Sayın Haluk'un Yaptığı kullanıcı tanımlı fonksiyonu kullanarak yaptığım, ama tek seferde işlem görmeyen çözüm (4 işlevle sonuca varılıyor). Açıklama yapamayacağım, çünkü makronun açıklamasını bilmiyorum.
Levent Menteşoğlu
17-06-2007, 01:21
Soru dizi fonksiyonu ilede çözülebilmektedir. Formül aşağıdaki gibidir.
{=TOPLA(EĞER(YERİNEKOY(BÜYÜKHARF(A1:A4);BÜYÜKHARF( B1);"")<>BÜYÜKHARF(A1:A4);SAYIYAÇEVİR(YERİNEKOY(BÜYÜKHARF(A 1:A4);BÜYÜKHARF(B1);""));0))}
Not: BÜYÜKHARF fonksiyonu büyük-küçük harf ayrımını ortadan kaldırmak için kullanılmıştır.
Sayın leventm
Sunduğunuz ikinci alternatifin pek sağlıklı olmadığı kanaatindeyim. Çünkü Başvuru hücresi "Ali" olduğu zaman, İşlev "Ali ali" olanları da topluyor veya "Ali veli" olan hücrelerde #DEĞER! hatası veriyor.
Makroda
toplam = toplam + CDbl(deger)
satırında Type Mismatch hatası veriyor.
Levent Menteşoğlu
17-06-2007, 11:38
Sn kombo
Her iki önerimde her hücrede sadece tek isim sözkonusu ise geçerlidir. (aynı isim birden fazla olabilir), ekli dosyada örnekler bu şekilde verilmiş, eğer farklı isimler sözkonusu ise elbette farklı çözümler düşünmek gerekecektir.
N.Ziya Hiçdurmaz
17-06-2007, 12:27
Verilerin sağındaki sayılar örnekte olduğu gibi iki haneli olmak şartı ile çözüm aşşağıdadır.
Sub test()
[c1].ClearContents
For Each bak In Range("a1:a10")
alan = UCase(Replace(Replace(bak, "ı", "I"), "i", "İ"))
veri = UCase(Replace(Replace([b1], "ı", "I"), "i", "İ"))
If alan Like "*" & veri & "*" Then
[c1] = [c1] + Right(alan, 2)
End If
Next
End Sub
'c1 hücresini temizliyoruz
'a1:a10 aralığını döngüye alıyoruz
'alan değişkenine dögümüzdeki hücrelerdeki verilerin büyük küçük harf özelliğini alıyoruz
'b1 hücresindeki verinin büyük küçük harf özelliğini alıyoruz
'alan ile veri değişkenini karşılaştırma yapıyoruz
'c1 hücresinde kritere uyan verilerin sağındaki sayıların toplamını alıyoruz
emrexcel123
19-06-2007, 12:37
bir çözüm...
veyselemre
19-06-2007, 13:48
Bir çözüm de ben hazırladım.
Yalnız soru sorulurken net olarak bütün alternatifler verilmemiş.
Örneğin AliAhmet25 yazan hücreyi hem Ali hem Ahmet olarak mı toplayacağız,
AliAhmet25 le AliAhmet 25 yazan veriler aynı şekilde mi değerlendirilecek,
Ali Ahmet25 le AliAhmet25 yazan veriler aynı şekilde mi değerlendirilecek gibi sorulara açıklık getirilerek özellikle bu bölümde soru sorulursa iyi olurdu. Kaç gündür bir çözüm yapayım dedim fakat içimden yukarıdaki sorulara cevap bulamadığım için yapmadım. Bugün kafama göre değerlendirip yaptım.
Çözümde A sütunundaki hücrelerde aranan değer geçiyorsa (büyük küçük harf farketmez) o hücrenin sağındaki veriler toplanıyor.
nukhet1616
07-09-2009, 07:40
Birde bunu deneyin arkadaşlar. dosyayı açamadığım için anlatılandan böyle birşey istendiğini çıkardım. daha komplike birşeyse siz yine makrodan devam edin.
=ETOPLA(H4:H23;"ali";K4:K23)
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.