اذهب الي المحتوي
أوفيسنا

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

قام بنشر

السلام عليكم ورحمة الله و بركاته 

بالمرفق ملف

يحتوي على صفوف واعمدة 

المشكلة

كل 14 صف في الواقع هو صف واحد لأن هناك بعض القيم مكررة 

وتعاملي معها يدويا من حيث تحويل بعض خلايا الاعمدة الى صفوف وحذف المتكرر ومن ثم نسخ جميع القيم ولصقها متعب جدا 

image.png.9c57fc607214ff483e43f22026f48b62.png

 

المطلوب

الاحتفاظ بقيمة واحده من العمود A المتضمن عنوان Code

الاحتفاظ بقيمة واحده من العمود B المتضمن عنوان date1

وهكذا لبقية الاعمدة C :

تحويل قيم الخلايا في العمود E من الخلية رقم E2 الى E14 الى صفوف بدون تكرار 

وادراج القيم من العمود F اسفل منها 

للحصول على  هذه النتيجة لجميع السجلات حسب شرح الصورة 

image.png.1fa4ca462dbc466deb7d8dd9bcedd020.png

أمل الاخذ في الحسبان ان عدد الاعمدة في الجدول الاساسي  تقريبا 31 عمود والملف المرفق هذا اضعه كمثال بسبب وجود بيانات حساسه 

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

لأنه في كل يوم يأتيني ملف  به ما يقارب اربع وعشرون  الف صف وتحويلها يدوي متعب ويحتمل الخطأ

ارجو ان اكون استطيعت شرح المطلوب بصورة واضحه 

 

تحويل الاعمدة الى صفوف وتنسيق البيانات.xlsx

قام بنشر
4 ساعات مضت, محي الدين ابو البشر said:

ربما

شكرا لك أخي الكريم 

النتيجة صحيحة حسب المرفق وهو مثال 

حاولت تطبيق المثال على الملف الفعلي 

وهو يحتوي على 35 عامود لكن فشلت المحاولة وظهرت هذه الرسالة عند تشغيل  Macro1

 

image.png.cfc2ac4e2a991c5068833743714cfd22.png

 

image.png.f151345d60cdfbadc5bcf4313e2db600.png

 

وعند تشغيل المايكرو test

يتم اضافة 4 اعمدة فقط في الورقة رقم 2

استاذي الكريم هلا تلطفت وشرحت لي خطوة بخطوة الية عمل المايكرو  Macro1 والمايكرو test

وما هو المطلوب تعديلة في الكود لاضافة بقية الاعمدة 

شاكر ومقدر لك مساعدتك وحسن تعاونك 

 

قام بنشر

تفضل أخي الكريم

استبدل باكود:

Sub test()
Dim a
a = Sheets(1).Cells.CurrentRegion
With CreateObject("scripting.dictionary")
                For i = 2 To UBound(a)
                    If Not .exists(a(i, 1)) Then
                 .Add a(i, 1), Array(Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4)), Array(a(i, 5), a(i, 6)))
            Else
         w = .Item(a(i, 1))
       w(1)(0) = w(1)(0) & "|" & a(i, 5)
        w(1)(1) = w(1)(1) & "|" & a(i, 6)
        .Item(a(i, 1)) = w
              End If
            Next
            itm = .items
           For i = 0 To .Count - 1
   Sheets(2).Cells(i + 2, 1).Resize(, 4) = .items()(i)(0)
   Sheets(2).Cells(i + 2, 1).Offset(, 4) = .items()(i)(1)(1)
    Next
    Application.DisplayAlerts = False
    Sheets(2).Cells(2, 5).Resize(.Count).TextToColumns Destination:=Sheets(2).Cells(2, 5), DataType:=xlDelimited, _
      Other:=True, OtherChar:="|", FieldInfo:=Array(UBound(a, 2) - 4, 1), TrailingMinusNumbers:=True
      Application.DisplayAlerts = True
End With
End Sub

 

  • Like 1
  • Thanks 1
قام بنشر
18 دقائق مضت, محي الدين ابو البشر said:

تفضل أخي الكريم

استبدل باكود:

الله يجزاك خير استاذي 

يبدو أني لم اوصل الفكرة بشل جيد 

الكود الاول الذي عملته يعمل بشكل جيد 

انا هنا اريد ز تحويل اعمدة اضافية الى صفوف لنفس الملف 

لو افترضنا ان هناك اعمدة بنفس طريقة العمود  E , F  وهنا نضرب المثال بالعمود  G و  H 

فكيف سيكون شكل المصفوفة لاضافتها للورقة الثانية 

اعلم ان الخطأ كان مني كان يجب ان اضيف مرفق يحتوي على نفس عدد الاعمدة التي اريدها

ان لم تكن الفكرة وصلت سأضيف مرفق اخر للتطبيق عليه 

او ارسل لك الملف على بشكل خاص لاحتوائه على معلومات حساسة 

 

قام بنشر
3 دقائق مضت, محي الدين ابو البشر said:

بالإضافة إلى E , F تريد  G و  H؟

نعم استاذ 

اريد اضافة اعمدة جديد بنفس طريقة العمودين E و F 

 

 

3 دقائق مضت, محي الدين ابو البشر said:

بليز

🍁

قام بنشر (معدل)

هكذا؟

