• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Aynı verileri bulup aynı olanları yan yana taşıma

  • Konbuyu başlatan Konbuyu başlatan yosun09
  • Başlangıç tarihi Başlangıç tarihi
Katılım
28 Mart 2022
Mesajlar
2
Excel Vers. ve Dili
2016 İngilizce
Merhabalar excel de 4 sütun var. ilk resimdeki gibi.


Bunlardan ilk sütuna bakarak aynı olanları ilk aynı olanın yanına taşıması gerekiyor. Sonuçta 2 resimdeki gibi olması gerekiyor.
emn7iyh.jpg


Bir türlü beceremedim. Yardımcı olabilir misiniz lütfen. macrolarda da çok yeniyim.
 
Merhaba,

Verilerinizi yedekleyerek deneyiniz.

C++:
Option Explicit

Sub Yan_Yana_Aktar()
    Dim Dizi As Object, Veri As Variant
    Dim X As Long, Y As Integer, Sutun_Veri As Byte
    Dim Sutun_Dizi As Variant, Max_Sutun As Integer
    Dim Say As Long, Zaman As Double
    
    Zaman = Timer
    
    Set Dizi = VBA.CreateObject("Scripting.Dictionary")
    
    Veri = Range("A1").CurrentRegion.Value
    
    ReDim Liste(1 To UBound(Veri, 1), 1 To 16384)
    
    For X = LBound(Veri, 1) To UBound(Veri, 1)
        Sutun_Veri = 1
        If Not Dizi.Exists(Veri(X, 1)) Then
            Say = Say + 1
            Dizi.Add Veri(X, 1), Array(Say, 1)
            For Y = 1 To 4
                Liste(Say, Y) = Veri(X, Sutun_Veri)
                Sutun_Veri = Sutun_Veri + 1
            Next
            Sutun_Dizi = Dizi.Item(Veri(X, 1))
            Sutun_Dizi(1) = Y
            Max_Sutun = Application.Max(Max_Sutun, Sutun_Dizi(1))
            Dizi.Item(Veri(X, 1)) = Sutun_Dizi
        Else
            For Y = Dizi.Item(Veri(X, 1))(1) To Dizi.Item(Veri(X, 1))(1) + 3
                Liste(Dizi.Item(Veri(X, 1))(0), Y) = Veri(X, Sutun_Veri)
                Sutun_Veri = Sutun_Veri + 1
            Next
            Sutun_Dizi = Dizi.Item(Veri(X, 1))
            Sutun_Dizi(1) = Y
            Max_Sutun = Application.Max(Max_Sutun, Sutun_Dizi(1))
            Dizi.Item(Veri(X, 1)) = Sutun_Dizi
        End If
    Next
    
    If Say > 0 Then
        Cells.Delete
        Range("A1").Resize(Say, Max_Sutun) = Liste
        Columns.AutoFit
        MsgBox "İşleminiz tamamlanmıştır." & vbCrLf & vbCrLf & _
               "İşlem süresi ; " & Format(Timer - Zaman, "0.00") & " Saniye", vbInformation
    End If

    Dizi.RemoveAll
    Erase Liste
    Set Dizi = Nothing
End Sub
 
Çok teşekkür ederim. Mükemmel bir şekilde çalıştı.
 
Geri
Üst