Excel de aynı verilerin yanyana sıralanması

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Korhan Bey'in izniyle eğer Ofis 365 kullanıyorsanız D3 hücresinde aşağıdaki formül istediğiniz sonucu veriyor:

=METİNBİRLEŞTİR("|";DOĞRU;FİLTRE(Sayfa1!$B$2:$B$57;Sayfa1!$A$2:$A$57=A3;""))
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,453
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Üstteki mesajımdaki kodda küçük bir düzeltme yaptım. Son halini deneyiniz.
 

tahsinanarat

Altın Üye
Katılım
14 Mart 2005
Mesajlar
2,158
Excel Vers. ve Dili
Ofis 2019 Türkçe
Altın Üyelik Bitiş Tarihi
27-05-2028
Sn. @Korhan Ayhan Hocam elinize sağlık şimdi oldu, Çok teşekkür ediyorum.
Hocam eğer çok vaktinizi almayacaksa bir şey daha sormak istiyorum. Sayfa2 nin A sutunundaki isimleri Sayfa1 in B sutunundaki isimler ile (Sayfa1 de A sutunda Sicil, B sutununda İsim) karşılaştırıp Sayfa1 deki A sutununda bulunan Sicilleri birleştirmek istersek, kodda nasıl bir değişiklik yapmalıyız.
 

Ekli dosyalar

Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,453
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kod içindeki ilk X döngüsündeki Veri(X, 1) yazanları Veri(X, 2) yapın. Aynı şekilde Veri(X, 2) olanların Veri(X, 1) yapın. Yani sütunları yer değiştirin.
 

tahsinanarat

Altın Üye
Katılım
14 Mart 2005
Mesajlar
2,158
Excel Vers. ve Dili
Ofis 2019 Türkçe
Altın Üyelik Bitiş Tarihi
27-05-2028
Sn. @Korhan Ayhan Hallettim, Teşekkürler.
Kod:
Option Explicit

Sub Analiz()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object, Say As Long
    Dim Veri As Variant, Son As Long, X As Long, Zaman As Double

    Application.ScreenUpdating = False

    Zaman = Timer

    Set S1 = Sheets("Mukerrer")
    Set S2 = Sheets("SB_Arama")
    Set Dizi = CreateObject("Scripting.Dictionary")

    S2.Range("k:k").Clear

    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    Veri = S1.Range("A2:B" & Son).Value

    ReDim Liste_A(1 To Son, 1 To 1)

    For X = LBound(Veri) To UBound(Veri)
        If Not Dizi.Exists(Veri(X, 2)) Then
            Say = Say + 1
            Dizi.Add Veri(X, 2), Say
            Liste_A(Say, 1) = "" & Veri(X, 1)
        Else
            Liste_A(Dizi.Item(Veri(X, 2)), 1) = Liste_A(Dizi.Item(Veri(X, 2)), 1) & "-" & Veri(X, 1)
        End If
    Next

    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    Veri = S2.Range("A2:A" & Son).Value

    ReDim Liste_B(1 To Son, 1 To 1)
  
    For X = LBound(Veri) To UBound(Veri)
        If Dizi.Exists(Veri(X, 1)) Then
            Liste_B(X, 1) = Liste_A(Dizi.Item(Veri(X, 1)), 1)
        Else
            Liste_B(X, 1) = ""
        End If
    Next

    S2.Range("k2").Resize(Son) = Liste_B
    S2.Cells.HorizontalAlignment = xlLeft
    S2.Columns.AutoFit

    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    Application.ScreenUpdating = True

'    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
'           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 
Katılım
4 Haziran 2022
Mesajlar
2
Excel Vers. ve Dili
12
Alternatif;

Kod:
Option Explicit
Sub yan_sutunlara()
Dim a(), b(), c(), tbl(), d As Object, d1 As Object, deg As Variant
Dim i As Long, j As Byte, Say As Long, Sut_Liste(), Sut As Byte, s As Double
Sheets("Sayfa1").Activate
Application.ScreenUpdating = 0
s = TimeValue(Now)

Set d = CreateObject("scripting.dictionary")
Set d1 = CreateObject("scripting.dictionary")
a = Range("A2:B" & Cells(Rows.Count, 1).End(3).Row)

