Hücreye Veri Girişinin Engellenmesi

mijuf

Altın Üye
Katılım
17 Aralık 2021
Mesajlar
13
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
14-03-2027
Merhaba,
Mümkünse bir ricam olacak. Elimdeki tabloda B2 hücresinden itibaren B sütununun tamamına bir veri girişi olması durumunda C sütunundaki karşılık hücreye bir veri girişinin engellenmesi gibi bir ihtiyacım var.

Ben eğer B2 hücresine bir veri girdiysem C2 hücresinin veri girişine açık olması, boş bıraktıysam C2'nin kilitli (veri girişine müsade edilmemesi) gibi bir imkan var mı?

Veri doğrulama olarak denedim ama olmadı.

İyi akşamlar.
 

Korhan Ayhan

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

Ekteki örnek dosyayı inceleyiniz.

Dosyada iki sayfa var. İlk sayfada VERİ DOĞRULAMA uygulanmıştır. İkinci sayfada ise işlem MAKRO ile yapılmaktadır.

Dilediğinizi kullanabilirsiniz.
 

Ekli dosyalar

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,496
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Resimdeki gibi dener misiniz?
Geç kalmışım :)

245230
 

mijuf

Altın Üye
Katılım
17 Aralık 2021
Mesajlar
13
Excel Vers. ve Dili
2016
Altın Üyelik Bitiş Tarihi
14-03-2027
Merhaba Korhan Bey ve Necdet Bey.

Çok teşekkür ederim :)
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Hayırlı sabahlar eski bir konu ama Korhan Hocam bu kodları B sütunundan başlayarak Z harfine veya istediğimiz bir sütuna kadar bir önceki hücre boş ise veri girilemez şeklinde uyarlamak mümkün mü? A boş ise B ye B boş ise C ye veri girilemez şeklinde düzenlenmesi mümkün mü?
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,550
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
Bu kod ile, belirttiğiniz gibi, A sütunundaki bir hücre boşsa, B sütununa veri giremez. Eğer B sütunu boşsa, C sütununa veri giremez. Bu mantık tüm sütunlar için geçerlidir ve ihtiyaca göre kolayca uyarlanabilir.


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sütun As Long
    Dim Satır As Long

    ' Değişiklik yapılan hücrenin sütun numarasını belirleyelim
    Sütun = Target.Column
    Satır = Target.Row

    ' Sadece B2:Z1000 hücrelerini kontrol etmek için
    If Sütun >= 2 And Sütun <= 26 And Satır >= 1 Then
        ' Eğer B sütunundaki hücre boşsa, C sütununa veri girilemez
        If Sütun = 2 And IsEmpty(Cells(Satır, 1).Value) Then
            MsgBox "A sütunundaki hücre boş olduğu için B sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' B sütununa yazılan değeri temizle
            Application.EnableEvents = True
            Exit Sub
        End If
        
        ' Eğer C sütunundaki hücre boşsa, D sütununa veri girilemez
        If Sütun = 3 And IsEmpty(Cells(Satır, 2).Value) Then
            MsgBox "B sütunundaki hücre boş olduğu için C sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' C sütununa yazılan değeri temizle
            Application.EnableEvents = True
            Exit Sub
        End If
        
        ' Bu mantığı diğer sütunlar için de devam ettirebiliriz:
        If Sütun > 2 And IsEmpty(Cells(Satır, Sütun - 1).Value) Then
            MsgBox Chr(64 + Sütun - 1) & " sütunundaki hücre boş olduğu için " & Chr(64 + Sütun) & " sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' Hedef hücreyi temizle
            Application.EnableEvents = True
            Exit Sub
        End If
    End If
End Sub

  • Excel dosyanızı açın.
  • Alt + F11 tuşlarına basarak VBA editörünü açın.
  • Sol taraftaki "VBAProject" penceresinde, çalıştığınız sayfayı (örneğin Sheet1) seçin.
  • Sağ tıklayın ve "View Code" seçeneğine tıklayın.
  • Aşağıdaki kodu açılan pencerede yapıştırın.
Kullanım:
  • Bu VBA kodu, A, B, C... Z sütunları arasında B sütunundan başlayarak, bir hücreye veri girilmeden önce önceki hücrenin boş olup olmadığını kontrol eder.
  • Eğer boşsa, o hücreye veri girişi engellenir ve kullanıcıya uyarı mesajı gösterilir.
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Cems hocam emeğine sağlık çok teşekkür ederim. küçük bir sorum daha olacak boş hücre uyarısını verdikten sonra imleci o boş olan hücreye atabilir mi? B sütunu hücresi boş dediğinde örneğin B10 hücresi ise o hücreye dönüş yapabilir mi?
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,496
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Alternatif olsun.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.Select
End If

