Excel de aynı verilerin yanyana sıralanması

Katılım
3 Mart 2017
Mesajlar
8
Excel Vers. ve Dili
office 2010 tr
Merhaba, arkadaşlar excel verilerimde aşağıda ki gibi bir işlem yapmak istiyorum. Bir formülü var mıdır.

Mevcut:

XX 01001 976411
XX 01001 980224
YY 01002 1128
YY 01002 1234

Yapmak İstediğim:

XX 01001 976411,980224
YY 01002 1128,1234
 
Katılım
6 Mart 2005
Mesajlar
6,238
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Sorudan anladığım kadar ,örnekler A sütunda A1 hücresinden başladığı düşünüldü:Çözüm yardımcı sütun kullanılarak; C1 hücresine kopyalayınız ve çekerek çoğaltınız
Kod:
=SOLDAN($A1;2)
B1 hücresine kopyalayıp çekerek çoğaltınız.
Kod:
=EĞERHATA(EĞER(ESAYIYSA(EĞER(EĞERSAY($C$1:C1;C1)>1;KAÇINCI(C1;$C$1:C1;0)));DOLAYLI("A"&KAÇINCI(C1;$C$1:C1;0))&","&PARÇAAL(A1;BUL("*";YERİNEKOY(A1;" ";"*";2));UZUNLUK(A1));"");"")
 
Katılım
3 Mart 2017
Mesajlar
8
Excel Vers. ve Dili
office 2010 tr
Merhaba
Mevcut excel yapım şu şekilde;
Her stok Numarasını karşısında OEM numaraları yazıyor.
Bir stoka ait 3 eom var diğer stoğun da 2 oem numarası var.
https://hizliresim.com/g99Ppb

Amacım aşağıda ki gibi referans numaralarına göre OEM numaralarını yan sütunlarda açmak.

https://hizliresim.com/d77LNr


Sorudan anladığım kadar ,örnekler A sütunda A1 hücresinden başladığı düşünüldü:Çözüm yardımcı sütun kullanılarak; C1 hücresine kopyalayınız ve çekerek çoğaltınız
Kod:
=SOLDAN($A1;2)
B1 hücresine kopyalayıp çekerek çoğaltınız.
Kod:
=EĞERHATA(EĞER(ESAYIYSA(EĞER(EĞERSAY($C$1:C1;C1)>1;KAÇINCI(C1;$C$1:C1;0)));DOLAYLI("A"&KAÇINCI(C1;$C$1:C1;0))&","&PARÇAAL(A1;BUL("*";YERİNEKOY(A1;" ";"*";2));UZUNLUK(A1));"");"")
 
Katılım
6 Mart 2005
Mesajlar
6,238
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Merhaba, dosyam ektedir. Sizin verdiğiniz formülü uyguladım olmadı.
Dosyanızın 100000 satırdan fazla olduğunu belirtinde , çözüm üretmeye çalışan insanlarda ona göre çözüm üretsin ve ne yapamak istediğinizide resimden önce dosya ile gönderseydiniz çok daha güzel olurdu.İyi günler.:eek:
 

Emir Hüseyin Çoban

Destek Ekibi
Destek Ekibi
Katılım
11 Ağustos 2008
Mesajlar
5,893
Excel Vers. ve Dili
Office 2013 Tr - Win10 x64
. . .

Dosyanız ektedir.
Ortalama işlem süresi 3-3.5 Dk...

Ekran Görüntüsü:


Kod:
Sub KOD()
    Application.ScreenUpdating = False
    Dim SD As Worksheet: Set SD = Sheets("Sayfa1")
    Dim SO As Worksheet: Set SO = Sheets("Sayfa2")
    Dim liste(), dizi()

    son = SD.Cells(Rows.Count, "A").End(3).Row
    SD.Range("A2:B" & son).Sort SD.Range("A2"), xlAscending
    liste = SD.Range("A1:B" & son).Value
    Set dic = CreateObject("scripting.dictionary")

    For x = 1 To UBound(liste, 1)
        aranan = liste(x, 1)
        If Not dic.exists(aranan) Then
            dic.Add aranan, ""
        End If

    Next x

    SO.Cells.ClearContents
    SO.Range("A1").Resize(dic.Count, 1) = Application.Transpose(dic.keys)
    SO.Range("B1") = "Oem_No > > > "

    For i = 2 To SO.Cells(Rows.Count, "A").End(3).Row
        ilk = WorksheetFunction.Match(SO.Cells(i, "A"), SD.Range("A:A"), 0)
        son = WorksheetFunction.CountIf(SD.Range("A:A"), SO.Cells(i, "A")) + ilk - 1

        SD.Range("B" & ilk & ":B" & son).Copy
        SO.Cells(i, "B").PasteSpecial _
                Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=True, Transpose:=True

    Next i
    SO.Cells.EntireColumn.AutoFit
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox " B i t t i"
End Sub
. . .
 

