Soru Eğer Formülünü Makro ile Kullanmak Hakkında.

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhabalar,
Kullanmış olduğum çalışma sayfamda forumda bulunan örnek dosyalardan yararlanarak oluşturmuş olduğum formüllerim bulunmakta. Şöyle ki ;

KURAL 1 :
"C" sütununda "AS" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B3=B4;EĞER(C3=C4;EĞER(D3="C";EĞER(D4="T";(F3/(F3+(F4*1,6)))))))

"C" sütununda "AS" + "D" sütununda "T" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B4=B5;EĞER(C4=C5;EĞER(D4="C";EĞER(D5="T";(F4/(F4+(F5*1,6)))))))
*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.

KURAL 2:
"C" sütununda "C1o" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B5=B6;EĞER(C5=C6;EĞER(D5="C";EĞER(D6="T";(F5/(F5+(F6*1,6)))))))

"C" sütununda "C1o" + "D" sütununda "T" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B6=B7;EĞER(C6=C7;EĞER(D6="C";EĞER(D7="T";(F6/(F6+(F7*1,6)))))))
*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.

KURAL 3:
"A" sütununda ("A3" den sonra) bulunan hücre değerinde;

"Y" bulunur ise "D" sütununda "C" ,
"R" bulunur ise "D" sütununda "T" ,
"G" bulunur ise "D" sütununda "A" ,
"B" bulunur ise "D" sütununda "G" , yazması için kullanmış olduğum formül ;
=EĞER(EĞERHATA(BUL("Y";A3);0)>0;"C";EĞER(EĞERHATA(BUL("R";A3);0)>0;"T";EĞER(EĞERHATA(BUL("G";A3);0)>0;"A";EĞER(EĞERHATA(BUL("B";A3);0)>0;"G";""))))