End Sub
 

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,550
Excel Vers. ve Dili
office 2010 tr 32bit
Altın Üyelik Bitiş Tarihi
13-06-2029
boş hücre uyarısını verdikten sonra, imleci boş olan hücreye yönlendirebilirsiniz. Bunun içinTarget değil Application.Goto kullanmak dogru olur


Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Sütun As Long
    Dim Satır As Long

    ' Değişiklik yapılan hücrenin sütun numarasını belirleyelim
    Sütun = Target.Column
    Satır = Target.Row

    ' Sadece B2:Z1000 hücrelerini kontrol etmek için
    If Sütun >= 2 And Sütun <= 26 And Satır >= 1 Then
        ' Eğer B sütunundaki hücre boşsa, A sütununa bakılır
        If Sütun = 2 And IsEmpty(Cells(Satır, 1).Value) Then
            MsgBox "A sütunundaki hücre boş olduğu için B sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' B sütununa yazılan değeri temizle
            Application.EnableEvents = True
            ' B sütunundaki o hücreye odaklanalım
            Application.Goto Cells(Satır, 2)
            Exit Sub
        End If
        
        ' Eğer C sütunundaki hücre boşsa, B sütununa bakılır
        If Sütun = 3 And IsEmpty(Cells(Satır, 2).Value) Then
            MsgBox "B sütunundaki hücre boş olduğu için C sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' C sütununa yazılan değeri temizle
            Application.EnableEvents = True
            ' C sütunundaki o hücreye odaklanalım
            Application.Goto Cells(Satır, 3)
            Exit Sub
        End If
        
        ' Bu mantığı diğer sütunlar için de devam ettirebiliriz:
        If Sütun > 2 And IsEmpty(Cells(Satır, Sütun - 1).Value) Then
            MsgBox Chr(64 + Sütun - 1) & " sütunundaki hücre boş olduğu için " & Chr(64 + Sütun) & " sütununa veri giremezsiniz.", vbExclamation
            Application.EnableEvents = False
            Target.ClearContents ' Hedef hücreyi temizle
            Application.EnableEvents = True
            ' İlgili hücreye odaklanalım
            Application.Goto Cells(Satır, Sütun - 1)
            Exit Sub
        End If
    End If
End Sub
Dener ve sonucu bildirirseniz sevinirim. Bu arada çok değerli Sayın @Necdet kodu baya kısaltmış şimdi farkettim :)
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Cemss hocam emeğine sağlık çok güzel çalışıyor. çok sağolasın Necdet Hocam sizede çok teşekkür ederim kısa ve öz ancak sizin kodlarınızda da sol hücreğe değil aynı hücre de kalıyor boş olarak belirttiği hücreye imleci atabilir miyiz. Sayın Cemss hocamın belirttiği şekil bu kodu Application.Goto yapmaya çalıştım ancak yapamadım.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,496
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Sanırım siz satırda ilk boş hücreyi seçsin istiyorsunuz. Eğer öyle ise aşağıdaki kodu kullanabilirsiniz.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.End(xlToLeft).Offset(0, 1).Activate
End If

End Sub
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
çok daha iyi olmuş Necdet Hocam emeğine sağlık istediğim veri girilen hücreden önceki hücre boş ise imlecin oraya gitmesi idi ancak böyle daha güzel komple satırı kontrol etmiş oluyor çok teşekkür ederim
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,496
Excel Vers. ve Dili
Ofis 365 Türkçe
Aslında kodları WorkSheetChange olayında değil Worksheet_SelectionChange olayında olursa doğrudan boş hücreye veri giriş yapar hale gelirsiniz.
Onu da siz yaparsınız artık.
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Worksheet_SelectionChange bu şekilde aynı sayfada başka kodlar başlıyor hocam o zaman da debug hatası veriyor ki onu benim uyarlamam çok zor bu şekil ziyadesiyle işimi görüyor çok sağolasın
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Necdet hocam A sütununa veri girdiğim de
If Target.Column > 1 And Target.Offset(0, -1) = "" Then
bu satırda hata var diyor A sütununa daha önce veri girilmiş ise veya A sütunu boş bırakılırsa sorunsuz çalışıyor
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,496
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
ilk kontkrolde target.row demişim aslında target.column olmalıydı

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column < 2 Or Target.Value = "" Then Exit Sub

If Target.Column > 1 And Target.Offset(0, -1) = "" Then
    MsgBox "Sol Hücre Dolu Değil.....", vbInformation
    Target.Value = ""
    Target.End(xlToLeft).Offset(0, 1).Activate
End If

End Sub
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
399
Excel Vers. ve Dili
office 2016 Türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Necdet hocam 10 gündür şehir dışında idim bakamamıştım emeğine sağlık çok teşekkür ediyorum. Geç dönüş yaptığım için kusura kalma
 
Üst