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

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
70
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

Katılım
14 Ocak 2005
Mesajlar
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
13/03/2022
buradan dosyayı paylaşırsanız bakabilirim. indiremiyorum çünkü.
 

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
70
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
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
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
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
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
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
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.
 

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
70
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
25-12-2028
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.
Üstadım emekleriniz için ne kadar teşekkür etsem azdır, hakkınızı helal edin. TextBox48'e girdiğim değer Sayfa3 E19'da görünmesine rağmen E25'teki toplam tutara bunu eklemiyor. Bir başka ifadeyle E25 içerisindeki toplam tutarda E19 daki rakam eksik kalıyor. Bakabilirseniz çok memnun olurum. Bakamazsanız da canınınız sağ olsun sizi epey uğraştırdım her şey için tekrardan teşekkürler
 
Katılım
14 Ocak 2005
Mesajlar
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
13/03/2022
Üstadım emekleriniz için ne kadar teşekkür etsem azdır, hakkınızı helal edin. TextBox48'e girdiğim değer Sayfa3 E19'da görünmesine rağmen E25'teki toplam tutara bunu eklemiyor. Bir başka ifadeyle E25 içerisindeki toplam tutarda E19 daki rakam eksik kalıyor. Bakabilirseniz çok memnun olurum. Bakamazsanız da canınınız sağ olsun sizi epey uğraştırdım her şey için tekrardan teşekkürler
Rica ederim ali bey ama dosyayı yüklerseniz daha net bir çözüm bulabiliriz.


Dosya Yükle - Dosya Upload
Dosyalarınızı ücretsiz yükleyebilir ve paylaşabilirsiniz. Dosya yükleme, Dosya Upload ücretsiz.
dosya.co
buradan dosyayı paylaşırsanız bakabilirim. indiremiyorum çünkü.
linkini buradan paylaşmayı unutmayınız.
 

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
70
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
25-12-2028
Rica ederim ali bey ama dosyayı yüklerseniz daha net bir çözüm bulabiliriz.


Dosya Yükle - Dosya Upload
Dosyalarınızı ücretsiz yükleyebilir ve paylaşabilirsiniz. Dosya yükleme, Dosya Upload ücretsiz.
dosya.co
buradan dosyayı paylaşırsanız bakabilirim. indiremiyorum çünkü.
linkini buradan paylaşmayı unutmayınız.
 
Katılım
14 Ocak 2005
Mesajlar
807
Excel Vers. ve Dili
Microsoft Office Professional Plus 2021
Altın Üyelik Bitiş Tarihi
13/03/2022
btn_Hesapla_Click Aşağıdakilerle değiştirin.
Not: çalışma kitabınızın bir yedeğini alın lütfen


Kod:
Private Sub btn_Hesapla_Click()
    Dim i As Long
    Dim toplam As Double
    Dim toplam1 As Double

    ' Gün sayısı boşsa uyarı ver ve çık
    If Trim(Me.TextBox32.Value) = "" Then
        MsgBox "DİKKAT !!!" & vbCrLf & "Gün Sayısını Girmediniz..!", vbInformation, Application.UserName
        Me.TextBox32.SetFocus
        Exit Sub
    End If

    '--- 17 ile 23 arası textbox değerlerini çarp ve 24-30 arası textboxlara yaz ---
    For i = 17 To 23
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            Me.Controls("TextBox" & i + 7).Value = CDbl(Me.Controls("TextBox" & i).Value) * CDbl(Me.TextBox32.Value)
        Else
            Me.Controls("TextBox" & i + 7).Value = 0
        End If
    Next i

    '--- 24 ile 30 arası TextBoxları topla, TextBox50'yi çıkar, TextBox51'e yaz ---
    toplam = 0
    For i = 24 To 30
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            toplam = toplam + CDbl(Me.Controls("TextBox" & i).Value)
        End If
    Next i
    If IsNumeric(Me.TextBox50.Value) Then toplam = toplam - CDbl(Me.TextBox50.Value)
    Me.TextBox51.Value = FormatNumber(toplam, 2)

    ' Gerekli diğer işlemler (ör. Sayfaya yükleme)
    Call yukle

    '--- 33 ile 44 arası TextBoxları topla, sonucu TextBox45'e yaz ---
    toplam1 = 0
    For i = 33 To 44
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            toplam1 = toplam1 + CDbl(Me.Controls("TextBox" & i).Value)
        End If
    Next i
    Me.TextBox45.Value = FormatNumber(toplam1, 2)
