İki koşula göre üst grup kodu tanımlama

Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Merhabalar, ben bir formül yazmaya çalışıyorum ancak beceremiyorum. A sütununda ve B sütununda sayı formatında veriler var A da ya da B de benzer olanları E3 hücresinde gruplamak istiyorum. Formül E3 hücresine yazılacak ve aşağı doğru inecek.

Metin olarak şu şekilde: EĞER A3 hücresi A2:$A$1 aralığındaysa YADA B3 hücresi B3:$B$1 aralığındaysa E3 = eşleşmenin bulunduğu satırdaki E hücresi DEĞİLSE E3= E sütununa bak ve en büyük değere +1 ekle

şimdiden yardımlarınız için teşekkür ederim.
 

ÖmerFaruk

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2017
Mesajlar
4,662
Excel Vers. ve Dili
Microsoft 365 Tr-64
Sanki manual çözümü de içeren örnek bir dosyayla daha kolay anlaşılacak.
 

S.Yiğit

Destek Ekibi
Destek Ekibi
Katılım
1 Temmuz 2008
Mesajlar
1,748
Excel Vers. ve Dili
2019 TR
Bende yorum yapayım. Konu başlığını sorunuzu kısaca özetleyecek şekilde yazarsanız forum kirliliği olmamış olur, herkes Excel Formül yardım yazarsa nasıl olur? bir düşünelim.
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Bende yorum yapayım. Konu başlığını sorunuzu kısaca özetleyecek şekilde yazarsanız forum kirliliği olmamış olur, herkes Excel Formül yardım yazarsa nasıl olur? bir düşünelim.
Merhabalar, haklısınız ama detay bir başlık bulamadım maalesef. Şimdi değiştireyim diyorum, bir türlü bulamadım değiştirmeyi.
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Sanki manual çözümü de içeren örnek bir dosyayla daha kolay anlaşılacak.
Merhabalar, haklısınız ama dosya paylaşamıyorum, üyelik durumuyla ilgili olabilir. Metin içinde paylaşmayı deniyorum:


A1 B1 E1
25 5 1
32 5 1
39 5 1
46 5 1
53 5 1
60 5 1
67 5 1
74 5 1
81 5 1
88 5 1
95 5 1
102 5 1
109 5 1
116 5 1
123 5 1
130 5 1
137 5 1
144 5 1
151 5 1
158 5 1
165 5 1
172 5 1
179 5 1
186 5 1
193 5 1
200 5 1
207 5 1
214 5 1
221 5 1
228 5 1
235 52 1
242 52 1
249 52 1
256 52 1
263 52 1
270 52 1
277 52 1
284 52 1
291 52 1
298 52 1
305 52 1
221 52 1
312 12 2
319 12 2
326 12 2
333 12 2
340 12 2
347 12 2
354 12 2
361 12 2
368 12 2
375 12 2
382 39 3
389 39 3
396 39 3
403 39 3
410 39 3
417 39 3
424 39 3
431 39 3
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,510
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Harici dosya barındırma sitelerine örnek dosyanızı yükleyip linkini forumda paylaşabilirsiniz.

Ulaşmak istediğiniz sonucu da örnek dosyanıza eklerseniz daha net cevaplar alabilirsiniz.
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit

Korhan Ayhan

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

E2 hücresine uygulayınız.

C++:
=IF(COUNTIF($A$1:A1;A2)>0;VLOOKUP(A2;$A$1:E1;5;0);IF(COUNTIF($B$1:B1;B2)>0;VLOOKUP(B2;$B$1:E1;4;0);MAX($E$1:E1)+1))
IF = EĞER
COUNTIF = EĞERSAY
VLOOKUP = DÜŞEYARA
MAX = MAK
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Çok teşekkür ederim. Çözüm oldu ancak çok sayıda veride (excel halleri) patladı maalesef. Yine de çok öğretici oldu. Tekrar teşekkürler.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,510
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu durumda makro ile çözümlemek daha uygun görünüyor.
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Bu durumda makro ile çözümlemek daha uygun görünüyor.
Evet, haklısınız. Onu denedik burada, sağ olsunlar yardımcı oldular ve çözdük, ancak veri sayısı büyüdüğünde haliyle kitleniyor. O nedenle biraz önce çözümlü makrodan yola çıkarak access için bir konu açtım. Aslında becerebilsem makrodaki döngüyü sql diline çevirip dbaever'de ya da spss'de bunu yapmak.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,510
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Deneyin bakalım sizde çalışacak mı? Çok satırlı veri de çıkan sonucu bildirirseniz sevinirim.

C++:
Option Explicit

