اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

تحويل حقل واحد يحتوي مجموعة من البيانات الى مجموعة اسطر


إذهب إلى أفضل إجابة Solved by lionheart,

الردود الموصى بها

السلام عليكم ..

لدي استفسار عن كيفية تحويل حقل يحتوي على مجموعة من البيانات وفق حقل اخر يحتوي على (ID) خاص بتلك البيانات الى اسطر متعددة اعتماداً على هذا الـ (ID) كما موضح في الصورة المدرجة ، علما ان البيانات تفوق ال1000 سطر وطريقة تحويلها بأستخدام (Transpose) لاتؤدي الغرض المطلوب ،أضافةً لأستغراقها وقت كبير ، ارجوا المساعدة في حل هذه المشكلة ولكم جزيل الشكر .مرفق الصورة وملف الاكسل كنموذج مبسط مدرج في ادناه

t2.png

T1.xlsx

رابط هذا التعليق
شارك

Sub Test()
    Dim a, i As Long, ii As Long, t As Long
    a = Sheets("Sheet1").Range("A1").CurrentRegion.Resize(, 2).Value
    a(1, 2) = a(1, 2) & " 1"
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not .Exists(a(i, 1)) Then
                .Item(a(i, 1)) = Array(.Count + 2, 2)
                For ii = 1 To 2
                    a(.Count + 1, ii) = a(i, ii)
                Next ii
            Else
                t = .Item(a(i, 1))(1) + 1
                If UBound(a, 2) < t Then
                    ReDim Preserve a(1 To UBound(a, 1), 1 To t)
                    a(1, t) = Replace(a(1, 2), "1", t - 1)
                End If
                a(.Item(a(i, 1))(0), t) = a(i, 2)
                .Item(a(i, 1)) = Array(.Item(a(i, 1))(0), t)
            End If
        Next i
        t = .Count + 1
    End With
    With Sheets("Sheet2").Cells(1).Resize(t, UBound(a, 2))
        .CurrentRegion.Clear
        .Value = a: .Borders.Weight = 2
        .HorizontalAlignment = xlCenter
        .Columns.AutoFit
        .Parent.Select
    End With
End Sub

 

  • Like 1
رابط هذا التعليق
شارك

  • أفضل إجابة
Sub Test()
    Dim a, tmp, i As Long, ii As Long, t As Long
    a = Sheets("Sheet1").Range("A1").CurrentRegion.Resize(, 3).Value
    a(1, 3) = a(1, 2) & " 1"
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not .Exists(a(i, 1)) Then
                .Item(a(i, 1)) = Array(.Count + 2, 3)
                tmp = a(i, 2)
                a(.Count + 1, 1) = a(i, 1)
                a(.Count + 1, 2) = a(i, 3)
                a(.Count + 1, 3) = tmp
            Else
                t = .Item(a(i, 1))(1) + 1
                If UBound(a, 2) < t Then
                    ReDim Preserve a(1 To UBound(a, 1), 1 To t)
                    a(1, t) = Replace(a(1, 3), "1", t - 2)
                End If
                a(.Item(a(i, 1))(0), t) = a(i, 2)
                .Item(a(i, 1)) = Array(.Item(a(i, 1))(0), t)
            End If
        Next i
        t = .Count + 1
    End With
    a(1, 2) = "Date"
    With Sheets("Sheet2").Cells(1).Resize(t, UBound(a, 2))
        .CurrentRegion.Clear
        .Value = a: .Borders.Weight = 2
        .HorizontalAlignment = xlCenter
        .Columns.AutoFit
        .Parent.Select
    End With
End Sub

 

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information