End Sub
İyileştirmeler

Boş/yanlış giriş kontrolü:
IsNumeric() ile tüm TextBox değerlerini kontrol ettidiliyor, sayı değilse 0 kabul ediliyor → hatasız toplama ve çarpma.
Kod tekrarını azalttım:
Döngüler daha net ve kısa hale getirildi.
Formatlama eklendi:
Sonuçlar iki ondalıkla gösteriliyor, böylece her zaman düzenli görünür.
Hata riski azaltıldı:
Boş textbox veya metin girilmesi durumunda hata vermeden çalışır.


btn_Kaydet_Click Aşağıdakilerle değiştirin.
Not: çalışma kitabınızın bir yedeğini alın lütfen


btn_Kaydet_Click Revizyonunuz
Kod:
Private Sub btn_Kaydet_Click()
    Dim ws3 As Worksheet
    Dim toplam As Double
    Dim i As Long

    Set ws3 = ThisWorkbook.Sheets("Sayfa3")

    ' TextBox45 boşsa işlemi durdur
    If Me.TextBox45.Value = "" Then
        MsgBox "Önce hesaplamayı yaptırın", vbInformation, Application.UserName
        Exit Sub
    End If

    ' E19 değerini TextBox48'den al (eğer boş değilse)
    If Me.TextBox48.Value <> "" Then
        ws3.Range("E19").Value = CDbl(Me.TextBox48.Value)
    End If

    ' Ana hesaplamalar
    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 tek seferde, güvenli şekilde toplanır ---
    toplam = 0
    For i = 14 To 24
        toplam = toplam + Nz(ws3.Range("E" & i).Value)
    Next i
    ws3.Range("E25").Value = toplam

    ' E26 hesapla
    ws3.Range("E26").Value = ws3.Range("E12").Value - ws3.Range("E25").Value
End Sub
İyileştirmeler

Çift hesaplama kaldırıldı: Önce manuel toplama, sonra For döngüsü ile ikinci kez yazma vardı; artık yalnızca For döngüsü ile toplama yapılıyor.
Nz fonksiyonu entegre edildi: Boş hücreler 0 kabul ediliyor, hatasız çalışıyor.
E19 garantilendi: Kaydet butonuna basıldığında TextBox48 değeri mutlaka E19’a yazılıyor.
Kod okunabilirliği arttırıldı: Gereksiz satırlar kaldırıldı.

Ali bey bu değişikleri yapıp deneyiniz. İnşallah işinize yarar sağlıcakla kalın.
 
Son düzenleme:

aliadanur

Altın Üye
Katılım
28 Ekim 2020
Mesajlar
70
Excel Vers. ve Dili
Excel 2007
Altın Üyelik Bitiş Tarihi
25-12-2028
btn_Hesapla_Click Aşağıdakilerle değiştirin.
Not: çalışma kitabınızın bir yedeğini alın lütfen


Kod:
Private Sub btn_Hesapla_Click()
    Dim i As Long
    Dim toplam As Double
    Dim toplam1 As Double

    ' Gün sayısı boşsa uyarı ver ve çık
    If Trim(Me.TextBox32.Value) = "" Then
        MsgBox "DİKKAT !!!" & vbCrLf & "Gün Sayısını Girmediniz..!", vbInformation, Application.UserName
        Me.TextBox32.SetFocus
        Exit Sub
    End If

    '--- 17 ile 23 arası textbox değerlerini çarp ve 24-30 arası textboxlara yaz ---
    For i = 17 To 23
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            Me.Controls("TextBox" & i + 7).Value = CDbl(Me.Controls("TextBox" & i).Value) * CDbl(Me.TextBox32.Value)
        Else
            Me.Controls("TextBox" & i + 7).Value = 0
        End If
    Next i

    '--- 24 ile 30 arası TextBoxları topla, TextBox50'yi çıkar, TextBox51'e yaz ---
    toplam = 0
    For i = 24 To 30
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            toplam = toplam + CDbl(Me.Controls("TextBox" & i).Value)
        End If
    Next i
    If IsNumeric(Me.TextBox50.Value) Then toplam = toplam - CDbl(Me.TextBox50.Value)
    Me.TextBox51.Value = FormatNumber(toplam, 2)

    ' Gerekli diğer işlemler (ör. Sayfaya yükleme)
    Call yukle

    '--- 33 ile 44 arası TextBoxları topla, sonucu TextBox45'e yaz ---
    toplam1 = 0
    For i = 33 To 44
        If IsNumeric(Me.Controls("TextBox" & i).Value) Then
            toplam1 = toplam1 + CDbl(Me.Controls("TextBox" & i).Value)
        End If
    Next i
    Me.TextBox45.Value = FormatNumber(toplam1, 2)