Tüm bu oluşturmuş olduğum formülleri bir kod içerisinde kullanabilir miyim? Verilerim çok fazla olduğundan formüllerde ara ara sıkıntılar çıkabiliyor maalesef:-( Her defasında kontrol etmek gereği duyuyorum. Kodlar ile oluşturulur ise daha güvenli olacağını düşündüğümden çalışma sayfamı bu yönde revize etmek için çabalıyorum.
 

Ekli dosyalar

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
A sütunundaki değerlerinizin formatı aynı mı? Yani kontrol ettirdiğiniz ilk harf midir?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,586
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

"I" sütunundaki formülünüz için örnek kodu paylaşıyorum. Siz diğerlerini örneğe bakarak kendiniz düzenleyiniz.

C++:
Sub Test()
    With Range("I3:I" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=IF(B3=B4,IF(C3=C4,IF(D3=""C"",IF(D4=""T"",(F3/(F3+(F4*1.6)))))))"
        .Value = .Value
    End With
End Sub

Kod içinde ki With-End With bloğunu kopyalarak dilediğiniz kadar çoğaltabilirsiniz. (Excelin sınırları dahilinde)

Dikkat etmeniz gereken detaylar;

Kod tarafında çift tırnak işareti iki kez yazılıyor. Noktalı virgül virgül olarak yazılıyor. Ondalıklı sayılardaki virgül ise nokta olarak yazılıyor.
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhaba,

"I" sütunundaki formülünüz için örnek kodu paylaşıyorum. Siz diğerlerini örneğe bakarak kendiniz düzenleyiniz.

C++:
Sub Test()
    With Range("I3:I" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=IF(B3=B4,IF(C3=C4,IF(D3=""C"",IF(D4=""T"",(F3/(F3+(F4*1.6)))))))"
        .Value = .Value
    End With
End Sub

Kod içinde ki With-End With bloğunu kopyalarak dilediğiniz kadar çoğaltabilirsiniz. (Excelin sınırları dahilinde)

Dikkat etmeniz gereken detaylar;

Kod tarafında çift tırnak işareti iki kez yazılıyor. Noktalı virgül virgül olarak yazılıyor. Ondalıklı sayılardaki virgül ise nokta olarak yazılıyor.
Merhaba Korhan bey ,
Öncellikle ilginiz ve cevabınız için çok teşekkür ederim. Dikkat edilecek noktaları göz önüne alarak hemen diğer kurallarımı da ekliyorum. Umarım sorun yaşamam.
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhaba,

"I" sütunundaki formülünüz için örnek kodu paylaşıyorum. Siz diğerlerini örneğe bakarak kendiniz düzenleyiniz.

C++:
Sub Test()
    With Range("I3:I" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=IF(B3=B4,IF(C3=C4,IF(D3=""C"",IF(D4=""T"",(F3/(F3+(F4*1.6)))))))"
        .Value = .Value
    End With
End Sub

Kod içinde ki With-End With bloğunu kopyalarak dilediğiniz kadar çoğaltabilirsiniz. (Excelin sınırları dahilinde)

Dikkat etmeniz gereken detaylar;

Kod tarafında çift tırnak işareti iki kez yazılıyor. Noktalı virgül virgül olarak yazılıyor. Ondalıklı sayılardaki virgül ise nokta olarak yazılıyor.
Korhan bey ,
Aşağıda yazmış olduğum kural açıklamasında yer alan "D" sütununda ki şartlar tam istediğim gibi olmuş fakat kırmızı ile boyamış olduğum şartları da ekleme şansımız olur mu acaba.

KURAL 1 :
"C" sütununda "AS" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B3=B4;EĞER(C3=C4;EĞER(D3="C";EĞER(D4="T";(F3/(F3+(F4*1,6)))))))

"C" sütununda "AS" + "D" sütununda "T" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B4=B5;EĞER(C4=C5;EĞER(D4="C";EĞER(D5="T";(F4/(F4+(F5*1,6)))))))
*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.

KURAL 2:
"C" sütununda "C1o" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B5=B6;EĞER(C5=C6;EĞER(D5="C";EĞER(D6="T";(F5/(F5+(F6*1,6)))))))

"C" sütununda "C1o" + "D" sütununda "T" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B6=B7;EĞER(C6=C7;EĞER(D6="C";EĞER(D7="T";(F6/(F6+(F7*1,6)))))))
*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhaba sayın unlimitted, evet aynı formatta olacak.
Tekrar merhaba sayın unlimitted,
İlk mesajımda belirtmiş olduğum Kural 3'ü Korhan Bey'in #3 nolu mesajındaki kodları uyarlayarak başarmış oldum. Kodlar da şu şekilde;
Kod:
Sub Test2()
    With Range("D3:D" & Cells(Rows.Count, 1).End(3).Row)
        .Formula = "=IF(IFERROR(FİND(""Y"",A3),0)>0,""C"",IF(IFERROR(FİND(""R"",A3),0)>0,""T"",IF(IFERROR(FİND(""G"",A3),0)>0,""A"",IF(IFERROR(FİND(""B"",A3),0)>0,""G"",""""))))"
        .Value = .Value
    End With
End Sub
Kod:
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Korhan bey merhaba,
#3 nolu mesajınızdaki kodlar içerisine 1 adet With-End With bloğu ekledim.Son bir isteğim olacaktı şöyle ki;
Kod:
Sub Test()
    With Range("I3:I" & Cells(Rows.Count, 1).End(3).Row) ' eğer ki "C" sütununda "AS, C1o" yazar ise bu formül ile değerlendirilsin
        .Formula = "=IF(B3=B4,IF(C3=C4,IF(D3=""C"",IF(D4=""T"",(F3/(F3+(F4*1.6)))))))"
        .Value = .Value
    End With
    With Range("I3:I" & Cells(Rows.Count, 1).End(3).Row) ' eğer ki "C" sütununda "ED" yazar ise bu formül ile değerlendirilsin
        .Formula = "=IF(B3=B4,IF(C3=C4,IF(D3=""G"",IF(D4=""A"",(F3/(F3+(F4*2)))))))"
        .Value = .Value
    End With
    
End Sub
"With-End With" blokları yazmış olduğum açıklamalara göre çalışabilir mi?
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Bunu dener misiniz.
Kod:
Private Sub CommandButton1_Click()

Set hv = Sheets("HAM VERI")
son = hv.Range("A" & Rows.Count).End(3).Row

hv.[d3].Formula = "=IF(IFERROR(FIND(""Y"",RC[-3]),0)>0,""C"",IF(IFERROR(FIND(""R"",RC[-3]),0)>0,""T"",IF(IFERROR(FIND(""G"",RC[-3]),0)>0,""A"",IF(IFERROR(FIND(""B"",RC[-3]),0)>0,""G"",""""))))"
hv.[I3].Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
hv.[d3].Copy hv.Range("D4:D" & son)
hv.[I3].Copy hv.Range("I4:I" & son)
hv.Range("D3:I" & son).Value = hv.Range("D3:I" & son).Value

End Sub
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Bunu dener misiniz.
Kod:
Private Sub CommandButton1_Click()

