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

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

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

حيث أن الكود السابق هو:

code01.png

وكل ما يمكنك التفكير به هو تغيير الكود بداخل المستطيل الأحمر

في هذه الحالة  علينا ان نحذف السطر  :  Range("a1").Select

و نضع مكانه السطر  : ActiveSheet.UsedRange.Select

  • Like 1
قام بنشر

صح.gif

 

سأزيد المسألة تعقيداً.. انتظر السؤال التالي.

لو كان للجدول عنوان ، ويوجد فراغ بينه وبين الجدول، فكيف سنطبق الكود؟ :blink: (شاهد الجدول التالي)

table06.png

  • Like 1
قام بنشر

الإجابة في هذا الكود:

Cells.Find("name").Select
ActiveCell.Offset(1, 0).Select
Do Until ActiveCell.Value = ""
If ActiveCell.Offset(0, 1).Value = "student" Then
Range(ActiveCell, ActiveCell.End(xlToRight)).Interior.ColorIndex = 20
End If
ActiveCell.Offset(1, 0).Select
Loop

 

لاحظ أننا استفدنا من عناوين الجدول للتعرف عليه

في 10/27/2016 at 23:11, سليم حاصبيا said:

اسمحوا لي بهذا الكود


Sub tlween1()

Range("a1").CurrentRegion.Interior.ColorIndex = xlNone
Cells(1, 1).Activate
    Do While ActiveCell <> ""
       If ActiveCell.Offset(0, 1) = "student" Then _
       ActiveCell.Resize(1, 3).Interior.ColorIndex = 4
       ActiveCell.Offset(1, 0).Activate
     Loop
End Sub

تم ادراج اول سطر بالكود لاعادة اللون السابق في حال انتقلت كلمة Student من صف الى اخر

ملاحظة اخرى:

ماذا لو كتبت كلمة student بهذا الشكل  StuDent أو sTuDEnt  أو غيره

سؤال لعشاق ال VBA

 

أعتقد بأن الدالة find تبحث على الإسم بجميع صيغه.

وتقبل تحياتي

  • Like 1
قام بنشر
15 ساعات مضت, سليم حاصبيا said:

موضوع اخر خطر على بالي

كيف نحول جدول من شكل الى اخر

انظر الى المرفق

ملاحظة(الكود فيما بعد)

 

for VBA lovers.rar

سؤالنا التالي: سؤال تحدي من أستاذنا سليم حاصبيا.. وبها فكرتين، الأولى العد التنازلي، والثانية الدمج.. بانتظار الإجابة

قام بنشر

اسمحلي بهذه الإجابة

Dim i As Integer
Dim j As Integer
j = 0
Do
j = j + 1
Loop Until Cells(j, 2).Value = ""

For i = j - 2 To 1 Step -1
     If Cells(i + 1, 1) = "" Then Range(Cells(i, 1), Cells(i + 1, 1)).Merge
Next i

طبعاً ينقصها التنسيق..

  • Like 1
قام بنشر

و لإثراء الحلول هذه طريقة أخرى تؤدي نفس العمل

Sub Test5()

Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
        If Not Cells(i, 1) = "" Then
        x = Range("A" & i).Row: GoTo 200: End If
        If Cells(i, 1) = "" Then
        xx = Range("A" & i).Row: GoTo 100: End If
100
        With Range(Cells(x, 1), Cells(xx, 1))
       .Merge: .HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter
        End With
200
    Next
Application.ScreenUpdating = True

End Sub

 

  • Like 1
قام بنشر
1 ساعه مضت, أبو حنــــين said:

و لإثراء الحلول هذه طريقة أخرى تؤدي نفس العمل


Sub Test5()

Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
        If Not Cells(i, 1) = "" Then
        x = Range("A" & i).Row: GoTo 200: End If
        If Cells(i, 1) = "" Then
        xx = Range("A" & i).Row: GoTo 100: End If
100
        With Range(Cells(x, 1), Cells(xx, 1))
       .Merge: .HorizontalAlignment = xlCenter: .VerticalAlignment = xlCenter
        End With
200
    Next
Application.ScreenUpdating = True

End Sub

 

حل ممتاز 

لكن الاخ الزباري يريدها عن طريق Loop

  • Like 2
قام بنشر
15 دقائق مضت, سليم حاصبيا said:

حل ممتاز 

لكن الاخ الزباري يريدها عن طريق Loop

إنني وقعت في نفس الذي وقعت فيه أنت سابقا حينما اجبت عن السؤال و قلت لك يومها ان  الاخ الزباري يريدها عن طريق Loop

كما تدين تدان

الان, سليم حاصبيا said:

بالاضافة الى حل الاخ ابو حنين (For Next)

حلين اخرين 

1-بواسطة Loop

2-بواسطة Array

for VBA lovers Two In One.rar

الحل الجميل و الذي اعجبني هو عن طريق  Array

  • Like 2
قام بنشر

هههههه.. هذه بتلك :dance1:

وكل حل أفضل من الثاني

على العموم انتهينا من هذا الفصل وترقبوا الفصل الأخير والذي يحتوي على بعض الألغاز السهلة للدالة وآلية تكوينها بصورة مبسطة.

وتقبلوا تحياتي

  • Like 2
قام بنشر

طبعاً نحن المستفيدون الأكبر من تلاقح هذه الأفكار:wavetowel:

