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

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

قام بنشر

السلام عليكم ورحمة الله وبركاته
عندي مجموعة عملاء مرتبين حسب ترتيبهم في حجم التعامل (العامود باللون الأصفر) ، لكن عندما يتم تحصيل دفعات إسبوعية منهم يتم ترتيبهم قربهم لبعض (العامود باللون الأخضر) لتوفير الجهد والوقت.
إخترت دالة Vlookup للبحث عن اسم العميل في جدول الترتيب حسب حجم التعامل .... ثم إحضار رقم ترتيب خط السير من جدول خط السير وإضافته لجدول الترتيب حسب حجم التعامل.
إلا أنها لم تعمل ... ممكن أعرف السبب.

خط السير.xlsx

  • Like 1
قام بنشر

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

جرب إستخدام إحدى الصيغ التالية 

=IFERROR(INDEX($G$3:$G$121, MATCH(C3, $H$3:$H$121, 0)), "غير موجود")
'أو

=XLOOKUP(C3, $H$3:$H$121, $G$3:$G$121, "غير موجود")

بالأكواد 

Option Explicit

Sub UpdateOrder()
    Dim WS As Worksheet, lastRow As Long, i As Long
    Dim Client As String, tmp As Variant
    Set WS = Sheets("خط السير")
    
    lastRow = 120
    
    Application.ScreenUpdating = False
    WS.Range("b3:b" & lastRow).ClearContents
    For i = 3 To lastRow
        Client = WS.Cells(i, "C").Value
        
        If Client <> "" Then
            tmp = Application.Match(Client, WS.Range("H3:H" & lastRow), 0)
            
            If Not IsError(tmp) Then
                WS.Cells(i, "B").Value = WS.Cells(tmp + 2, "G").Value
            Else
                WS.Cells(i, "B").Value = "غير موجود"
            End If
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

 

خط السير.rar

  • Like 1
قام بنشر

ما الخطأ في معادلتي ؟

16 ساعات مضت, محمد هشام. said:

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

جرب إستخدام إحدى الصيغ التالية 

=IFERROR(INDEX($G$3:$G$121, MATCH(C3, $H$3:$H$121, 0)), "غير موجود")
'أو

=XLOOKUP(C3, $H$3:$H$121, $G$3:$G$121, "غير موجود")

بالأكواد 

Option Explicit

Sub UpdateOrder()
    Dim WS As Worksheet, lastRow As Long, i As Long
    Dim Client As String, tmp As Variant
    Set WS = Sheets("خط السير")
    
    lastRow = 120
    
    Application.ScreenUpdating = False
    WS.Range("b3:b" & lastRow).ClearContents
    For i = 3 To lastRow
        Client = WS.Cells(i, "C").Value
        
        If Client <> "" Then
            tmp = Application.Match(Client, WS.Range("H3:H" & lastRow), 0)
            
            If Not IsError(tmp) Then
                WS.Cells(i, "B").Value = WS.Cells(tmp + 2, "G").Value
            Else
                WS.Cells(i, "B").Value = "غير موجود"
            End If
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

 

خط السير.rar 40.55 kB · 9 downloads

 

قام بنشر

اخي @أبوالباسل   دالة VLOOKUP لديها قاعدة أساسية يجب الإنتباه إليها فهي تعمل فقط من اليسار إلى اليمين بمعنى  تبحث دائما في العمود الأول من النطاق المحدد وهو في حالتك العمود G لكنك تريد البحث عن رقم سير باستخدام العمود H (الذي يحتوي على أسماء العملاء)  وهذا يخالف طريقة عمل VLOOKUP لأن العمود  H ليس العمود الأول 

بإختصار  دالة VLOOKUP لا يمكنها البحث في عمود ليس هو الأول ضمن نطاق البيانات لهدا  حاولنا إستخدام بدائل أخرى مثل  INDEX  و MATCH هذه الدوال لا تعتمد على ترتيب الأعمدة 

 للتوضيح أكثر حاول عكس ترتيب الأعمدة بجعل عمود أسماء العملاء  على اليمين وجعل عمود سير يسارا  ووضع المعادلة الخاصة بك على الشكل التالي 

=IF(C3<>"", IFERROR(VLOOKUP(C3, $G$3:$H$121, 2, 0), "غير موجود"), "")

10.png.27c3b2ef28f831ee0eb273f1a8b360df.png

 كما تلاحظ   VLOOKUP  الآن تبحث في العمود H (أسماء العملاء) لأنه أصبح العمود الأول و تسترجع القيمة المقابلة من العمود G (سير ) بنجاح 

 

خط السير-VLOOKUP.xlsx

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