Set hv = Sheets("HAM VERI")
son = hv.Range("A" & Rows.Count).End(3).Row

hv.[d3].Formula = "=IF(IFERROR(FIND(""Y"",RC[-3]),0)>0,""C"",IF(IFERROR(FIND(""R"",RC[-3]),0)>0,""T"",IF(IFERROR(FIND(""G"",RC[-3]),0)>0,""A"",IF(IFERROR(FIND(""B"",RC[-3]),0)>0,""G"",""""))))"
hv.[I3].Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
hv.[d3].Copy hv.Range("D4:D" & son)
hv.[I3].Copy hv.Range("I4:I" & son)
hv.Range("D3:I" & son).Value = hv.Range("D3:I" & son).Value

End Sub
Merhaba sayın unlimitted,
Öncelikle ilginiz ve emekleriniz için çok teşekkür ederim. Evet gayet güzel çalışıyor kodlar fakat aşağıdaki açıklamada kırmızı renkli olan kısım ekslik kalıyor:-(
KURAL 1 :
"C" sütununda "AS" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B3=B4;EĞER(C3=C4;EĞER(D3="C";EĞER(D4="T";(F3/(F3+(F4*1,6)))))))


KURAL 2:
"C" sütununda "C1o" + "D" sütununda "C" yazar ise "I" sütununa gelecek değer için kullanmış olduğum formül;
=EĞER(B5=B6;EĞER(C5=C6;EĞER(D5="C";EĞER(D6="T";(F5/(F5+(F6*1,6)))))))
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Bu durumda döngü kullanmak gerek sanırım.
Bu şekilde deneyin.

Veriniz çoksa biraz yavaş çalışabilir.

Kod:
Private Sub CommandButton1_Click()
Dim hv As Worksheet, i As Integer
Set hv = Sheets("HAM VERI")
son = hv.Range("A" & Rows.Count).End(3).Row

hv.[D3].Copy hv.Range("D4:D" & son)

For i = 3 To son

    Select Case hv.Range("C" & i)
        Case Is = "AS"
                Select Case hv.Range("D" & i)
                    Case Is = "C"
                        hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                    Case Is = "T"
                        hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                End Select
    
        Case Is = "C1o"
                Select Case hv.Range("D" & i)
                    Case Is = "C"
                        hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                    Case Is = "T"
                    hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                End Select
    End Select
Next

hv.Range("D3:I" & son).Value = hv.Range("D3:I" & son).Value

End Sub
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhaba sayın unlimitted,
Emekleriniz için çok ama çok teşekkür ederim gerçekten. Yalnız bu seferde sonuçların hepsini YANLIŞ olarak çıkartıyor. Şöyle ki ,
"D" sütununda hepsini "C" yapıyor ve "I" sütununda da sonuçlar YANLIŞ çıkıyor:-((





229442
 

Ekli dosyalar

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Merhaba,
Ben aslında kodlarla D sütununda bir işlem yaptırmıyorum. Sadece D3’te bulunan mevcut formülün son satıra kadar kopyalanmasını sağlıyorum.

Bu satırı silerek deneyin:

hv.[D3].Copy hv.Range("D4:D" & son

Siz veri olarak ilk 3 sütunu mu giriyorsunuz?
Yani D sütunundaki formülü de mi kodların yapmasını istiyorsunuz?
Ona göre revize edeyim.
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Merhaba,
Ben aslında kodlarla D sütununda bir işlem yaptırmıyorum. Sadece D3’te bulunan mevcut formülün son satıra kadar kopyalanmasını sağlıyorum.

Bu satırı silerek deneyin:

hv.[D3].Copy hv.Range("D4:D" & son

Siz veri olarak ilk 3 sütunu mu giriyorsunuz?
Yani D sütunundaki formülü de mi kodların yapmasını istiyorsunuz?
Ona göre revize edeyim.
Tekrar merhaba sayın "unlimitted",
Dediğinizi denedim fakat bu sefer de işlem yapmadı maalesef:-(

Mesajlar içerisinde karışıklık olmaması adına sorumu yeniden güncellemek istedim. Örnek dosyamı ve içerisinde orjinal çalışma sayfamı da ekledim. Tekrar bir özet mahiyetinde sorunumu yazmam gerekir ise ;
KURAL 1 :

"D" sütununda "C" yazar ise "I" sütununda geçerli olacak formülüm;

=EĞER(B3=B4;EĞER(C3=C4;EĞER(D3="C";EĞER(D4="T";(F3/(F3+(F4*1,6)))))))

"D" sütununda "T" yazar ise "I" sütununda geçerli olacak formülüm;

=EĞER(B4=B5;EĞER(C4=C5;EĞER(D4="C";EĞER(D5="T";(F4/(F4+(F5*1,6)))))))

*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.

KURAL 2:

"D" sütununda "G" yazar ise "I" sütununda geçerli olacak formülüm;

=EĞER(B5=B6;EĞER(C5=C6;EĞER(D5="C";EĞER(D6="T";(F5/(F5+(F6*2)))))))

"D" sütununda "A" yazar ise"I" sütununda geçerli olacak formülüm;

=EĞER(B6=B7;EĞER(C6=C7;EĞER(D6="C";EĞER(D7="T";(F6/(F6+(F7*2)))))))

*Formül doğru değil ise hücre değerine "YANLIŞ" yazıyor.
 

Ekli dosyalar

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Tekrar merhaba,

Kurallarda sorun yok o gayet net anlaşıldı. 4 farklı duruma göre kural var. Ve kodlar bunu oluşturuyor, sorun yok.
Şimdi sorun şu.
Sizin ilk verdiğiniz dosyadaki değerler ile son verdiğiniz farklı.
Kodlar ilk verdiğiniz dosyadaki duruma göre işlem yapıyor. (Denedim, sorunsuz)
Örneğin Ham veri sayfanızın Marker sütununda AS veya C1o değil (ilkinde bu şekilde vermiştiniz) komple kelime yazıyor.

Dolayısıyla kodlar çalışmaz.

ilk 4 satırı AS ve C1o'ya çevirin ve bahsettiğim satırı silin, çalıştığını göreceksiniz.
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Tekrar merhaba,

Kurallarda sorun yok o gayet net anlaşıldı. 4 farklı duruma göre kural var. Ve kodlar bunu oluşturuyor, sorun yok.
Şimdi sorun şu.
Sizin ilk verdiğiniz dosyadaki değerler ile son verdiğiniz farklı.
Kodlar ilk verdiğiniz dosyadaki duruma göre işlem yapıyor. (Denedim, sorunsuz)
Örneğin Ham veri sayfanızın Marker sütununda AS veya C1o değil (ilkinde bu şekilde vermiştiniz) komple kelime yazıyor.

Dolayısıyla kodlar çalışmaz.

ilk 4 satırı AS ve C1o'ya çevirin ve bahsettiğim satırı silin, çalıştığını göreceksiniz.
Çok pardon o kadar karıştı ki kafam :-(
Evet şimdi oldu gerçekten. Çok teşekkür ederim sayın unlimitted.
Şimdi ben aşağıdaki kod bloğunu çoğaltmamda sakınca olmaz dimi.Mesela "AS" yerine yaklaşık 10 adet daha başka allel grupları ekleyeceğim.
Birde son bir ricam olacaktı vaktinizi de alıyorum:-(
Kısa da olsa acaba kodların açıklamasını yazmanız mümkün müdür? Mesela [-6] bu değerler neyi ifade ediyor.
Kod:
Case Is = "AS"
                Select Case hv.Range("D" & i)
                    Case Is = "C"
                        hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                    Case Is = "T"
                        hv.Range("I" & i).Formula = "=IF(RC[-7]=R[1]C[-7],IF(RC[-6]=R[1]C[-6],IF(RC[-5]=""C"",IF(R[1]C[-5]=""T"",(RC[-3]/(RC[-3]+(R[1]C[-3]*1.6)))))))"
                End Select
 

GursoyC

Altın Üye
Katılım
7 Ocak 2015
Mesajlar
526
Excel Vers. ve Dili
2016 Türkçe
Altın Üyelik Bitiş Tarihi
17-05-2028
Kod bloklarını çoğaltabilirsiniz , hiçbir sıkıntı olmaz. Yalnız işlem sırasını doğru kurgulamanız gerekir.
RC[-6] açıklaması:

R:Row
C:Column

Row: aynı
Column: -6 (6 kolon soldaki değer)
RC[-6] : 6 kolon soldaki ve bu satırdaki hücre
 

yesimgurol

Altın Üye
Katılım
8 Aralık 2011
Mesajlar
942
Excel Vers. ve Dili
Excel 2016,32bit
Altın Üyelik Bitiş Tarihi
18-11-2024
Emeğinize, ilginize sağlık sayın unlimitted , istediğim şekilde oldu.
 
Üst