Goal Seek hk.

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
İyi günler.
Daha önce yine forum arkadaşlarımızın yardımı ile aşağıdaki makroyu kullanmaya başlamıştım. Farklı bir çalışmada yine bu tarz bir iş lazım oldu.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("d32:d" & Cells(Rows.Count, "d").End(3).Row)) Is Nothing Then Exit Sub
son = Cells(Rows.Count, "d").End(3).Row
For i = 29 To son
Cells(i, "U").GoalSeek Goal:=Cells(i, "d"), ChangingCell:=Cells(i, "e")
Cells(i, "e") = Round(Cells(i, "e"), 2)
Next
End Sub
Bu kodu 2 farklı aralıkta çalıştırmak istiyorum.
D32: D43 ve D46: D57 hücreleri için hesaplama yapacak.
Mümkünse bu yardımcı olabilir misiniz?
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
Bir de
bir butona nasıl atayabilirim bu kodları?
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,731
Excel Vers. ve Dili
Excel 2019 Türkçe
Dosya eklerseniz daha çabuk cevap bulabilirsiniz.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,603
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bahsettiğiniz kodu komple siliniz.

Boş bir modüle aşağıdaki kodu uygulayınız. Sonra sayfanıza buton ekleyip makro ata işlemini yapınız.

C++:
Option Explicit

Sub GoalSeek_Example()
    Dim Veri As Range
    
    For Each Veri In Range("D32:D43,D46:D57")
        Cells(Veri.Row, "U").GoalSeek Goal:=Veri, ChangingCell:=Cells(Veri.Row, "E")
        Cells(Veri.Row, "E") = Round(Cells(Veri.Row, "E"), 2)
    Next
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
teşekkür ederim efendim saygılar.
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
İyi akşamlar.
Tekrar bu konu ile ilgili sizi rahatsız ediyorum
Küçük bir desteğe daha ihtiyacım var.

Yardım istediğim nokta şu: Ekte ki dosyada hesaplamalar sayfasında yaklaşık 8500 satır 1 personelin 2 yıllık bordro hesaplaması var. Makro belirli rakamları netten bürüte yapmaya çalışıyor. 250 personelin her biri için 24 satır olduğundan dolayı herhangi bir personelde değişiklik olduğunda bütün satırları baştan hesaplamaya çalışıyor ve çok uzun sürüyor. Bazende yılın yarısına kadar hesaplama yapıyor tekrar çalıştırdığımda tamamlıyor?
Sadece değişiklik yaptığımız satırlar için bir hesaplama yaptırabilir miyiz?
Bir de çok aşırı yavaş çalışıyor. Başka mantık yürütebilirmiyiz goalseek ten başka? Sihirli parmaklarınıza ihtiyacım var :}}



Bahsettiğiniz kodu komple siliniz.

Boş bir modüle aşağıdaki kodu uygulayınız. Sonra sayfanıza buton ekleyip makro ata işlemini yapınız.

C++:
Option Explicit

Sub GoalSeek_Example()
    Dim Veri As Range
   
    For Each Veri In Range("D32:D43,D46:D57")
        Cells(Veri.Row, "U").GoalSeek Goal:=Veri, ChangingCell:=Cells(Veri.Row, "E")
        Cells(Veri.Row, "E") = Round(Cells(Veri.Row, "E"), 2)
    Next
   
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

Ekli dosyalar

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
Çok doğru İdris bey. Sıkıntıya sebep olacaksa herşeyi temizlerim.
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
Tekrar merhaba. Başka bir yol geldi aklıma.
Değişiklik olan satırlarda bu kodu çalıştırma yapabilir miyiz acaba.

sayfa2 de değiştirdiğim hücreye göre hesaplamalar sayfasındaki ilgili satırlar için hesaplama yaparsa bilgisayarı fazla yormayız gibi geliyor.
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
İlkel bir şekilde aşağıdaki kodları birleştirdim.
yarım da olsa işimi gördü. 250 personel için aşağıdaki ni kullanmam doğru olur mu?
bir de For Each Veri In Range("D32:d55") satırını değişkene atayamadım.
Yardımcı olabilirmisiniz?

Kod:
-----------------------------------------------------------------------------------------------------------------------------

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [d32].Value <> [al55].Value Then
Call GoalSeek_Example
End If
End Sub

Sub GoalSeek_Example()
    Dim Veri As Range
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
    '------------------------------- hesaplamadan önce maaşın örneğini saklıyor. değişiklik varsa çalıştıracak.
Range("D32").Select
    Selection.Copy
Range("al32").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    '------------------------------- maaşında değişiklik olan kişinin 24 aylık hesabını yapıyor.
    For Each Veri In Range("D32:d55")
        Cells(Veri.Row, "U").GoalSeek Goal:=Veri, ChangingCell:=Cells(Veri.Row, "E")
        Cells(Veri.Row, "E") = Round(Cells(Veri.Row, "E"), 2)
    Next
    '-------------------------------
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,603
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Şu bölümü;

C++:
For Each Veri In Range("D32:d55")
Aşağıdaki gibi değiştirirseniz seçtiğiniz hücrelere göre kod çalışacaktır. Böylece dinamik bir makro elde etmiş olursunuz.

C++:
For Each Veri In Selection
 

Kumpasta

Altın Üye
Katılım
28 Nisan 2016
Mesajlar
186
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
05-12-2025
Korhan bey değişken derken otomatik çalışan makronun hangi hücrede eşit değilse o hücre aralığını aldırmaktan bahsetmiştim.

yani aşağıdaki kısım d32 ile al55 eşit değilse For Each Veri In Range("D32:d55") aralığını hesaplatmak niyetim. herkesi baştan hesaplamak yerine değişiklikleri hesaplayarak süreyi kısaltmaya çalışıyorum.

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [d32].Value <> [al55].Value Then
Call GoalSeek_Example
End If
End Sub

Tabii kişi başına bu kadar kodu çoğaltmak ne kadar doğru karar veremedim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,603
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Siz dediğim yöntemi bir deneyin.

Önerdiğim kod satırını uygulayın.
Hesaplatmak istediğiniz hücre aralığını seçip kodu çalıştırın. Böylece diğer alanlar etkilenmemiş olacaktır.
 
Üst