Excel Sayfası hücrelerinde bulunan bir önceki rakamların otomatik temizlenmesi

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
66
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
25-12-2028
Üstatlarım merhaba. Ekte gönderdiğim dosyada, programı her açtığımda; Excel Sayfa3'te E14-E24 arasındaki hücrelerde bulunan rakamları otomatik olarak temizleyecek bir formül için yardımlarınızı talep etmekteyim. Bunu istemedeki amaç E14-E24 arasındaki rakamları E25 te topluyorum. Ancak E19 daki rakamı sıfır değer aldığımda bir önce girilen rakamla topladığı için sonuç yanlış oluyor. Yardımlarınız için şimdiden teşekkürler.
 

Ekli dosyalar

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,166
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Merhaba,
Aşağıdaki kodu deneyiniz:
Kod:
Private Sub Workbook_Open()
Sayfa3.Range("E14:E24").ClearContents
End Sub
 

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
66
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
25-12-2028
Merhaba,
Aşağıdaki kodu deneyiniz:
Kod:
Private Sub Workbook_Open()
Sayfa3.Range("E14:E24").ClearContents
End Sub
Üstadım sonuç alamadım, hata yapmış da olabilirim. Aslında Sayfa3 E14-E24 arasındaki rakamları E25 te topluyorum. Ancak E25 teki toplam tutar hep hatalı oluyor. Burada doğru toplam alabilsek sorun çözülecek gibi duruyor. Kodlar aşağıdaki şekilde. Burada bir yanlış olabilir mi?


Private Sub btn_Kaydet_Click()
Dim ws As Worksheet: Dim ws3 As Worksheet

Set ws3 = ThisWorkbook.Sheets("Sayfa3")

If Me.TextBox45.Value <> "" Then

ws3.Range("E5").Value = CDbl(Me.TextBox45.Value)
' ws3.Range("E7").Value = CDbl(Me.TextBox45.Value)
ws3.Range("E9").Value = CDbl(Me.TextBox45.Value) - CDbl(Me.TextBox51.Value)
ws3.Range("E7").Value = ws3.Range("E5").Value - ws3.Range("E6").Value
ws3.Range("E10").Value = ws3.Range("E7").Value - ws3.Range("E9").Value
ws3.Range("E11").Value = ws3.Range("E10").Value * 0.2
ws3.Range("E12").Value = ws3.Range("E10").Value + ws3.Range("E11").Value
ws3.Range("E15").Value = ws3.Range("E10").Value * 0.00948
ws3.Range("E16").Value = ws3.Range("E11").Value * 5 / 10
ws3.Range("E25").Value = ws3.Range("E14").Value + ws3.Range("E15").Value + ws3.Range("E16").Value + ws3.Range("E17").Value + ws3.Range("E18").Value + ws3.Range("E19").Value + ws3.Range("E20").Value + ws3.Range("E21").Value + ws3.Range("E22").Value + ws3.Range("E23").Value + ws3.Range("E24").Value
ws3.Range("E26").Value = ws3.Range("E12").Value - ws3.Range("E25").Value
' ws3.Range("E10").Value = ws3.Range("E9").Value - ws3.Range("E7").Value
' ws3.Range("E11").Value = ws3.Range("E10").Value * 0.2
' ws3.Range("E15").Value = ws3.Range("E10").Value * 0.948
Else
MsgBox "Önce hesaplamayı yaptırın", vbInformation, Application.UserName
Exit Sub
End If
Sheets("Sayfa3").Activate

Sheets("Sayfa2").Activate
 
Katılım
14 Ocak 2005
Mesajlar
802
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Yükledim üstadım ilginiz için teşekkürler
Ali Bey yüklediğiniz dosyanın likini buraya koyarsanız bide indirelim.


şu yukarıda ki verdiğim Dosya.co sitesine yükleyiniz ve indirme linkini buradan paylaşınız lütfen.
 
Son düzenleme:
Katılım
14 Ocak 2005
Mesajlar
802
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Üstadım sonuç alamadım, hata yapmış da olabilirim. Aslında Sayfa3 E14-E24 arasındaki rakamları E25 te topluyorum. Ancak E25 teki toplam tutar hep hatalı oluyor. Burada doğru toplam alabilsek sorun çözülecek gibi duruyor. Kodlar aşağıdaki şekilde. Burada bir yanlış olabilir mi?


Private Sub btn_Kaydet_Click()
Dim ws As Worksheet: Dim ws3 As Worksheet

Set ws3 = ThisWorkbook.Sheets("Sayfa3")

If Me.TextBox45.Value <> "" Then

