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

مطلوب معادلة لاستخراج الكود من الصنف


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

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

يوجد في المثال جدول يحتوي على الكود والصنف .. الصنف مقسم الى ثلاث اعمدة .. C D E ..

المطلوب معادلة في الخلايا H I J في الصف الخامس .. عند اختيار الصنف ( مربع سرد )

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

شكرا جزيلا

النوع.xlsx

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

حرب هذا الكود

Option Explicit
Sub giVe_data()
Dim My_Sh As Worksheet
Dim st$, MY_Rg As Range
Dim final_row%, K%, i%, m%: m = 8
Dim result$
Set My_Sh = Sheets("ورقة1")
 With My_Sh
    .Range("h5:j5").ClearContents
   st = .Range("h3")
   final_row = .Cells(Rows.Count, "B").End(3).Row
   Set MY_Rg = .Range("c5:E" & final_row)
   For i = 1 To 3
            For K = 5 To final_row
                If MY_Rg.Cells(K - 4, i) = st$ Then
                 result = result & _
                 .Cells(MY_Rg.Cells(K - 4, i).Row, 2) & "-"
                End If
             Next
         If result <> "" Then
         .Cells(5, m) = Mid(result, 1, Len(result) - 1)
         End If
        m = m + 1
        result = ""
   Next
End With
End Sub

الملف مرفق

Espece.xlsm

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

بارك الله فيك اخي علي

لكن السؤال كان ان تدرج كل النتائج في خلية واحدة

بالنسبة للمعادلات عندك  فهي رائعة لكن اسمج لي بهذا التعديل  في الاعمدة  H & I & J

       1-اذ لا ضرورة لادراج معادلة خاصة في كل عامود منها            معادلة واحدة (تكفي) تكتب في H5 وتسحب يساراً و نزولاً (Ctlr+Shift+Enter)

       2-تصغير حجم نطاق البحث للدالة Index من   3 أعمدة    ( C & D & E  )  الى عامود واحد  ( C)  ثم (D) ثم  (E)

       3 -  مغادلة IFERROR انا لا احبذها لانها تلزم الاكسل على اجراء العمليات الحسابية أولاً ثم اذا كان هناك خطأ يعطينا  فراغ

      لذلك   اسعمال if rows()> countif   افضل لانه عندما يتجاوز عدد الصفوف حد معين ( في هذه الحالة كم مرة وردت خضروات في النطاق)               يتوقف اكسل عن حساب المغادلة   و يغطي فراغ رأساً

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

               لذلك انصح دائما ياسنعمال     if rows()> countif  بدل  IFERROR الا اذا كان لا مفر من ذلك

بعد كل هذا الشرح   المعادلة

=IF(ROWS(H$5:H5)>COUNTIF(C$5:C$100,$H$3),"",INDEX($B$5:$B$100,SMALL(IF(C$5:C$100<>"",IF(C$5:C$100=$H$3,ROW(C$5:C$100)-ROW(C$5)+1)),ROWS(H$5:H5))))

 

  • 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