استمروا على هذا المنوال أنا أقوم بكتابة كل كود يتم إضافته في كراسة للإستفادة القصوى منه لاحقاً:signthankspin:

قام بنشر

الأخ/ توكل  المحترم

أشكر اهتمامك في الموضوع

وعاوزين منك انه تروينا من الكراسة العجيبة الكود الذي يرتب الأرقم من 1 إلى 10 ولكن هذه المرة بشكل تنازلي كالشكل التالي:

06.PNG

قام بنشر

بارك الله فيك أخي الحبيب الزباري على هذا الموضوع الجميل والمفيد

آخر سؤال : اقلب الحلقة واستخدم كلمة Step -1 لأننا ماشيين بالمقلوب ، زي ما الدنيا كلها ماشية بالمقلوب

تقبل صباحي

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

صباح الخير أ.ياسر

الكود تبعك خلاها تمشي عدل

في جزئية بسيطة ويكون الكود صحيح وتمشي بالمقلوب

وتقبل تحياتي

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

جرب هذا الكود

Sub Makloub()
i = 1
answer = Application.InputBox("type yourNumber", "Salim you ask", 5)
 t = Abs(Val(answer))
                If t = 0 Then GoTo 1
With ActiveCell
      .Value = "number from" & Chr(10) & t & " to " & 1
       .HorizontalAlignment = xlCenter
       .VerticalAlignment = xlCenter
       .Offset(1, 0).Resize(500, 1).ClearContents
End With
    Do Until i > t
     ActiveCell.Offset(t - i + 1, 0) = i
     i = i + 1
     Loop
     Exit Sub
1:
     MsgBox "You must type  a Positive number"
     
End Sub

 

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

الأخ/ توكل  المحترم

أشكر اهتمامك في الموضوع

وعاوزين منك انه تروينا من الكراسة العجيبة الكود الذي يرتب الأرقم من 1 إلى 10 ولكن هذه المرة بشكل تنازلي كالشكل التالي:

06.PNG

أعتقد أن الكود البسيط هذا يحقق المطلوب

Sub z_to_a()
    Dim i As Integer
For i = 1 To 10
x = 11
   Cells(i, 1) = x - i
 Next i
End Sub

 

  • Like 1
قام بنشر
32 دقائق مضت, توكل said:

أعتقد أن الكود البسيط هذا يحقق المطلوب


Sub z_to_a()
    Dim i As Integer
For i = 1 To 10
x = 11
   Cells(i, 1) = x - i
 Next i
End Sub

 

ممتاز

لكن حبذا عدم التقيد بالرقم 10 ودع المستخدم يختار الرقم الذي يريده

قام بنشر

صح.gif

الهدف من هذا المثال توضيح بأن الكود التالي يحقق نفس النتيجة:

Dim i As Integer
    For i = 10 To 1 Step -1
    x = 11
    Cells(i, 1) = x - i
 Next i

حيث أنه لما قلبنا الحلقة واستخدما step-1 لم تقلب النتيجة ، ولكنها بدأت من الصف الأخير إلى الأول

  • Like 1
قام بنشر
54 دقائق مضت, سليم حاصبيا said:

ممتاز

لكن حبذا عدم التقيد بالرقم 10 ودع المستخدم يختار الرقم الذي يريده

أخي سليم يمكن للكود التالي أن يجيب على سؤالك

Sub z_to_a()
    Dim i As Integer
    answer = Application.InputBox("type yourNumber")
 x = Abs(Val(answer))
For i = 1 To x
x = Abs(Val(answer))
   Cells(i, 1) = x + 1 - i
 Next i
End Sub

 

  • Like 2
قام بنشر

بصراحة أشكركم على التفاعل البناء، وكنت أنوي أن أُنهي هذه الحلقة، لكني سأسترسل في أمثلة في غاية الأهمية، فلو لاحظتم بأن دالة Loop تختصر الكودات الكثيرة مقارنة بغيرها، وفي الحقيقة أنا لست خبيراً بها، ولكنني بحثت عنها وتعمقت في فهمها،  وجمعت خلاصة ما تعلمته في هذا المنتدى من خلال أمثلة واقعية تكون بمثابة مرجع لأعمالكم، نفعني الله وإياكم لكل خير.

ترقبوا سؤالنا التالي

  • Like 1
قام بنشر

سؤال التحدي لهذا اليوم:

ما هو الكود الذي يظلل الصفوف بحسب الأشهر الفردية بمعنى يظلل شهر ويترك شهر، كما في المثال التالي:

10.PNG

قام بنشر
7 دقائق مضت, الزباري said:

سؤال التحدي لهذا اليوم:

ما هو الكود الذي يظلل الصفوف بحسب الأشهر الفردية بمعنى يظلل شهر ويترك شهر، كما في المثال التالي:

10.PNG

رجاءً ارفع الملف نفسه وليس صورة 

و ذلك للتعامل معه بشكل افضل

ربما الحالة هذه ليس بحاجة الى كود

يكفي النتسيق الشرطي  (مرفق مثال)

Talween_Month.rar

قام بنشر

شكراً على المرفق، التنسيق الشرطي خارج موضوعنا :wallbash:، نريد أن نتعامل مع دالة Loop، تفضل المرفق:

dt.rar

 

وتقبل تحياتي القلبية

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

Important Information