Soru Hücreye Değerine Göre Makro Çalışsın

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Makro adları olarak 4 tane Makrom var.

Makro1-Makro2-Makro3-Makro4

AJ4 Hücresi "31" yazıyosa Makro1 çalışsın
AJ4 Hücresi "Aylık Ok." yazıyorsa Makro2 çalışsın
Aj4 Hücresi Boşsa bişey yoksa Makro3 çalışsın
Aj4 Hücresi "Toplam" yazıyorsa Makro4 çalışsın

Teşekkürler
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Şu kodu buldum ama bu tek koşullu..
Aşağıdaki kodun mantığına uygun 4 koşullu nasıl düzenleyebiliriz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If [AJ4] = "31" Then Call Makro1
End Sub
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "AJ4" Then
        deg = Array(31, "Aylık Ok", "", "Toplam")
        For i = 0 To UBound(deg)
            If Target = deg(i) Then
                Run ("makro" & i + 1)
            End If
        Next i
    End If
End Sub
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Tamda bu kodun üzerinde çalışıyordum hemen deniyorum.. Teşekkür ederim..
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Ben bunu butona atamıştım sayfaya değil şu hata verdi
1568676726233.png
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Tamam sayfaya uyguladım ama Hücreye makro kodlarla o değerler (31, "Aylık Ok", "", "Toplam") atandığından çalışmadı. Elle girince çalışıyor. Yada hücreye girip F2 ile enterleyince çalışıyor. Nasıl yapabiliriz?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,455
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
AJ4 hücresi değeri nasıl alıyor?
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
AJ4 hücresi değeri nasıl alıyor?
Yenile butonuna bağlı kodlarla alıyor.
Koyu renkli kod ile
Next i
.Cells(1, 3) = Worksheets("Ayar").Cells(8, 1) 'İlçe / İL
.Cells(2, 3) = Worksheets("Ayar").Cells(7, 1) 'Kurumu

.Cells(3, 6) = "GÜNLÜK OKUTULAN DERS SAATLERİ"
.Range(.Cells(3, 6), .Cells(3, i + 4)).Merge
.Range(.Cells(3, 6), .Cells(3, i + 4)).HorizontalAlignment = xlCenter
.Cells(1, 6) = "EK DERS ÜCRETLERİ ÇİZELGESİ" & Chr(10) & "(4/B SÖZLEŞMELİ ÖĞRETMENLER)"
.Range(.Cells(1, 6), .Cells(2, i)).Merge
.Range(.Cells(1, 6), .Cells(2, i)).HorizontalAlignment = xlCenter
.Range(.Cells(1, 6), .Cells(2, i)).Font.Size = 14
.Cells(4, i + 5) = "Aylık Ok."
.Cells(4, i + 5).HorizontalAlignment = xlCenter
.Cells(4, i + 5).ColumnWidth = 6
.Cells(4, i + 6) = "Toplam"
.Cells(4, i + 6).HorizontalAlignment = xlCenter
.Cells(4, i + 6).ColumnWidth = 6
.Cells(3, i + 5) = "Ders Saati"
.Cells(3, i + 5).HorizontalAlignment = xlCenter
.Range(.Cells(3, i + 5), .Cells(3, i + 6)).Merge
.Cells(1, i + 1) = "AY"
.Cells(1, i + 1).HorizontalAlignment = xlCenter
Range(.Cells(1, i + 1), .Cells(1, i + 4)).Merge
.Cells(2, i + 1) = "YIL"
 
Son düzenleme:

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
birde 31 olarak yazdığım değerdeki hücre tarihmş. 31/10/2019 şeklinde içeriği ama görünümü 31.. Bunuda sayı olarak görmediğinden çalışmıyor. Diğerleri çalışıyor metin olanlar ..tek sıkıntı hücre içine girip yenileyince çalışıyor
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Koddaki 31 değeri, hücrede tarih olduğu için algılamıyor..
1568678858149.png
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
AJ4 Hücresi 31 çeken aylarda "31" geliyor ama tarih formatında, 30 çeken aylarda AJ4 hücresine sütun kayması nedeniyle "Aylık Ok." metni geliyor. 29 çeken aylarda AJ4 hücresine "Toplam" metni denk geliyor. 28 çeken aylarda AJ4 hücresi boş, yani hiçbir şey gelmiyor.
Bu nedenle o kodu istedim.
Bir başka kodum ise AJ4 hücresini referans alarak bordro oluşturyor. O nedenle AJ4 hücresini değiştiremiyorum..

