Şarta bağlı otomatik veri girişi (VBA)

Katılım
5 Mart 2018
Mesajlar
34
Excel Vers. ve Dili
2016
Merhabalar

Benim bir tablom var arkadaşlar. Bu tabloda yer alan 2.Sheette firmalara bir kod tanımlıyorum. 1.Sheete de takip için bir veri girişi yapıyorum. Benim istediğim şey ise şu;

1.Sheette A sütununa firma ismini yazdıktan sonra eğer B sütununda veri girişi var ise C sütununa o firmaya benim tanımlamış oluğum kodu otomatik getirsin. B sütunu boş ise C sütununu da boş bıraksın ben kendim istediğimi yazayım. Bunu Eğer ile yapabilirsin diyeceksiniz. Ben bunu VBA ile yapmak istiyorum ama beceremedim. yardımcı olabilir misiniz?

Dosya Linki;

Çalışma örneği;
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Tablo sayfasının kod bölümüne aşağıdaki kodu kopyalayıp deneyiniz...
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B:B"), Target) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Target.Offset(0, -1).Text) = 0 Then
    MsgBox Target.Offset(0, -1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical
Else
    Target.Offset(0, 1).Value = Sayfa2.Range("A:A").Find(Target.Offset(0, -1).Text).Offset(0, 1).Value
End If
End Sub
 
Katılım
5 Mart 2018
Mesajlar
34
Excel Vers. ve Dili
2016
Hocam istediğim oldu ancak ben a ve b sütununa anlık veri değişimleri veya silme yaptığımda c sütununun da anlık değişmesini istiyorum. Bu kodla ilk girdiğim gibi kalıyor silme yaptığımda c sütunu sabit kalıyor.



Merhaba,
Tablo sayfasının kod bölümüne aşağıdaki kodu kopyalayıp deneyiniz...
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B:B"), Target) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Target.Offset(0, -1).Text) = 0 Then
    MsgBox Target.Offset(0, -1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical
Else
    Target.Offset(0, 1).Value = Sayfa2.Range("A:A").Find(Target.Offset(0, -1).Text).Offset(0, 1).Value
End If
End Sub
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
If Target.Value = "" Then Exit Sub
satırını aşağıdaki ile değiştirirseniz b sütunundaki veriyi silince c sütunu da silinir.
If Target.Value = "" Then Target.Offset(0,1).ClearContents
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Doğrudur, haklısınız.
Denemeden ezberden yazmıştım, bir mantık hatası yapmışım...
Aşağıdaki şekilde deneyiniz...
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("B:B"), Target) Is Nothing Then Exit Sub
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then
    Target.Offset(0, 1).ClearContents
ElseIf WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Target.Offset(0, -1).Text) = 0 Then
    MsgBox Target.Offset(0, -1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical
Else
    Target.Offset(0, 1).Value = Sayfa2.Range("A:A").Find(Target.Offset(0, -1).Text).Offset(0, 1).Value
End If
End Sub
 
Katılım
5 Mart 2018
Mesajlar
34
Excel Vers. ve Dili
2016
Ho
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Range("B:B"), Target) Is Nothing Then Exit Sub If Target.Cells.Count > 1 Then Exit Sub If Target.Value = "" Then Target.Offset(0, 1).ClearContents ElseIf WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Target.Offset(0, -1).Text) = 0 Then MsgBox Target.Offset(0, -1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical Else Target.Offset(0, 1).Value = Sayfa2.Range("A:A").Find(Target.Offset(0, -1).Text).Offset(0, 1).Value End If End Sub
Hocam B sütununda yaptığım değişikliği görüp kodu çalıştırıyor. Ancak A sütununda yaptığım değişikliği kontrol etmiyor. Aynı B deki gibi kod tekrar çalışsın istiyorum :(
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Tekrar merhaba,
Anlaşılan ben sizin isteğinizi eksik anlamışım, yanlış yönlendirdiğim için kusuruma bakmayın.
Dosyanızdaki kodları aşağıdaki kodlarla değiştirip yeniden deneyiniz.
İyi çalışmalar...
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As Long
If Not Intersect(Me.Range("A:B"), Target) Is Nothing Then
    s = Target.Row
    If Me.Cells(s, 1) = "" Or Me.Cells(s, 2) = "" Then
        Me.Cells(s, 3).ClearContents
    ElseIf WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Me.Cells(s, 1).Text) = 0 Then
        MsgBox Me.Cells(s, 1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical
    Else
        Me.Cells(s, 3).Value = Sayfa2.Range("A:A").Find(Me.Cells(s, 1).Text).Offset(0, 1).Value
    End If
End If
End Sub
 
Katılım
5 Mart 2018
Mesajlar
34
Excel Vers. ve Dili
2016
Private Sub Worksheet_Change(ByVal Target As Range) Dim s As Long If Not Intersect(Me.Range("A:B"), Target) Is Nothing Then s = Target.Row If Me.Cells(s, 1) = "" Or Me.Cells(s, 2) = "" Then Me.Cells(s, 3).ClearContents ElseIf WorksheetFunction.CountIf(Sayfa2.Range("A:A"), Me.Cells(s, 1).Text) = 0 Then MsgBox Me.Cells(s, 1).Text & " değeri " & Sayfa2.Name & " sayfasında bulunamadı.", vbCritical Else Me.Cells(s, 3).Value = Sayfa2.Range("A:A").Find(Me.Cells(s, 1).Text).Offset(0, 1).Value End If End If End Sub
Hocam Allah razı olsun. Ne muradın varsa versin :) Çok teşekkür ederim. Çok zahmet verdim hakkını helal et :)
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,405
Excel Vers. ve Dili
2007 Türkçe
Allah hepimizden razı olsun,
İyi çalışmalar...
 
Üst