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

دالة Vlookup


إذهب إلى الإجابة الإجابة بواسطة محمد هشام.,

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

قام بنشر

السلام عليكم ورحمة الله وبركاته
عندي مجموعة عملاء مرتبين حسب ترتيبهم في حجم التعامل (العامود باللون الأصفر) ، لكن عندما يتم تحصيل دفعات إسبوعية منهم يتم ترتيبهم قربهم لبعض (العامود باللون الأخضر) لتوفير الجهد والوقت.
إخترت دالة 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 2
قام بنشر

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

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

  • Like 2

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

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

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

Important Information