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

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

قام بنشر

سؤالنا القادم.. كيف يمكننا معرفة أول خلية فارغة في العمود الأول باستخدام الدالة do until؟ :wallbash:

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

الإجابة:

Dim i As Integer
i = 0
Do
i = i + 1
Loop Until Cells(i, 1).Value = ""
MsgBox "Cell A" & i & " is blank!"

 

لاحظ بأن until كُتبت بعد Loop :excl:، وهذا طريقة أخرى للترتيب، وقد استخدمت لأن الشرط يعتمد على نتيجة خلية.

وهذه طريقة أخرى اعتمدت على شرط أنه إذا كانت الخلية فارغة فأعطها true

Dim BlankFound As Boolean
Dim x As Long

'Loop until a blank cell is found in Column A
  Do Until BlankFound = True
    x = x + 1
    
    If Cells(x, "A").Value = "" Then
      BlankFound = True
    End If
  Loop

'Report out first blank cell found in Column A
  MsgBox "Cell A" & x & " is blank!"

إلى هنا انتهت الحلقة الثانية ودمتم سالمين

وهذا هو الملف المرفق

first_blank.rar

تم تعديل بواسطه الزباري
  • Like 3
قام بنشر (معدل)

3- الدالة Do while loop

الغرض من ذلك هو تكرار مجموعة معينة من البيانات طالما أنه يحقق الشرط، فإذا خالف الشرط فعندها يتم إنهاء الحلقة التكرارية.. وهي عكس Do until

فمثلاً لو طُلب منك بأن تكتب أرقام متسلسلة في العمود الأول وتضع شرطاً بأن ينفذ الأمر عندما يكون الرقم أصغر من 11، فعندها سيكون الكود كالتالي :

i = 1

Do While i < 11
        
   Cells(i, 1) = i
   i = i + 1
       
Loop

لاحظ النتيجة وقارن بينها وبين أول مثال من do until

i = 1
Do Until i = 11
   Cells(i, 1) = i
   i = i + 1
Loop

فهما يؤديان إلى نفس النتيجة

شاهد المرفق

do_while_01.rar

تم تعديل بواسطه الزباري
  • Like 1
قام بنشر

عادة تستخدم الدالة do while في القيام بعملية مكررة في عمود محدد، فمثلا نستخدمها في عمليات الجمع كما في المثال التالي

r = 4
Do While Cells(r, 1) <> ""
Cells(r, 4) = Cells(r, 2) * Cells(r, 3)
r = r + 1
Loop

المرفق:

do_while_02.rar

الشرح

في السطر الأول حددنا رقم الصف الذي ستبدأ منه الدالة

والسطر التالي أعطيناه أمر بأن يعمل ضمن الشرط الذي يكون فيه العمود الأول غير فارغ

ومن ثم أدخلنا معادلة الإجمالي

والسطر الأخير يعني أن ينتقل صف واحد للبحث عن الشرط

  • Like 1
قام بنشر

ولو أردنا أن نكتب الإجمالي في نهاية السطر فنضيف إليها الكود التالي:

r = 4
Sum = 0
Do While Cells(r, 1) <> ""
Sum = Sum + Cells(r, 4)
r = r + 1
Loop
Cells(r, 3) = "الإجمالي"
Cells(r, 4) = Sum

شاهد طريقة الربط في المرفق

do_while_03.rar

إلى هنا انتهى درسنا لهذه الدالة، وترقبوا مني أمثلة للأفكار الذكية في استخدام  هذه الدوال والتي تزيد من توسيع مدارككم بها، وتقبلوا تحياتي

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

سؤالنا: ما هو الكود الذي يعرض لنا الأرقام الفردية فقط  من 1 - 15 كالمثال التالي؟

array03.PNG

 

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

أعتقد ان الكود التالي سيفي بالغرض

Sub odd()

Dim i As Integer

For i = 1 To 16
   Cells(i, 1) = i
   i = i + 1
Next i

End Sub

جعل الله هذا العلم في صحائف أستاذنا الزباري وفي صحائف كل من علمنا في هذا المنتدي الرائع

قام بنشر (معدل)
4 ساعات مضت, محمد حمدان said:

i = 1

do untit i=16

cells(i,1) =i

i= i+2

loop

بارك الله فيك، لكن i مستحيل تساوي 16، لأن الأرقام تكون فردية، فعند تنفيذ الكود فإنه لن يتوقف لأنه لم يحصل على العدد 16.

والصواب :

استبدل ب i>16

ولاتنسى تعديل كلمة until

وستكون النتيجة صحيحة :jump:

2 ساعات مضت, توكل said:

أعتقد ان الكود التالي سيفي بالغرض


Sub odd()

Dim i As Integer

For i = 1 To 16
   Cells(i, 1) = i
   i = i + 1
Next i

End Sub

جعل الله هذا العلم في صحائف أستاذنا الزباري وفي صحائف كل من علمنا في هذا المنتدي الرائع

بارك الله فيك، ما شاء الله عليك ضربة معلم :wavetowel:

وسنوافيكم بطريقة أخرى للحل ولكن بعد الإجابة على السؤال التالي:

سؤالنا: من المثال السابق كيف نجبر الكود بعدم ترك أسطر فارغة كالشكل التالي:

odd02.png

تم تعديل بواسطه الزباري
  • Like 1
قام بنشر

السلام  عليكم

جزاك الله خيرا أخي الزباري على هذا الشرح 

لفتت إنتباهي كلمة في كود أخي إبراهيم أبو ليله في سطره الأول : و هي كلمة odd

فأردت المشاركة بإستعمال هذه الكلمة :


Sub test()
    Dim i As Integer, x As Integer
    x = 1
        For i = 1 To 16 Step 2
            Cells(x, 1) = WorksheetFunction.Even(i)
            Cells(x, 2) = WorksheetFunction.Odd(i)
        x = x + 1
    Next i
End Sub

 

  • Like 1
قام بنشر
3 ساعات مضت, الزباري said:

سؤالنا: من المثال السابق كيف نجبر الكود بعدم ترك أسطر فارغة كالشكل التالي:

odd02.png

من مشاركة أبي حنين يمكن لهذا الكود أن يعطينا الجواب

Sub odd()

Dim i As Integer, x As Integer
    x = 1
    For i = 1 To 16 Step 2
    Cells(x, 1) = WorksheetFunction.odd(i)
    x = x + 1
   
Next i

End Sub

طبعاً محاولة متواضعة من تلميذ مازال يحبو في عالم vba

قام بنشر
منذ ساعه, الزباري said:

بالراحة علينا يا أبو حنــــين

برافو عليك يا توكل

 

بس ممكن نكتب كود بدون function

ترقبونا

يا سيدي أنا لازلت أحبو في هذا المجال ومشاركة أبي حنين جزاك الله وإياه كل خير، هي يلي علمتني كيف أكتب الكود

قام بنشر

هذا من تواضعك.. وإلا مشاركاتك وإجمالي نقاط السمعة لديك تشهد على خبرتك

  • Like 1
قام بنشر

هل من الممكن تطبيق الدالة على متتالية معينة، مثلا بأن يتم تطبيقها كل سطر أو سطرين وهكذا؟

جاءت دالة step لتحل هذه الإشكالية.. وسنوضح ذلك في الأمثلة التالية.. ترقبونا.

فمثلاً لو أردنا أن نظهر نتيجة جمع الأعداد الفردية من 1 إلى 1000 فسيكون الكود بهذا الشكل:

Dim Total As Double
  Dim Cnt As Long
  Total = 0
  For Cnt = 1 To 1000 Step 2
    Total = Total + Cnt
  Next Cnt
  MsgBox Total

المرفق:

count_odd.rar

  • Like 1
قام بنشر

سؤالنا التالي: ما هو الكود المناسب لتلوين الأسطر من 1 إلى 100 لتحصل على هذه النتيجة :

color_rows.PNG

علماً بأن كود التلوين هو :

Rows(i).Interior.Color = RGB(200, 200, 200)

 

  • Like 1
قام بنشر
2 ساعات مضت, الزباري said:

سؤالنا التالي: ما هو الكود المناسب لتلوين الأسطر من 1 إلى 100 لتحصل على هذه النتيجة :

color_rows.PNG

علماً بأن كود التلوين هو :


Rows(i).Interior.Color = RGB(200, 200, 200)

 

أعتقد أن هذا الكود يفي بالغرض ويحقق الشرط المطلوب وهو تلوين سطر وترك سطرين 

Sub Rowscolor()
Dim i As Integer
    i = 1
    For i = 1 To 100 Step 3
    Rows(i).Interior.Color = RGB(200, 200, 200)
    i = i
   
Next i

End Sub

هل أجبت الجواب الصحيح أم أن في جعبتكم شيء آخر؟

زائر
هذا الموضوع مغلق.
×
×
  • اضف...

Important Information