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

ترحيل أسماء بوجود خلايا مدمجة


إذهب إلى أفضل إجابة Solved by محي الدين ابو البشر,

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

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

ارجو المساعدة بماكرو يقوم عند احتيار الصفوف يقوم بترحيل الاسماء الى book2 مع الانتباه ان كل صفحة تأخذ 10 اسماء مع الانتباه الى نسلسل الصفحات و ارقامها نجت الجدول 

و شكرا لكم 

قام بمساعدتي للنموذج الاول book الاستاذ الكبير @محي الدين ابو البشر 

 

kutub202022.xlsm

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

السلام عليكم  

استاذ @محي الدين ابو البشر ارجو المساعدة 

لاني حاولت ما زبط معي بوجود خلايا مدمجة 

اخي الاستاذ @محي الدين ابو البشر ما هو التعديل على الكود ليعمل بوجود خلايا مدمجة 

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

فقط استبدل بالكود القديم

Sub Test()
    Dim a, b, x
    Dim i, ii
    Dim nmsht, dt, bk
    Dim p As Long
    Dim ar As Long
    Dim tmp, class, br, mat
    Const c As Integer = 25
    Set nmsht = Sheets("name")
    Set dt = Sheets("data")
    Set bk = Sheets("Book")
    b = dt.Range(dt.Range("B4"), dt.Range("B4").End(xlDown)).Resize(, 3)
    p = 4:
    For i = 1 To UBound(b)
        tmp = Split(b(i, 1))
        class = IIf(UBound(tmp) < 3, tmp(1), (tmp(0) & " " & tmp(1)) & " " & tmp(2))
        br = tmp(UBound(tmp)): mat = b(i, 3)
        With nmsht.Range("b2:AX400")
            x = .Find(b(i, 1), , , 1).Address
            a = .Range(x).Offset(3, -1).Resize(.Range(nmsht.Range(x).Offset(3), nmsht.Range(x).Offset(3).End(xlDown)).Count, 2).Offset(-2, -1)
        End With
        ar = 1
        With Sheets("book")
            For ii = 1 To UBound(a) Step c
                x = Split(.[E:E].Find("-" & p & "-", , , 1).Address, "$")(2)
                .Cells(x - 6 - c, 4) = .Cells(x - 6 - c, 4) & " " & class
                .Cells(x - 6 - c, 9) = .Cells(x - 6 - c, 9) & " " & br
                 .Cells(x - 6 - c, 15) = mat
                zzZ = Application.IfError(Application.Index(a, Evaluate("(Row(" & ar & ":" & ar + c & "))"), Array(1, 2)), "")
                For i = 1 To 10
                .Cells(x - 1 - c, 2 + m) = Z(i, 2)
                mm = mm + 4
               Next
                ar = ar + c
                p = p + 2
            Next
        End With
    Next
End Sub

 

الكود أعلاه مع دمج الخلايا

تم تعديل بواسطه محي الدين ابو البشر
  • Like 1
رابط هذا التعليق
شارك

الاستاذ @محي الدين ابو البشر لنجرب الكود على تسخة بدون خلايا مدمجة للسهولة 

kutub202022 بدون دمج خلايا.xlsm

الاستاذ @محي الدين ابو البشر ما هو حل الخطأ في الرسالة ؟

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

وعليكم السلام 

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

ولكن أرجو الانتباه إلى أرقام الصفحات يجب أن تمون دائما بالشكل (-12-) عدلت بعضها مثل (-12) أرجو تعديل الباقي

أي استفسار انا جاهز

 

kutub202022 (1).xlsm

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

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

الاخ الاستاذ @محي الدين ابو البشر  الكود بعد التعديل يعمل جيدا و جزاك الله الجنة 

سقط سهوا الترقيم  للعجلة لم انتبه

استفسار

  1. لماذ لا يظهر الرقم المتسلسل حسب الاسم يعني من 1-10 و الصفحة التي تليها 11-20   و حسب اعداد  الطلبة 

2. اذا ممكن كود مسح النموذج الاستقبال بيانات جديد ( كود مسح ) 

و اعتذر منك و شكرا جزيلا لك و بارك  الله في علمك و في ميزان حسناتك 

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

  • أفضل إجابة
Option Explicit

Sub Test()
    Dim a, b, x, z
    Dim i&, ii&, iii&, mm&
    Dim nmsht, dt, bk
    Dim p As Long
    Dim ar As Long
    Dim tmp, class, br, mat
    Const c As Integer = 10
    Set nmsht = Sheets("name")
    Set dt = Sheets("data")
    Set bk = Sheets("Book")
    b = dt.Range(dt.Range("B4"), dt.Range("B4").End(xlDown)).Resize(, 3)
    p = 4:
    For i = 1 To UBound(b)
        tmp = Split(b(i, 1))
        class = IIf(UBound(tmp) < 3, tmp(1), (tmp(0) & " " & tmp(1)) & " " & tmp(2))
        br = tmp(UBound(tmp)): mat = b(i, 3)
        With nmsht.Range("b2:AX400")
            x = .Find(b(i, 1), , , 1).Address
            a = .Range(x).Offset(3, -1).Resize(.Range(nmsht.Range(x).Offset(3), nmsht.Range(x).Offset(3).End(xlDown)).Count, 2).Offset(-2, -1)
        End With
        ar = 1
        With Sheets("book2")
            For ii = 1 To UBound(a) Step c
                x = Split(.[E:E].Find("-" & p & "-", , , 1).Address, "$")(2)
                .Cells(x - 6 - 39, 4) = Split(.Cells(x - 6 - 39, 4))(0) & " " & class
                .Cells(x - 6 - 39, 9) = Split(.Cells(x - 6 - 39, 9))(0) & " " & br
                 z = Application.IfError(Application.Index(a, Evaluate("(Row(" & ar & ":" & ar + c - 1 & "))"), Array(1, 2)), "")
                 For iii = 1 To UBound(z)
                .Cells(x - 1 - 39 + mm, 1) = z(iii, 1)
                .Cells(x - 1 - 39 + mm, 2) = z(iii, 2)
                mm = mm + 4
                Next
                ar = ar + c
                p = p + 2
                mm = 0
            Next
        End With
    Next
End Sub

مرة أخرى (أرقام الصفحات يجب أن تمون دائما بالشكل (-12-) عدلت بعضها مثل (-12) أرجو تعديل الباقي)

إذا كان رقم الصفحة 128- أو -128 سيعطي رسالة خطأ

تم تعديل بواسطه محي الدين ابو البشر
  • Like 1
رابط هذا التعليق
شارك

السلام عليكم 

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

السطر البرمجي  .Cells(x - 91, 17) = mat   يجب ان يكون في كود test 

المسح يجب ان يكون حسب تسلسل ترقيم الصفحات 

يعني الاسماء على الصفحات الزوجية  و المادة على الصفحات الفردية حسب التسلسل الترقيمي 

اشكرك  و اسف للازعاج 

ملاحظة الكود ماكرو test يعمل 100%  لا يجب فيه التعديل 

 

 

kutub20-23 -222.xlsm

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

أه الآن  دارت الفكرة آسف لم استوعب الفكرة

عذراً منك

جرب هذا

واعتذر مرة أخرى عن سوء الفهم

kutub20-23 -222.xlsm

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

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

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

Important Information