Soru Birden fazla sütuna bakarak "Select Case"

Katılım
3 Aralık 2015
Mesajlar
12
Excel Vers. ve Dili
2016 Eng/TR
Merhaba,

Aşağıdaki kullandığım kod ile j kolonuna bakıp eğer ok ya da x var ise otomatik p kolonuna tarih attırıyorum. Kalın ve kırmızı olarak yazdığım kod satırında sadece j kolonuna değil de J, K, L, M, N kolonlarına baksın hepsi OK ise tarih atsın istiyorum. Bu mümkün değilse herhangi birisi OK ise tarih atsın istiyorum.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [J1:N65536]) Is Nothing Then
For i = 1 To 65536

If Cells(i, "P") = "" Then
Select Case Cells(i, "J")
Case "OK"
Cells(i, "P") = Format(Date, "dd/mm/yyyy")
Case "ok"
Cells(i, "P") = Format(Date, "dd/mm/yyyy")
Case "Ok"
Cells(i, "P") = Format(Date, "dd/mm/yyyy")
Case "x"
Cells(i, "P") = Format(Date, "dd/mm/yyyy")
Case "X"
Cells(i, "P") = Format(Date, "dd/mm/yyyy")
End Select
Else: If Cells(i, "J") = "" Then Cells(i, "P") = ""

End If
Next

End If
End Sub
 

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
Neden case kullanıyorsunuz ki. İf ... And....and ... Then şeklinde yapın. Örnek dosya eklerseniz akşam yardımcı olmaya çalışayım.
 
Katılım
3 Aralık 2015
Mesajlar
12
Excel Vers. ve Dili
2016 Eng/TR
Neden case kullanıyorsunuz ki. İf ... And....and ... Then şeklinde yapın. Örnek dosya eklerseniz akşam yardımcı olmaya çalışayım.
Örnek dosyaya ihtiyacınız olacak bi konu değil ki olay sadece boş ve dolu bir hücrede geçen bir şey. Yüklesem de geri alamayacağım için yüklememe gerek yok. örnekte gönderdiğim kodu if ile yazamadım hatalar aldım eğer yapabiliyorsanız if e çevirip paylaşabilirsiniz. Teşekkürler.
 

Korhan Ayhan

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

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("J1:N65536")) Is Nothing Then
    For i = 1 To 65536
        If Cells(i, "P") = "" Then
            Say = Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "OK")
            If Say = 5 Then Cells(i, "P") = CDate(Format(Date, "dd/mm/yyyy"))
        Else
            If Cells(i, "J") = "" Then Cells(i, "P") = ""
        End If
    Next
    End If
End Sub
 

Korhan Ayhan

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

İlgili alandaki sütun sayısı 5 tir. Hem "X" hem de "OK" yazıp toplamı 5 olunca kodun çalışmasını isterseniz aşağıdaki gibi deneyebilirsiniz.

Kod:
Say = Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "OK") + Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "X")
 
Katılım
3 Aralık 2015
Mesajlar
12
Excel Vers. ve Dili
2016 Eng/TR
Merhaba,

İlgili alandaki sütun sayısı 5 tir. Hem "X" hem de "OK" yazıp toplamı 5 olunca kodun çalışmasını isterseniz aşağıdaki gibi deneyebilirsiniz.

Kod:
Say = Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "OK") + Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "X")
Teşekkür ederim işe yaradı fakat kodların tamamını yazıp excel i kullandığımda acayip bir yavaşlama yaşıyorum. Nedeni nedir? Çözümü var mıdır?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,327
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sebebi şu;

"i" isimli göngünüzü 65536 satırı kontrol edecek şekilde düzenlemişsiniz.

Yani siz sayfada her hücre seçimi yaptığınızda bu 65536 satır kontrol ediliyor.

Kodu aşağıdaki şekilde değiştirirseniz bir nebze hızlanır. Fakat tam verim vermeyebilir. Hız için kod yapısını satır bazlı değiştirmek gerekir.

Kod:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    If Not Intersect(Target, Range("J1:N65536")) Is Nothing Then
    For i = 1 To 65536
        If Cells(i, "P") = "" Then
            Say = Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "OK") + Application.WorksheetFunction.CountIf(Range("J" & i & ":N" & i), "X")
            If Say = 5 Then Cells(i, "P") = CDate(Format(Date, "dd/mm/yyyy"))
        Else
            If Cells(i, "J") = "" Then Cells(i, "P") = ""
        End If
    Next
    End If
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 
Üst