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

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

قام بنشر

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

سؤال بسيط لكن للاسف انا معلوماتي ف اكسيل تكاد تكون زيرو ف ارجو المساعدة.. 

عندي جدول ورديات لاربع جهات مختلفة كل يوم يكون في حارس لجهة من الجهات الاربعة لمدة يوم كامل.. الجدول شكله الاتي 

عمود (اليوم) ايام الشهر لاخره

عمود (التاريخ) ايام الشهر بالتاريخ من 1 الى 30

عمود مخزن 1 

عمود مخزن 2 

عمود مخزن 3 

عمود مخزن 4

تحت اعمدة المخازن الاربعة اسماء الاشخاص المنوط بهم القيام بالوردية لمدة 24 ساعة.. 

IMG-20241026-WA0005.jpg.355afe5f8fff88d0c8abfffa3c6eccde.jpg

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

يكون رؤوس الاعمدة هي الايام و التاريخ 

و الصفوف هي اسماء العاملين 

و القيم اسفل كل عمود من ايام الشهر هي رقم المخزن كالشكل الاتي.. (قمت بالتدوير يدويا) 

IMG-20241026-WA0004.jpg.8085a08f976f669d17cfe2ff95f2e635.jpg

و شكرا جزيلا لكم

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

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

1) يصعب التعامل مع الصور اخي الكريم المفروض إرفاق ملف للاشتغال عليه 

2)  الصورة المرفقة  للنتائج المطلوبة تتضمن فقط مخزن 1 ومخزن 2 اين هو 3 و4 

3) عدم تحديد مكان وضع النتائج 

على حسب ما فهمت من طلبك المفروض النتيجة المتوقعة تكون على الشكل التالي Capture.jpg.db95d7ff4d5c31e0f5e80641395b24a4.jpg

 

 

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

استاذ محمد هشام تحياتي لحضرتك 

اللي حضرتك ارسلته هو بالضبط المطلوب 

بعتذر عن عدم استكمال البيانات في الصورة الثانية لاني عملتها يدويا بايدي و كان في صعوبة ف استخلاص البيانات.. ف عملت مخزن 1 و مخزن 2 فقط و ماكملتش.. 

حضرتك عملت المطلوب تماما.. ياريت تديني شرح للطريقة و شكرا جزيلا 🌹

قام بنشر

تم تنفيذها بواسطة كود vba 

يرجى إرفاق عينة لشكل البيانات لديك لتحديد النطاقات بشكل صحيح

ومكان وضع النتائج المطلوبة تفاديا للأخطاء 

قام بنشر

إدن لنفترض أننا سنقوم باستخراج البيانات من الأعمدة  H:M   كما هو ظاهر لديك على الصورة إلى ورقة 2 مثلا 

Capture(1).jpg.fe4bb7be940cfbf07d5137abac6b65bc.jpg

Sub CreateShift()
    Dim lastRow As Long, i As Long, j As Long, kay As String, c As String
    Dim tbl As Variant, Names As Collection, cell As Range, name As String
    
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")
    Dim dest As Worksheet: Set dest = Sheets("Sheet2")
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    If Application.WorksheetFunction.CountA(dest.Cells) > 0 Then dest.UsedRange.Clear

    lastRow = WS.Cells(WS.Rows.Count, 8).End(xlUp).Row
    tbl = WS.Range("H4:M" & lastRow).Value

    For i = 1 To lastRow - 3
        dest.Cells(1, i + 1).Value = tbl(i, 2)
        dest.Cells(2, i + 1).Value = tbl(i, 1)

        If Application.CountA(Application.Index(tbl, i, 3)) > 0 Then
            Colors dest.Cells(1, i + 1), RGB(200, 200, 255)
            Colors dest.Cells(2, i + 1), RGB(255, 153, 0)
        End If
    Next i

    Set Names = New Collection
    On Error Resume Next
    For i = 1 To UBound(tbl, 1)
        For j = 3 To 6
            If tbl(i, j) <> "" Then Names.Add tbl(i, j), CStr(tbl(i, j))
        Next j
    Next i
    On Error GoTo 0

    For i = 1 To Names.Count
        dest.Cells(i + 2, 1).Value = Names(i)
    Next i

    With dest.Range("A1:A2")
        .ClearFormats: .Merge: .Value = "الإســـم": .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter: .Font.Bold = True
        .Borders.LineStyle = xlContinuous: .Borders.color = RGB(0, 0, 255)
        .Interior.color = RGB(200, 200, 255)
    End With

    For i = 1 To lastRow - 3
        For j = 1 To Names.Count
            If Not IsEmpty(dest.Cells(j + 2, 1)) Then
                name = Names(j)
                c = dest.Cells(1, i + 1).Value
                kay = ""

                For Each cell In WS.Range("J4:M" & WS.Cells(WS.Rows.Count, 10).End(xlUp).Row)
                    If cell.Value = name And WS.Cells(cell.Row, 9).Value = c Then
                        kay = (cell.Column - 9) & " مخزن"
                        Exit For
                    End If
                Next cell
                
                dest.Cells(j + 2, i + 1).Value = kay
                With dest.Range(dest.Cells(j + 2, 1), dest.Cells(j + 2, i + 1))
                    .Borders(xlEdgeBottom).LineStyle = xlContinuous
                    .Borders(xlEdgeBottom).color = RGB(0, 0, 255)
                End With
            End If
        Next j
    Next i

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Sub Colors(cell As Range, color As Long)
    With cell
        .Interior.color = color
        .Font.Bold = True
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
    End With