ws3.Range("E5").Value = CDbl(Me.TextBox45.Value)
' ws3.Range("E7").Value = CDbl(Me.TextBox45.Value)
ws3.Range("E9").Value = CDbl(Me.TextBox45.Value) - CDbl(Me.TextBox51.Value)
ws3.Range("E7").Value = ws3.Range("E5").Value - ws3.Range("E6").Value
ws3.Range("E10").Value = ws3.Range("E7").Value - ws3.Range("E9").Value
ws3.Range("E11").Value = ws3.Range("E10").Value * 0.2
ws3.Range("E12").Value = ws3.Range("E10").Value + ws3.Range("E11").Value
ws3.Range("E15").Value = ws3.Range("E10").Value * 0.00948
ws3.Range("E16").Value = ws3.Range("E11").Value * 5 / 10
ws3.Range("E25").Value = ws3.Range("E14").Value + ws3.Range("E15").Value + ws3.Range("E16").Value + ws3.Range("E17").Value + ws3.Range("E18").Value + ws3.Range("E19").Value + ws3.Range("E20").Value + ws3.Range("E21").Value + ws3.Range("E22").Value + ws3.Range("E23").Value + ws3.Range("E24").Value
ws3.Range("E26").Value = ws3.Range("E12").Value - ws3.Range("E25").Value
' ws3.Range("E10").Value = ws3.Range("E9").Value - ws3.Range("E7").Value
' ws3.Range("E11").Value = ws3.Range("E10").Value * 0.2
' ws3.Range("E15").Value = ws3.Range("E10").Value * 0.948
Else
MsgBox "Önce hesaplamayı yaptırın", vbInformation, Application.UserName
Exit Sub
End If
Sheets("Sayfa3").Activate

Sheets("Sayfa2").Activate
Burada verdiğiniz kodlara göre baktığımızda


ws3.Range("E25").Value = _
ws3.Range("E14").Value + ws3.Range("E15").Value + ws3.Range("E16").Value + _
ws3.Range("E17").Value + ws3.Range("E18").Value + ws3.Range("E19").Value + _
ws3.Range("E20").Value + ws3.Range("E21").Value + ws3.Range("E22").Value + _
ws3.Range("E23").Value + ws3.Range("E24").Value

bu formül, E14 ile E24 arasındaki hücreleri tek tek toplayarak E25 hücresine yazıyor.
ğer E14:E24 aralığında boş hücre, boşluk ("") ya da metin varsa, bunlar toplama dahil olurken hatalı sonuçlara neden olabilir.

VBA'da "" + 5 = "5" olur, yani sayı gibi görünür ama metin olur.
Sonuç: Toplam hatalı ya da string döner.

Hücreleri toplamadan önce sayıya çeviriniz. aşağıdaki kodlarla.

Kod:
Dim toplam As Double
Dim i As Integer

toplam = 0

For i = 14 To 24
    If IsNumeric(ws3.Range("E" & i).Value) Then
        toplam = toplam + CDbl(ws3.Range("E" & i).Value)
    End If
Next i

ws3.Range("E25").Value = toplam
Bu şekilde, sadece sayı olan hücreleri toplarsınız, metin veya boşluklar hataya neden olmaz.
 
Katılım
14 Ocak 2005
Mesajlar
802
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
daha iyi bakabilmemiz için öncellikle dosyanızı yukarı da belirttiğim gibi ekleyin.

Aşağıdakileri de bir deneyin.


Kod:
Private Sub btn_Kaydet_Click()
    Dim ws As Worksheet
    Dim ws3 As Worksheet
    Set ws3 = ActiveSheet

    If Me.TextBox45.Value <> "" Then
        ws3.Range("E5").Value = CDbl(Me.TextBox45.Value)
        ws3.Range("E9").Value = CDbl(Me.TextBox45.Value) - CDbl(Me.TextBox51.Value)
        ws3.Range("E7").Value = ws3.Range("E5").Value - ws3.Range("E6").Value
        ws3.Range("E10").Value = ws3.Range("E7").Value - ws3.Range("E9").Value
        ws3.Range("E11").Value = ws3.Range("E10").Value * 0.2
        ws3.Range("E12").Value = ws3.Range("E10").Value + ws3.Range("E11").Value
        ws3.Range("E15").Value = ws3.Range("E10").Value * 0.00948
        ws3.Range("E16").Value = ws3.Range("E11").Value * 0.5

        ' E25 toplamını hesapla
        ws3.Range("E25").Value = _
            Nz(ws3.Range("E14").Value) + Nz(ws3.Range("E15").Value) + Nz(ws3.Range("E16").Value) + _
            Nz(ws3.Range("E17").Value) + Nz(ws3.Range("E18").Value) + Nz(ws3.Range("E19").Value) + _
            Nz(ws3.Range("E20").Value) + Nz(ws3.Range("E21").Value) + Nz(ws3.Range("E22").Value) + _
            Nz(ws3.Range("E23").Value) + Nz(ws3.Range("E24").Value)

        ws3.Range("E26").Value = ws3.Range("E12").Value - ws3.Range("E25").Value
    Else
        MsgBox "Önce hesaplamayı yaptırın", vbInformation, Application.UserName
        Exit Sub
    End If
End Sub

Ekstra: Nz Fonksiyonu (Null'lara Karşı Koruma) koyarsak

Excel'de boş hücrelerde + işlemi yaptığınızda hata almamak için Nz adında bir yardımcı fonksiyon tanımlayabilirsiniz. Bu, boş hücreleri 0 olarak kabul eder:

Kod:
Private Function Nz(value As Variant) As Double
If IsEmpty(value) Or IsNull(value) Or value = "" Then
Nz = 0
Else
Nz = CDbl(value)
End If
End Function
Bu fonksiyonu modülünüzün en altına ekleyebilirsiniz.
 
Üst