Goal Seek hk.

Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
İ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?
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
Bir de
bir butona nasıl atayabilirim bu kodları?
 

hamitcan

Uzman
Uzman
Katılım
1 Temmuz 2004
Mesajlar
7,700
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,159
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
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
teşekkür ederim efendim saygılar.
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
İ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

Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
Çok doğru İdris bey. Sıkıntıya sebep olacaksa herşeyi temizlerim.
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
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.
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
İ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,159
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
 
Katılım
28 Nisan 2016
Mesajlar
181
Excel Vers. ve Dili
2010
Altın Üyelik Bitiş Tarihi
06-01-2024
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,159
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