• 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ü Makro ile ortalama alınırken sıfır değerleri olmasın

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.

mert25

Bronz Üye
Kullanıcı Bilgileri
Aktiflik
Çevrimdışı
Katılım
25 Ağu 2022
Mesajlar
332
Çözümler
3
Aldığı beğeni
64
Excel V
Office 2016 TR
Konuyu Başlatan
Merhabalar, ekli dosyamda ufak bir sorunum var, ben çözemedim.

U-X sütunlarının ortalamasını Y sütununa, AA-AD sütunlarının ortalamasını AE sütununa ve AG-AJ sütunlarının ortalamasını da AK sütununa yazdırıyorum. Fakat H sütununa veri girdiğimde Y-AE-AK sütunlarına sıfır yazılıyor, bu sıfırları sildiremedim.

J sütununa veri girilmediği sürece bu sütunların boş kalmasını istiyorum.

Aşağıdaki kodlarda ne gibi değişiklik yapmam gerekiyor?

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 

Ekli dosyalar

  • deneme.xlsb
    311.3 KB · Gösterim: 4
' Maç Sonu Çeyreklerin Ortalaması
If Not IsEmpty(Cells(sat, 10)) Then
Cells(sat, 25).ClearContents
If Cells(sat, 9).Value <> 0 Then
Cells(sat, 25) = Application.WorksheetFunction.RoundUp(Cells(sat, 9) / 4, 0)
Else
Cells(sat, 25).ClearContents
End If
End If

' Maç Sonu Evin Attığı Sayıların Ortalaması
If Not IsEmpty(Cells(sat, 10)) Then
Cells(sat, 31).ClearContents
If Cells(sat, 18).Value <> 0 Then
Cells(sat, 31) = Application.WorksheetFunction.RoundUp(Cells(sat, 18) / 4, 0)
Else
Cells(sat, 31).ClearContents
End If
End If

' Maç Sonu Depin Attığı Sayıların Ortalaması
If Not IsEmpty(Cells(sat, 10)) Then
Cells(sat, 37).ClearContents
If Cells(sat, 19).Value <> 0 Then
Cells(sat, 37) = Application.WorksheetFunction.RoundUp(Cells(sat, 19) / 4, 0)
Else
Cells(sat, 37).ClearContents
End If
End If

Bu kod, J sütunundaki veriye göre diğer sütunları hesaplayacak ve sıfır yazılmasını engelleyecektir:
J sütununa veri girilmediği sürece Y, AE ve AK sütunlarında sıfır yazılmayacak ve bu sütunlar boş kalacaktır. J sütununa veri girildiğinde, sadece geçerli verilerle hesaplamalar yapılacaktır.
 
Cevap için teşekkür ederim, elinize sağlık. Kod güzel çalıştı fakat J sütunundaki sayıyı sildiğimde Y-AE-AK sütunlarındaki sayılar silinmiyor.

Koda bakılınca silinmesi gerekiyor, ne eksik acaba?

Eklediğim dosyada 11, 12 ve 13. satırlarda örneği var.
 

Ekli dosyalar

  • deneme.xlsb
    302.3 KB · Gösterim: 2
Worksheet_Change olayınızda, J sütunundaki verinin silindiğini kontrol etmek için bir ekleme yapmalısınız. Bu kontrol, sadece J sütununda bir silme işlemi yapıldığında çalışacak ve ilgili Y, AE ve AK sütunlarındaki verileri temizleyecektir.

Aşağıdaki kodu, mevcut kodunuza ekleyebilirsiniz:

If Not Intersect(Target, Me.Range("J:J")) Is Nothing Then
For Each cell In Target
If IsEmpty(cell.Value) Then

Cells(cell.Row, 25).ClearContents
Cells(cell.Row, 31).ClearContents
Cells(cell.Row, 37).ClearContents
End If
Next cell
End If

Eğer sadece veri silindiğinde değil, aynı zamanda J sütununa yeni bir değer girildiğinde de Y, AE, AK sütunlarındaki hesaplamaların yeniden yapılmasını istiyorsanız, o zaman mevcut işlem bloğunuzda da J sütunu değişikliklerini hesaba katmalısınız.

Bu eklemeyi yaptıktan sonra, J sütunundaki verileri silmek veya değiştirmek, Y, AE ve AK sütunlarındaki verilerin de sıfırlanmasını sağlayacaktır.
 