Sub Ust_Grup_Kodu_Tanimla()
    Dim Musteri_No As Object, Grup As Object, Veri As Variant
    Dim Kontrol1 As Boolean, Kontrol2 As Boolean, Maksimum As Long
    Dim X As Long, Son As Long, Say As Long, Zaman As Double
    
    Zaman = Timer
    
    Set Musteri_No = CreateObject("Scripting.Dictionary")
    Set Grup = CreateObject("Scripting.Dictionary")
    
    Son = Cells(Rows.Count, 1).End(3).Row
    If Son <= 2 Then Son = 3
    
    Veri = Range("A2:B" & Son).Value
    
    ReDim Liste(1 To Son, 1 To 1)
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Say = Say + 1
        If Musteri_No.Exists(CStr(Veri(X, 1))) Then
            Kontrol1 = True
        Else
            Musteri_No.Add CStr(Veri(X, 1)), Say
        End If
        
        If Grup.Exists(CStr(Veri(X, 2))) Then
            Kontrol2 = True
        Else
            Grup.Add CStr(Veri(X, 2)), Say
        End If
            
        If Kontrol1 = False And Kontrol2 = False Then
            Liste(Say, 1) = Maksimum + 1
        ElseIf Kontrol1 = True And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = True And Kontrol2 = False Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = False And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Grup.Item(CStr(Veri(X, 2))), 1)
        End If
        
        Maksimum = Liste(Say, 1)
        
        Kontrol1 = False
        Kontrol2 = False
    Next
    
    Set Musteri_No = Nothing
    Set Grup = Nothing
    
    If Say > 0 Then
        Range("E2").Resize(Say) = Liste
        MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
    Else
        MsgBox "Uygun veri bulunamadı!", vbExclamation
    End If
End Sub
 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Deneyin bakalım sizde çalışacak mı? Çok satırlı veri de çıkan sonucu bildirirseniz sevinirim.

C++:
Option Explicit

Sub Ust_Grup_Kodu_Tanimla()
    Dim Musteri_No As Object, Grup As Object, Veri As Variant
    Dim Kontrol1 As Boolean, Kontrol2 As Boolean, Maksimum As Long
    Dim X As Long, Son As Long, Say As Long, Zaman As Double
   
    Zaman = Timer
   
    Set Musteri_No = CreateObject("Scripting.Dictionary")
    Set Grup = CreateObject("Scripting.Dictionary")
   
    Son = Cells(Rows.Count, 1).End(3).Row
    If Son <= 2 Then Son = 3
   
    Veri = Range("A2:B" & Son).Value
   
    ReDim Liste(1 To Son, 1 To 1)
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Say = Say + 1
        If Musteri_No.Exists(CStr(Veri(X, 1))) Then
            Kontrol1 = True
        Else
            Musteri_No.Add CStr(Veri(X, 1)), Say
        End If
       
        If Grup.Exists(CStr(Veri(X, 2))) Then
            Kontrol2 = True
        Else
            Grup.Add CStr(Veri(X, 2)), Say
        End If
           
        If Kontrol1 = False And Kontrol2 = False Then
            Liste(Say, 1) = Maksimum + 1
        ElseIf Kontrol1 = True And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = True And Kontrol2 = False Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = False And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Grup.Item(CStr(Veri(X, 2))), 1)
        End If
       
        Maksimum = Liste(Say, 1)
       
        Kontrol1 = False
        Kontrol2 = False
    Next
   
    Set Musteri_No = Nothing
    Set Grup = Nothing
   
    If Say > 0 Then
        Range("E2").Resize(Say) = Liste
        MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
    Else
        MsgBox "Uygun veri bulunamadı!", vbExclamation
    End If
End Sub
Denedim, harika çalışıyor. Hızı da süper. Makroya ekleme yapmamız mümkün müdür acaba? Ben dosyayı yeniliyorum, içine açıklama ve olması gereken sütunu ekledim.

Amacım şu: Müşteriler var grupların içinde, zaten aynı gruba ait olan müşterilerin grup kodları var ama bazı müşteriler birden fazla farklı grubun içinde yer alıyorlar. İşte bu birden fazla farklı grup içinde yer alan müşterileri bulup, bu farklı grupları ve içindeki diğer müşterileri aynı üst grup çatısı altında işaretlemek istiyorum. Dosyanın linkini aşağıda paylaşıyorum.

 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Deneyin bakalım sizde çalışacak mı? Çok satırlı veri de çıkan sonucu bildirirseniz sevinirim.

C++:
Option Explicit

