Korhan bey Yardımlarınız için tesekkur edrım fakat Plaka da Tc girşide bulunduugu için bu lurgu malesfkı olmamaktadır.Deneyiniz.
C++:=EĞER(YADA(H2="TEST";H2="TRANSFER";ESAYIYSA(SOLDAN(H2;2)*1));"";1)
DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
Altın Üyelik Hakkında Bilgi
Korhan bey Yardımlarınız için tesekkur edrım fakat Plaka da Tc girşide bulunduugu için bu lurgu malesfkı olmamaktadır.Deneyiniz.
C++:=EĞER(YADA(H2="TEST";H2="TRANSFER";ESAYIYSA(SOLDAN(H2;2)*1));"";1)
Murat bey Dogru tam istediğim bu şekilde Yardımlarınız için Çok tesekkur ederım.H sütununda Plaka, test, transfer olmayanların O sütunundaki karşılığına 1 yazar.
=EĞER(YADA(H2="TEST";H2="TRANSFER";VE(ESAYIYSA(SOLDAN(H2;2)*1);UZUNLUK(H2)>=7;UZUNLUK(H2)<=8));"";1)
Korhan bey,Çok pardon ben TC olayını atlamışım. Sanırım aşağıdaki şekilde işinizi görebilir.
C++:=EĞER(YADA(H2="TEST";H2="TRANSFER";VE(ESAYIYSA(SOLDAN(H2;2)*1);UZUNLUK(H2)>=7;UZUNLUK(H2)<=8));"";1)
Genel anlamda evet ama tabi canlı bir data olacagından bu satış yapan akaryakıt görevlisi ne girerse diyebilirim. Çok büyük bir data olacak bu 1 sutun bile azaltsam bana yararı olacaktır.Peki plakalarınız hep aşağıdaki yapıda mı?
ilk iki karakter sayı (İl kodu)
Sonraki 1-3 karaktere kadar harf (min 1 / max 3)
Son karakterler sayı (min 2 / max 4)
Option Explicit
Sub Plaka_Kontrol()
Dim VB_Regex As Object, Veri As Variant, Son As Long
Dim X As Long, Say As Long, Zaman As Double
Zaman = Timer
Set VB_Regex = CreateObject("Vbscript.Regexp")
VB_Regex.Pattern = "([0-9]{2,3})([A-Z]{1,3})([0-9]{2,4})"
VB_Regex.Global = True
On Error Resume Next
ActiveSheet.ListObjects(1).AutoFilter.ShowAllData
On Error GoTo 0
Son = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Veri = Range("A2:N" & Son).Value2
Range("O2:O" & Son).ClearContents
ReDim Liste(1 To Son, 1 To 1)
For X = LBound(Veri) To UBound(Veri)
Say = Say + 1
If Veri(X, 11) = "TTS" Then
Liste(Say, 1) = 0
ElseIf UCase(Veri(X, 8)) = "TRANSFER" Or UCase(Veri(X, 8)) = "TEST" Then
Liste(Say, 1) = Empty
ElseIf Len(Veri(X, 8)) < 6 Or Len(Veri(X, 8)) > 8 Then
Liste(Say, 1) = 1
ElseIf Veri(X, 13) >= 1000 And UCase(Veri(X, 8)) <> "TRANSFER" Then
Liste(Say, 1) = 1
Else
If VB_Regex.Test(Veri(X, 8)) Then
Liste(Say, 1) = Empty
Else
Liste(Say, 1) = 1
End If
End If
Next
If Say > 0 Then Range("O2").Resize(Say) = Liste
MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
"İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
Korcan Bey ,Veri sayınız çoksa makro kullanmanız daha mantıklı olacaktır.
Alternatif olarak aşağıdaki kodu deneyiniz.
C++:Option Explicit Sub Plaka_Kontrol() Dim VB_Regex As Object, Veri As Variant, Son As Long Dim X As Long, Say As Long, Zaman As Double Zaman = Timer Set VB_Regex = CreateObject("Vbscript.Regexp") VB_Regex.Pattern = "([0-9]{2,3})([A-Z]{1,3})([0-9]{2,4})" VB_Regex.Global = True On Error Resume Next ActiveSheet.ListObjects(1).AutoFilter.ShowAllData On Error GoTo 0 Son = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Veri = Range("A2:N" & Son).Value2 Range("O2:O" & Son).ClearContents ReDim Liste(1 To Son, 1 To 1) For X = LBound(Veri) To UBound(Veri) Say = Say + 1 If Veri(X, 11) = "TTS" Then Liste(Say, 1) = 0 ElseIf Len(Veri(X, 8)) < 6 Or Len(Veri(X, 8)) > 8 Then Liste(Say, 1) = 1 ElseIf Veri(X, 13) >= 1000 And UCase(Veri(X, 8)) <> "TRANSFER" Then Liste(Say, 1) = 1 Else If VB_Regex.Test(Veri(X, 8)) And UCase(Veri(X, 8)) <> "TRANSFER" And UCase(Veri(X, 8)) <> "TEST" Then Liste(Say, 1) = Empty Else Liste(Say, 1) = 1 End If End If Next If Say > 0 Then Range("O2").Resize(Say) = Liste MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _ "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation End Sub
olması gerekenler
Tüm sorgudan TTS satış tipi onalanlar muaf olucak direk onlarda 0 yazacak
Plaka Test Ve Transfer Harici satışlarda 1 yazması
Ayrıca
1000 Litre üzeri satışlarda Transfer hariclerinde de 1 yazması gerekmektedir.