Sub test()
Dim a
a = Sheets(1).Cells.CurrentRegion
With CreateObject("scripting.dictionary")
                For i = 2 To UBound(a)
                    If Not .exists(a(i, 1)) Then
                 .Add a(i, 1), Array(Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4)), Array(a(i, 5), a(i, 6), a(i, 7), a(i, 8)))
            Else
         w = .Item(a(i, 1))
       w(1)(0) = w(1)(0) & "|" & a(i, 5)
        w(1)(1) = w(1)(1) & "|" & a(i, 6) & "|" & a(i, 7) & "|" & a(i, 8)
       .Item(a(i, 1)) = w
              End If
            Next
           For i = 0 To .Count - 1
   Sheets(2).Cells(i + 2, 1).Resize(, 4) = .items()(i)(0)
   Sheets(2).Cells(i + 2, 1).Offset(, 4) = .items()(i)(1)(1)
    Next
    Application.DisplayAlerts = False
    Sheets(2).Cells(2, 5).Resize(.Count).TextToColumns Destination:=Sheets(2).Cells(2, 5), DataType:=xlDelimited, _
      Other:=True, OtherChar:="|", FieldInfo:=Array(14, 1), TrailingMinusNumbers:=True
      Application.DisplayAlerts = True
End With
End Sub

اذا  لم يكن المطلوب

أرجو أن ترفق ملف فيه النتائج المتوقعة

شكراً

تم تعديل بواسطه محي الدين ابو البشر
  • Like 1
  • Thanks 1
قام بنشر
5 ساعات مضت, محي الدين ابو البشر said:

اذا  لم يكن المطلوب

أشكرك استاذي الكريم 

لقد أتعبتك معي 

بطريقة ما توصلت الى نتيجة مقبولة من خلال الكود الاول 

جزاك الله عني كل خير وجعله في موازين أعمالك 

قام بنشر
23 ساعات مضت, محي الدين ابو البشر said:

هل من الممكن عرض ما توصلت إلية؟

لللإفادة

لم أقم بعمل اي شيئ اضافي فقط اضفة بعض الاعمدة 

Sub test()
Dim a
a = Sheets(1).Cells.CurrentRegion
With CreateObject("scripting.dictionary")
                For i = 2 To UBound(a)
                    If Not .exists(a(i, 1)) Then
                 .Add a(i, 1), Array(Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4), a(i, 5), a(i, 6), _
                 a(i, 7), a(i, 8), a(i, 9), a(i, 10), a(i, 11), a(i, 12), a(i, 13), a(i, 14), a(i, 15), _
                 a(i, 16), a(i, 17), a(i, 18), a(i, 19), a(i, 20), a(i, 21), a(i, 22), a(i, 23), _
                 a(i, 24), a(i, 25), a(i, 26), a(i, 27)), Array(a(i, 28), a(i, 29)))
            Else
         w = .Item(a(i, 1))
       w(1)(0) = w(1)(0) & "|" & a(i, 28)
        w(1)(1) = w(1)(1) & "|" & a(i, 29)
        .Item(a(i, 1)) = w
              End If
            Next
            itm = .items
           For i = 0 To .Count - 1
   Sheets(2).Cells(i + 2, 1).Resize(, 27) = .items()(i)(0)
   Sheets(2).Cells(i + 2, 1).Offset(, 27) = .items()(i)(1)(1)
    Next
    Application.DisplayAlerts = False
    Sheets(2).Cells(2, 28).Resize(.Count).TextToColumns Destination:=Sheets(2).Cells(2, 28), DataType:=xlDelimited, _
      Other:=True, OtherChar:="|", FieldInfo:=Array(14, 1), TrailingMinusNumbers:=True
      Application.DisplayAlerts = True
End With
End Sub

 

قام بنشر (معدل)

يمكن اختصار

 .Add a(i, 1), Array(Array(a(i, 1), a(i, 2), a(i, 3), a(i, 4), a(i, 5), a(i, 6), _
                 a(i, 7), a(i, 8), a(i, 9), a(i, 10), a(i, 11), a(i, 12), a(i, 13), a(i, 14), a(i, 15), _
                 a(i, 16), a(i, 17), a(i, 18), a(i, 19), a(i, 20), a(i, 21), a(i, 22), a(i, 23), _
                 a(i, 24), a(i, 25), a(i, 26), a(i, 27)), Array(a(i, 28), a(i, 29)))

إلى

  .Add a(i, 1), Array(Application.Transpose(Application.Index(a, i, Evaluate("row(1:" & UBound(a, 2) - 2 & ")"))), _
                                                     Array(a(i, UBound(a, 2) - 1), a(i, UBound(a, 2))))

 

 

Sub test()
Dim a, aa, w
Dim i&
a = Sheets(1).Cells.CurrentRegion
With CreateObject("scripting.dictionary")
                For i = 2 To UBound(a)
                     If Not .exists(a(i, 1)) Then
                  .Add a(i, 1), Array(Application.Transpose(Application.Index(a, i, Evaluate("row(1:" & UBound(a, 2) - 2 & ")"))), _
                                                     Array(a(i, UBound(a, 2) - 1), a(i, UBound(a, 2))))
            Else
         w = .Item(a(i, 1))
       w(1)(0) = w(1)(0) & "|" & a(i, UBound(a, 2) - 1)
        w(1)(1) = w(1)(1) & "|" & a(i, UBound(a, 2))
       .Item(a(i, 1)) = w
              End If
            Next
           For i = 0 To .Count - 1
   Sheets(2).Cells(i + 2, 1).Resize(, 4) = .items()(i)(0)
   Sheets(2).Cells(i + 2, 1).Offset(, 4) = .items()(i)(1)(1)
    Next
    Application.DisplayAlerts = False
    Sheets(2).Cells(2, 5).Resize(.Count).TextToColumns Destination:=Sheets(2).Cells(2, 5), DataType:=xlDelimited, _
      Other:=True, OtherChar:="|", FieldInfo:=Array(14, 1), TrailingMinusNumbers:=True
      Application.DisplayAlerts = True
End With
End Sub

 

تم تعديل بواسطه محي الدين ابو البشر
  • Like 2

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