End Sub

 

New.xlsb

  • Like 3
  • 2 weeks later...
قام بنشر

سلام عليكم يا استاذ محمد.. وبعتذر عن كثر الأسئلة.. 

في هذا الجزء من الكود 

If cell.Value = name And WS.Cells(cell.Row, 9).Value = c Then
   kay = (cell.Column - 9) & " مخزن"
     Exit For
       End If

حضرتك تفضلت بوضع اسم المخزن و ربطه برقم العمود اللذي يحتوي على بياناته عند ترحيله الى الشيت الثاني

و لكن في حالة تغيير اسم المخزن مثلا الى المخزن الشرقي او الغربي على سبيل المثال.. 

ستظل القيمة المرحلة هي مخزن 1 او مخزن 2 وهكذا.. 

هل يوجد امكانية بترحيل اسم المخزن كما هو مكتوب في راس العمود، بحيث اذا تم تغيير اسم المخزن او اضافة مخازن اخرى يتم الترحيل باسم المخزن المكتوب مباشرة، وليس تثبيت كلمة "مخزن " مضاف اليها معادلة طرح ارقام الاعمدة 

  • أفضل إجابة
قام بنشر

 

48 دقائق مضت, Hussein888 said:

امكانية بترحيل اسم المخزن كما هو مكتوب في راس العمود، بحيث اذا تم تغيير اسم المخزن او اضافة مخازن اخرى يتم الترحيل باسم المخزن المكتوب مباشرة

1.jpg.50d219aa6955b7408795ccd47fc363a4.jpg

Sub CreateShift()
    Dim lastRow As Long, i As Long, j As Long, kay As String, c As String
    Dim tbl As Variant, Names As Collection, cell As Range, name As String
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")
    Dim dest As Worksheet: Set dest = Sheets("Sheet2")
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    If Application.WorksheetFunction.CountA(dest.Cells) > 0 Then dest.UsedRange.Clear

    lastRow = WS.Cells(WS.Rows.Count, 8).End(xlUp).Row
    tbl = WS.Range("H4:M" & lastRow).Value

    For i = 1 To lastRow - 3
        dest.Cells(1, i + 1).Value = tbl(i, 2)
        dest.Cells(2, i + 1).Value = tbl(i, 1)

        If Application.CountA(Application.Index(tbl, i, 3)) > 0 Then
            Colors dest.Cells(1, i + 1), RGB(200, 200, 255)
            Colors dest.Cells(2, i + 1), RGB(255, 153, 0)
        End If
    Next i

    Set Names = New Collection
    On Error Resume Next
    For i = 1 To UBound(tbl, 1)
        For j = 3 To 6
            If tbl(i, j) <> "" Then Names.Add tbl(i, j), CStr(tbl(i, j))
        Next j
    Next i
    On Error GoTo 0

    For i = 1 To Names.Count
        dest.Cells(i + 2, 1).Value = Names(i)
    Next i

    With dest.Range("A1:A2")
        .ClearFormats: .Merge: .Value = "ÇáÃÓãÇÁ": .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter: .Font.Bold = True
        .Borders.LineStyle = xlContinuous: .Borders.color = RGB(0, 0, 255)
        .Interior.color = RGB(200, 200, 255)
    End With

    Dim Hrd As String
    For i = 1 To lastRow - 3
        For j = 1 To Names.Count
            If Not IsEmpty(dest.Cells(j + 2, 1)) Then
                name = Names(j)
                c = dest.Cells(1, i + 1).Value
                kay = ""
                For Each cell In WS.Range("J4:M" & WS.Cells(WS.Rows.Count, 10).End(xlUp).Row)
                    If cell.Value = name And WS.Cells(cell.Row, 9).Value = c Then
                        Hrd = WS.Cells(3, cell.Column).Value
                        kay = Hrd
                        Exit For
                    End If
                Next cell
                
                dest.Cells(j + 2, i + 1).Value = kay
                With dest.Range(dest.Cells(j + 2, 1), dest.Cells(j + 2, i + 1))
                    .Borders(xlEdgeBottom).LineStyle = xlContinuous
                    .Borders(xlEdgeBottom).color = RGB(0, 0, 255)
                End With
            End If
        Next j
    Next i

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

 

New V2.xlsb

  • 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