Eklediğiniz dosyada J sütununu silince ortalamalar silinmiyor fakat verdiğiniz şu kodu ekleyince J sütunu silindiğinde ortalamalar siliniyor. Teşekkür ederim.

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Bir sorum daha olacak; Sizin verdiğiniz koda bakarak çeyreklerde atılan sayıların sütunlarına da sıfır yazılmamasını sağladım fakat bu kodlar tek bir kod altında toplanabilir mi acaba?

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Üstat maç skoru gelmiyor, ortalamalar gelmiyor, bir de verileri silince biçmlendirmeler kalıyor.

Ekran görüntüsü 2025-01-04 143405.png
 
Merhaba.

Sadece şunu yazmak istiyorum alttaki 3 adet kodda J sütunu için yazılmış
Onları ayarlayıp tek koda çevirebilirsiniz.
Kodlar zaten dosyanızda.

PHP:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.


PHP:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.

PHP:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Mantıken 25 için resimdeki sarıya boyadığım gibi yaparsanız 0 olursa boş olur.
Diğerlerinede uygulayabilirsiniz.

1.png
 
Üstat cevap için teşekkür ederim, sabah bakıp dönüş yaparım.
 
Üstat, kodu dediğiniz şekilde değiştirdim fakat J sütunundaki veriyi sildiğimde ortalamaların alındığı sütunlardaki sayılar silinmiyor.

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.

Bir de şu formülün vba kodu nasıl olur?

Kod:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Son dosyayı ekleyin ve hangi sütundaki veriler ne değişinc2 silinecek vs... yazın bir bakalım
 
Şimdi üstat, sizin verdiğiniz şekilde düzenlediğim kodun olduğu dosya ekte. Ben J-Q aralığına veri girdiğimde Y-AE-AK sütunlarına ortalamalar yazılıyor. Burda sorun yok, fakat J-Q aralığındaki verileri sildiğimde Y-AE-AK sütunlarındaki verilerin de silinmesi gerekiyor.

Sağolsun berhudarolemi arkadaşın verdiği kod ile bu sorun çözüldü, fakat çok fazla kod oldu, daha sade bir şekilde bu sorun halledilir mi?

Örneğin, verilen kodlara bakarak çeyreklerde atılan sayılar için de kod düzenledim, bu da çok uzun kod oldu, daha sadesi olur mu diye merak ettim.

Bir de şu formülün vba kodu ile yazılışı nasıl olur?

=EĞER(U101="";"";YUVARLA(ORTALAMA(U101:X101);0))
 

Ekli dosyalar

  • deneme.xlsb
    314.4 KB · Gösterim: 1
şu formülün vba kodu ile yazılışı nasıl olur?

=EĞER(U101="";"";YUVARLA(ORTALAMA(U101:X101);0))

If Range("U101").Value = "" Then
Range("A1").Value = ""
Else
Range("A1").Value = Round(Application.WorksheetFunction.Average(Range("U101:X101")), 0)
End If

Bu VBA kodu, aşağıdaki adımları takip eder:

Koşul Kontrolü: Eğer U101 hücresinin değeri boş ise, hücreye boş bir değer ("") atanır.

ORTALAMA Hesaplama ve Yuvarlama: Eğer U101 hücresinin değeri boş değilse, U101:X101 hücrelerinin ortalaması alınır ve Round fonksiyonu ile en yakına yuvarlanır. Sonuç, belirtilen hücreye yazdırılır.

Dilerseniz hücre referanslarını değiştirebilirsiniz, burada örneğin sonucu A1 hücresine yazdırdım.
 
Bu düzenlemeyle, hem silme işlemini düzgün şekilde kontrol eder hem de kodun uzunluğunu azaltmış olduk.
 

Ekli dosyalar

  • deneme.xlsb
    292.7 KB · Gösterim: 3
Çözüm
Öncelikle ilgi ve cevap için teşekkür ederim. Neden bilmiyorum ama ben veri girince 2. ve 4. çeyreklere sayı gelmiyor.

31 ve 37. sütunlarda ortalama gelmiyor.

J-Q aralığındaki verileri sildiğimde ise bazı sütunlarda sıfırlar kalıyor.

Ekran görüntüsü 2025-01-05 144347.png
 
Bir de şu formülün vba kodu ile yazılışı nasıl olur?

=EĞER(U101="";"";YUVARLA(ORTALAMA(U101:X101);0))

ilk olan ortalamayı bulur.
Altındakide yukarı yuvarlar.Up yerine Down yazabilirsiniz yada Up kısmını silebilirsiniz.

Anlamanız için böyle örnekledim normalde değişkene vs... atayabilirsiniz.Boş olup olmadığı kontrolünü normalde bilmeniz gerek if şartlarıyla.

PHP:
Değerli Misafirimiz İçeriği Görebilmek İçin Üyemiz İseniz Giriş Yap'ın Ya da Üye Ol'un.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst