السلام عليكم ورحمة الله وبركاته
أقدم لكم طريقتين أحدهما بالمعادلات والأخرى بالأكواد لتكرار اسم معين بناءً على قيمة معينة في خلية مجاورة.
بفرض أن لدينا مجموعة من الأسماء في النطاق B2:B7 ، وفي العمود المجاور عدد مرات التكرار المطلوبة لكل اسم ، بهذا الشكل
والمطلوب الحصول على النتائج بالشكل التالي :
أولاً الحل بمعادلة عادية :
قم بوضع المعادلة التالية في الخلية E2
=B2
ثم قم بوضع المعادلة التالية في الخلية E3 ثم قم بسحبها للأسفل
=IFERROR(IF(COUNTIF($E$2:E2,E2)<INDEX($C$2:$C$7,MATCH(E2,$B$2:$B$7,0)),E2,INDEX($B$2:$B$7,MATCH(E2,$B$2:$B$7,0)+1)),"")
ولكن هذه المعادلة بها قصور إذا كان أحد الأسماء في الخلية المجاورة لها القيمة تساوي صفر ، ولحل الإشكالية يمكنك الاعتماد على الحل الثاني
ثانياً الحل بمعادلة صفيف :
ثالثاً الحل بالأكواد :
قم بوضع المعادلة التالية في الخلية G2 ، وهي معادلة صفيف أي بعد إدخال المعادلة يتم الضغط على Ctrl + Shift + Enter
=IF(ROW()-ROW($A$2)<=SUM($C$2:$C$7)-1,INDEX($B$2:$B$7,MATCH(FALSE,COUNTIF($G$1:G1,$B$2:$B$7)=$C$2:$C$7,0)),"")
قم بوضع الكود التالي في موديول عادي Standard Module ، ونفذ الكود ستظهر النتائج في العمود I بدايةً من الصف الثاني أي بدايةً من الخلية I2 ، ويمكن تحديد مكان النتائج من السطر الأخير بالكود.
Sub Test()
Dim arResult() As String
Dim I As Long, J As Long, Cnt As Long
ReDim arResult(Application.Sum(Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row)) - 1)
For I = 2 To Range("A" & Rows.Count).End(xlUp).Row
For J = 0 To Range("C" & I).Value - 1
arResult(Cnt + J) = Range("B" & I).Value
Next
Cnt = Cnt + J
Next I
Range("I2").Resize(UBound(arResult) + 1, 1).Value = Application.Transpose(arResult)
End Sub
إعداد / ياسر خليل أبو البراء
ليست هناك تعليقات:
إرسال تعليق