ReDim b(1 To UBound(a), 1 To 3)
    For i = 1 To UBound(a)
        If Not d.exists(a(i, 1)) Then
            Say = Say + 1
            d(a(i, 1)) = Say
            b(Say, 1) = a(i, 1)
        End If
        b(d(a(i, 1)), 2) = b(d(a(i, 1)), 2) & "|" & a(i, 2)
        b(d(a(i, 1)), 3) = b(d(a(i, 1)), 3) + 1
    Next i
   
tbl = Array(b)
    For i = 1 To d.Count
    deg = (tbl(0)(i, 3))
        If Not d1.exists(deg) Then
            d1(deg) = tbl(0)(i, 3)
        End If
    Next i
Sut_Liste = d1.keys
Sut = Application.Max(Sut_Liste)
ReDim c(1 To d.Count, 1 To Sut + 1)
Say = 0
    For i = 1 To d.Count
        Say = Say + 1
        c(Say, 1) = tbl(0)(i, 1)
        deg = Split(tbl(0)(i, 2), "|")
        For j = 1 To UBound(deg)
            c(Say, j + 1) = deg(j)
        Next j
    Next i
With Sheets("Sayfa2")
.Cells.ClearContents
.[A2].Resize(d.Count, Sut + 1).NumberFormat = "@"
.[A2].Resize(d.Count, Sut + 1) = c
.Cells.EntireColumn.AutoFit
.Select
End With
Application.ScreenUpdating = 1
MsgBox "İşleminiz tamamlandı..." & vbLf & vbLf & _
    CDate(TimeValue(Now) - s), vbInformation
End Sub

http://www.dosya.tc/server10/56ak7e/Kitap1-1.rar.html
Merhaba @Ziynettin hocam, verdiğiniz kodu ekledim evde çalışıyor ama isyerinde "object doesn't support property or method" şeklinde hata mesajı alıyorum. Bu sorunu nasıl çözebilirim?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,453
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İşyerinde kullandığınız işletim sistemi ve ofis sürümü nedir?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,453
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Çalışmaması için bir sebep görünmüyor.

Peki kodu çalıştırınca hangi satırda hata oluşuyor?
 

ruzzher

Altın Üye
Katılım
1 Şubat 2022
Mesajlar
32
Excel Vers. ve Dili
Excel 2019 ve 2016
Altın Üyelik Bitiş Tarihi
07-03-2028
Bunu nasıl kullanacağım. Sadece sayfa1 sayfam var ve veriler A B sütününda
Deneyiniz.

C++:
Option Explicit

Sub Analiz()
    Dim S1 As Worksheet, S2 As Worksheet, Dizi As Object, Say As Long
    Dim Veri As Variant, Son As Long, X As Long, Zaman As Double

    Application.ScreenUpdating = False

    Zaman = Timer

    Set S1 = Sheets("Sayfa1")
    Set S2 = Sheets("Sayfa2")
    Set Dizi = CreateObject("Scripting.Dictionary")

    S2.Range("D:D").Clear

    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    Veri = S1.Range("A2:B" & Son).Value

    ReDim Liste_A(1 To Son, 1 To 1)

    For X = LBound(Veri) To UBound(Veri)
        If Not Dizi.Exists(Veri(X, 1)) Then
            Say = Say + 1
            Dizi.Add Veri(X, 1), Say
            Liste_A(Say, 1) = "|" & Veri(X, 2)
        Else
            Liste_A(Dizi.Item(Veri(X, 1)), 1) = Liste_A(Dizi.Item(Veri(X, 1)), 1) & "|" & Veri(X, 2)
        End If
    Next

    Son = S2.Cells(S2.Rows.Count, 1).End(3).Row
    Veri = S2.Range("A2:A" & Son).Value

    ReDim Liste_B(1 To Son, 1 To 1)
  
    For X = LBound(Veri) To UBound(Veri)
        If Dizi.Exists(Veri(X, 1)) Then
            Liste_B(X, 1) = Liste_A(Dizi.Item(Veri(X, 1)), 1)
        Else
            Liste_B(X, 1) = "Bulunamadı!"
        End If
    Next

    S2.Range("D2").Resize(Son) = Liste_B
    S2.Cells.HorizontalAlignment = xlLeft
    S2.Columns.AutoFit

    Set S1 = Nothing
    Set S2 = Nothing
    Set Dizi = Nothing

    Application.ScreenUpdating = True

    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,453
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sayfa2'yi kendiniz ekleyip deneyebilirsiniz.
 
Üst