End Sub
İyileştirmeler

Boş/yanlış giriş kontrolü:
IsNumeric() ile tüm TextBox değerlerini kontrol ettidiliyor, sayı değilse 0 kabul ediliyor → hatasız toplama ve çarpma.
Kod tekrarını azalttım:
Döngüler daha net ve kısa hale getirildi.
Formatlama eklendi:
Sonuçlar iki ondalıkla gösteriliyor, böylece her zaman düzenli görünür.
Hata riski azaltıldı:
Boş textbox veya metin girilmesi durumunda hata vermeden çalışır.


btn_Kaydet_Click Aşağıdakilerle değiştirin.
Not: çalışma kitabınızın bir yedeğini alın lütfen


btn_Kaydet_Click Revizyonunuz
Kod:
Private Sub btn_Kaydet_Click()
    Dim ws3 As Worksheet
    Dim toplam As Double
    Dim i As Long

    Set ws3 = ThisWorkbook.Sheets("Sayfa3")

    ' TextBox45 boşsa işlemi durdur
    If Me.TextBox45.Value = "" Then
        MsgBox "Önce hesaplamayı yaptırın", vbInformation, Application.UserName
        Exit Sub
    End If

    ' E19 değerini TextBox48'den al (eğer boş değilse)
    If Me.TextBox48.Value <> "" Then
        ws3.Range("E19").Value = CDbl(Me.TextBox48.Value)
    End If

    ' Ana hesaplamalar
    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 tek seferde, güvenli şekilde toplanır ---
    toplam = 0
    For i = 14 To 24
        toplam = toplam + Nz(ws3.Range("E" & i).Value)
    Next i
    ws3.Range("E25").Value = toplam

    ' E26 hesapla
    ws3.Range("E26").Value = ws3.Range("E12").Value - ws3.Range("E25").Value
End Sub
İyileştirmeler

Çift hesaplama kaldırıldı: Önce manuel toplama, sonra For döngüsü ile ikinci kez yazma vardı; artık yalnızca For döngüsü ile toplama yapılıyor.
Nz fonksiyonu entegre edildi: Boş hücreler 0 kabul ediliyor, hatasız çalışıyor.
E19 garantilendi: Kaydet butonuna basıldığında TextBox48 değeri mutlaka E19’a yazılıyor.
Kod okunabilirliği arttırıldı: Gereksiz satırlar kaldırıldı.

Ali bey bu değişikleri yapıp deneyiniz. İnşallah işinize yarar sağlıcakla kalın.
Üstadım merhaba;
Öncelikle Allah ne muradınız varsa versin diyorum. Emek verdiniz, zaman ayırdınız. Size nasıl teşekkür edeceğimi bilemiyorum. Sonuca çok yaklaştık. Eksiklikleri aşağıda elimden geldiğince belirtmeye çalıştım.
1-TextBox24 ile TextBox30 arasındaki rakamları TextBox31 de toplayabilir miyiz.
2- HESAPLAMAYI KAYDET butonu bazen unutulabiliyor. Bunu önlemek için ComboBox1 tıklandığında HESAPLAMAYI KAYDETMEDİNİZ uyarısı alarak bu işlemden sonra ComboBox1 seçimine izin verebilir miyiz.
3- En Önemlisi; Ceza miktarı TextBox48’e her hangi bir tutar girince bunu sayfa3 E19 hücresine doğru olarak yansıtıyor, ancak Sayfa3 E25 hücresindeki toplam değerin içine katmıyor. Yani ceza miktarını diğer değerlerle toplamıyor.

Umarım sizi yormadan izah edebilmişimdir. Lütfen hakkınız helal edin selamlar.
 
Üst