Bu kod çalıştı. Tek sıkıntı içine dubleclick yaparsam makro1-2-3-4 hangisi çalışması gerekiyorsa çalışıyor..

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "AJ4" Then
        deg = Array(31, "Aylık Ok.", "", "Toplam")
        For i = 0 To UBound(deg)
            If Target = deg(i) Then
                Run ("makro" & i + 1)
            End If
        Next i
    End If

End Sub
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
31 rakamını tarih formatı göremediği için bir o makro çalışmadı. Onu nasıl yapacağım bilemiyorum..

Diğerlerini Yenile kodunu bağladım sorun halloldu EMeği geçenlere çok teşekkür ederim.

PHP:
Sub yenile()
Range("AJ4").Select 'Seçilen satırdaki aj4 hücresini seçer.
SendKeys "{F2}" ' Seçilen hücrede f2 tuşunu tetikler
SendKeys "{ENTER}" ' Seçilen hücreyi enter ile geçer
End Sub
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,455
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kullanmış olduğunuz YENİLE makro kodlarınızı aşağıdaki gibi düzenleyip deneyiniz.

Kod:
Sub Yenile()
    'Yenile makro kodlarınız..
    'Yenile makro kodlarınız..
    'Yenile makro kodlarınız..
   
    If IsDate(Range("AJ4")) Then
        Select Case Day(Range("AJ4"))
            Case 14, 31: Call Makro1
        End Select    
    Else
    Select Case Range("AJ4")
        Case "Aylık Ok.": Call Makro2
        Case Empty: Call Makro3
        Case "Toplam": Call Makro4
    End Select
    EndIf
End Sub
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Kullanmış olduğunuz YENİLE makro kodlarınızı aşağıdaki gibi düzenleyip deneyiniz.

Kod:
Sub Yenile()
    'Yenile makro kodlarınız..
    'Yenile makro kodlarınız..
    'Yenile makro kodlarınız..
   
    If IsDate(Range("AJ4")) Then
        If Day(Range("AJ4")) = 31 Then Call Makro1
    End If
    Select Case Range("AJ4")
        Case "Aylık Ok.": Call Makro2
        Case Empty: Call Makro3
        Case "Toplam": Call Makro4
    End Select
End Sub
Hocam çok teşekkür ederim hepinizin sayesinde sorun halloldu. Herkese teşekkür ederim. Özellikle yapım aşamsında ilk öncü kod olarak tasarlayan @muygun hocamada ayrıca teşekkür ederim..

Yalnız,
Korhan hocam tek bir sıkıntı kaldı..kodlardaki 31 sayısı için sayısal olarak kodlar çalışıyor ama 31 sayısı hücrede 31 görünsede aslında 31/mm/yyyy olarak görünüyor. Bu nedenle kod 31 sayısını göremediğinden algılamıyor. Kodun bunu 31/mm/yyyy şeklinde görmesi için ne yapabiliriz..
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Tamam kodlardaki tarih formatını referans alıyormuş. Ama bir hata oluşuyor. 31 olan AJ4 hücresinde değerleri yazıyor ama sonra atlama yapıyor.AH sütunun değerlerini getiriyor.
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
31 olan ayda önce makro1 çalışıyor ama sonra en son makro3 çalıştırıyor..
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Düzelttim

If IsDate(Range("AJ4")) Then
If Day(Range("AJ4")) = 31 Then Call makro1
Else
Select Case Range("AJ4")
Case "Aylık Ok.": Call makro2
Case Empty: Call makro3
Case "Toplam": Call makro4
End Select
End If

else olmayınca diğer kodlar devreye giriyordu.. Offf çok şükür
 

htsumer

Altın Üye
Altın Üye
Katılım
7 Eylül 2004
Mesajlar
941
Excel Vers. ve Dili
Excel-2003
Altın Üyelik Bitiş Tarihi
16.08.2026
Düzelttim

If IsDate(Range("AJ4")) Then
If Day(Range("AJ4")) = 31 Then Call makro1
Else
Select Case Range("AJ4")
Case "Aylık Ok.": Call makro2
Case Empty: Call makro3
Case "Toplam": Call makro4
End Select
End If

else olmayınca diğer kodlar devreye giriyordu.. Offf çok şükür

Bu kodlar tamamdı. Fakat bir sorgu daha olması gerekiyor. AJ hücresi 14 ise Makro1 çalışsın. Bunuda ekleyebilirmiyiz bu makroya
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,455
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
#13 nolu mesajında ki kodu revize ettim. Tekrar deneyiniz.
 
Üst