Sub Ust_Grup_Kodu_Tanimla()
    Dim Musteri_No As Object, Grup As Object, Veri As Variant
    Dim Kontrol1 As Boolean, Kontrol2 As Boolean, Maksimum As Long
    Dim X As Long, Son As Long, Say As Long, Zaman As Double
   
    Zaman = Timer
   
    Set Musteri_No = CreateObject("Scripting.Dictionary")
    Set Grup = CreateObject("Scripting.Dictionary")
   
    Son = Cells(Rows.Count, 1).End(3).Row
    If Son <= 2 Then Son = 3
   
    Veri = Range("A2:B" & Son).Value
   
    ReDim Liste(1 To Son, 1 To 1)
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Say = Say + 1
        If Musteri_No.Exists(CStr(Veri(X, 1))) Then
            Kontrol1 = True
        Else
            Musteri_No.Add CStr(Veri(X, 1)), Say
        End If
       
        If Grup.Exists(CStr(Veri(X, 2))) Then
            Kontrol2 = True
        Else
            Grup.Add CStr(Veri(X, 2)), Say
        End If
           
        If Kontrol1 = False And Kontrol2 = False Then
            Liste(Say, 1) = Maksimum + 1
        ElseIf Kontrol1 = True And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = True And Kontrol2 = False Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = False And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Grup.Item(CStr(Veri(X, 2))), 1)
        End If
       
        Maksimum = Liste(Say, 1)
       
        Kontrol1 = False
        Kontrol2 = False
    Next
   
    Set Musteri_No = Nothing
    Set Grup = Nothing
   
    If Say > 0 Then
        Range("E2").Resize(Say) = Liste
        MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
    Else
        MsgBox "Uygun veri bulunamadı!", vbExclamation
    End If
End Sub
Selamlar tekrar. Bir şekilde daha sanki çözebiliriz. Aşağıda grupların kros versiyorununu da paylaştım. İlgili sütun/satırlara açıklama ekledim. Formülün/kodun grup kodu bölümünde arama aralığına krosu da dahil ederek eşleşme sağlanan satırdaki Üst Grup hücresini getirtebilirsek bunu sanırım temelli çözmüş olucaz.

 
Katılım
27 Şubat 2020
Mesajlar
22
Excel Vers. ve Dili
2016 64 bit ve 2010 32 bit
Deneyin bakalım sizde çalışacak mı? Çok satırlı veri de çıkan sonucu bildirirseniz sevinirim.

C++:
Option Explicit

Sub Ust_Grup_Kodu_Tanimla()
    Dim Musteri_No As Object, Grup As Object, Veri As Variant
    Dim Kontrol1 As Boolean, Kontrol2 As Boolean, Maksimum As Long
    Dim X As Long, Son As Long, Say As Long, Zaman As Double
   
    Zaman = Timer
   
    Set Musteri_No = CreateObject("Scripting.Dictionary")
    Set Grup = CreateObject("Scripting.Dictionary")
   
    Son = Cells(Rows.Count, 1).End(3).Row
    If Son <= 2 Then Son = 3
   
    Veri = Range("A2:B" & Son).Value
   
    ReDim Liste(1 To Son, 1 To 1)
   
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Say = Say + 1
        If Musteri_No.Exists(CStr(Veri(X, 1))) Then
            Kontrol1 = True
        Else
            Musteri_No.Add CStr(Veri(X, 1)), Say
        End If
       
        If Grup.Exists(CStr(Veri(X, 2))) Then
            Kontrol2 = True
        Else
            Grup.Add CStr(Veri(X, 2)), Say
        End If
           
        If Kontrol1 = False And Kontrol2 = False Then
            Liste(Say, 1) = Maksimum + 1
        ElseIf Kontrol1 = True And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = True And Kontrol2 = False Then
            Liste(Say, 1) = Liste(Musteri_No.Item(CStr(Veri(X, 1))), 1)
        ElseIf Kontrol1 = False And Kontrol2 = True Then
            Liste(Say, 1) = Liste(Grup.Item(CStr(Veri(X, 2))), 1)
        End If
       
        Maksimum = Liste(Say, 1)
       
        Kontrol1 = False
        Kontrol2 = False
    Next
   
    Set Musteri_No = Nothing
    Set Grup = Nothing
   
    If Say > 0 Then
        Range("E2").Resize(Say) = Liste
        MsgBox "İşleminiz tamamlanmıştır." & vbLf & vbLf & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye"
    Else
        MsgBox "Uygun veri bulunamadı!", vbExclamation
    End If
End Sub
Merhabalar tekrar, muhtemelen yoğunsunuzdur ama bu son değişikliği yapabilirsek çok makbule geçecek. Listenin grup kodları kros ekli halini aşağıda paylaştım. İlgili sütun/satırlara detaylı açıklama da ekledim, kolay anlaşılır olsun diye. Yapmak istediğim şey: kodun, grup kodu bölümünde arama aralığına krosu da dahil ederek, eşleşme sağlanan satırdaki Üst Grup hücresini ilgili E hücresine getirmek. Yapabilirsek nihai çözümü de sağlamış olucaz. Emeğinize sağlık şimdiden.

Teşekkürler.

 
Üst