Ekli dosyalar

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
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
 

Ekli dosyalar

Katılım
3 Mart 2017
Mesajlar
8
Excel Vers. ve Dili
office 2010 tr
Herkese çok teşekkür ederim. Ellerinize sağlık.
 
Katılım
4 Haziran 2020
Mesajlar
3
Excel Vers. ve Dili
2016
Merhaba,
Öncelikle teşekkürler. Ben de yapma istediğimi sizin sayenizde yapabildim. Ancak ben farklı olarak A sütünu ile B sütünu arasında 2 adet boş sütu bırakmak istiyorum. Yani yeni yazdırılan sayfada ilk bilgiler A sütununda olacak yan yana yazdırrılan bilgiler ise D sütunundan başlayacak. Kod içerisinde nerede değişiklik yapmam gerkeli. Şimdiden teşekkürler.
 
Katılım
4 Haziran 2020
Mesajlar
3
Excel Vers. ve Dili
2016
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,
Öncelikle teşekkürler. Ben de yapma istediğimi sizin sayenizde yapabildim. Ancak ben farklı olarak A sütünu ile B sütünu arasında 2 adet boş sütu bırakmak istiyorum. Yani yeni yazdırılan sayfada ilk bilgiler A sütununda olacak yan yana yazdırrılan bilgiler ise D sütunundan başlayacak. Kod içerisinde nerede değişiklik yapmam gerekli. Birde yan yana yazdırılan veriler text şeklinde geliyor. onları general olarak nasıl yazdırabilirim.Şimdiden teşekkürler.
 
Son düzenleme:

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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.Cells.Clear
   
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    Veri = S1.Range("A2:B" & Son).Value
   
    ReDim Liste(1 To Son, 1 To 4)
   
    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(Say, 1) = Veri(X, 1)
            Liste(Say, 4) = "|" & Veri(X, 2)
        Else
            Liste(Dizi.Item(Veri(X, 1)), 4) = Liste(Dizi.Item(Veri(X, 1)), 4) & "|" & Veri(X, 2)
        End If
    Next
   
    S2.Range("A2").Resize(Say, 4) = Liste
    S2.Range("D2").Resize(Say).TextToColumns Tab:=True, OtherChar:="|"
    S2.Columns(4).Delete
    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
 

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 13 de verdiğiniz kodda; Sayfa2 de A sutununda belirttiğimiz satırlardaki verileri Sayfa1 in A sutununda bulup B sutunundaki karşılıklarını birleştirmesini istersek, kodda nasıl bir değişiklik yapmalıyız. Teşekkürler.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örnek dosya üzerinde tarif ederseniz alternatif çözüm önerebilirim.
 

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 13 de verdiğiniz kodda; Sayfa2 de A sutununda belirttiğimiz satırlardaki verileri Sayfa1 in A sutununda bulup B sutunundaki karşılıklarını birleştirmesini istersek, kodda nasıl bir değişiklik yapmalıyız. Teşekkürler.
Sayfa2 nin A sutununda yazılı olanları Sayfa1 in B sutunu karşılıklarını örnek dosyada gösterdiğim şekilde D sutununda birleştirilmesini istiyorum.

örnek dosyam ekte
 

Ekli dosyalar

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,519
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 

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 çok teşekkür ediyorum, tam istediğim gibi oldu. Elinize sağlık.
 

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 Selamlar; bugün gerçek datalarla test ettiğimde Sayfa2 deki D sutunundaki birleştirmeler A sutunundaki bilginin aynı satırında değil de bir alt satırda birleştirdiğini fark ettim.
 

Ekli dosyalar

Üst