اکسل پدیا، دانشنامه پارسی اکسل

021-47625755
[email protected]

ورود یا ثبت نام

  • دانشنامه اکسل
    • اکسل چیست؟
    • اکسل مقدماتی
    • توابع اکسل
    • نمودار ها
    • وی بی – ماکرو
  • آکادمی اکسل
    • ویدئوهای آموزشی
      • رسم نمودارهای حرفه ای
      • اکسل و شروع حرفه ای
      • اکسل نینجا (اکسل پیشرفته)
      • صفر تا صد Pivot Table
      • برنامه نویسی وی بی (VBA)
    • کتاب ها
      • کتاب های فارسی
      • کتاب های انگلیسی
  • داشبورد های مدیریتی
    • آموزش ساخت داشبورد
    • دانلود داشبورد نمونه
  • افزونه های کاربردی
  • دوره های حضوری
    • اکسل نینجا
    • برنامه نویسی وی بی (VBA)
  • درباره ما
    • Cart

      0

وی بی - ماکرو

  • خانه
  • بلاگ
  • وی بی - ماکرو
  • ایجاد حلقه های تکرار در VBA اکسل با ساختار For

ایجاد حلقه های تکرار در VBA اکسل با ساختار For

  • ارسال شده توسط سامان چراغی
  • دسته بندی وی بی - ماکرو
  • تاریخ ۲۱ فروردین ۱۳۹۷
  • نظرات ۱۴ دیدگاه ها
حلقه ها در ماکرو
5 / 5 ( 4 امتیاز )

انجام کارهای تکراری در اکسل با حلقه ها در ماکرو

یکی از مهمترین مزایای استفاده از وی بی (VBA) در اکسل امکان تکرار کدها به تعداد دلخواه هست. این کار با استفاده از ساختارهایی به نام حلقه انجام پذیر هستند. در زبان VBA چندین نوع حلقه وجود دارد. در این آموزش قصد داریم ساختار دستوری حلقه For رو آموزش بدم. یکی از ساختارهای حلقه ها در ماکرو ، حلقه For برای اجرای کدهای نوشته شده به تعداد از پیش تعیین شده هست. یعنی فرض کنید شما قصد دارید نام شیت های فایل رو در سلول ها بنویسید. در این حالت مشخص است که به تعداد شیت های موجود باید کدها اجرا شوند.

حالت دیگر حلقه ها زمانی هست که شما از ابتدا دقیق نمیدانید که کدهای مدنظر شما چند بار باید تکرار شود و در واقع تکرار کدها مشروط به شرایط خاصی هست.

به صورت کلی حلقه For دارای دو ساختار هست:

  • ساختار For … Next
  • ساختار For … Each

ساختار For … Next

در این ساختار از یک متغیر استفاده میشه که مقدار آن در هر بار اجرا شدن کدهای درون حلقه For تغییر میکنه و زمانیکه به حد بالای مشخص شده برای این متغیر برسه از حلقه خارج میشه. به عنوان مثال در دستور زیر متغیر i از مقدار 1 شروع و تا 10 در هر بار چرخه تغییر میکنه (به عبارت دیگه دستور پاک کردن سلول ها 10 بار تکرار میشه)

1
2
3
For i = 1 to 10
      Worksheets( "Sheet1" ).cells( i ,1 ).clear
Next i

در این کد مقدار i در شروع حلقه از یک شروع میشه و سلول A1 پاک میشه و زمانیکه به انتهای حلقه میرسه با توجه به اینکه هنوز مقدار i از 10 کمتر هست مجددا به ابتدای حلقه برمیگرده. اما در این حالت متغیر i مقدار دو خواهد داشت و سلول A2 پاک خواهد شد. این حلقه به همین صورت ادامه پیدا میکنه تا مقدار i به 10 برسد و سلول A10 پاک شود. در این زمان مقدار متغیر i به عدد 11 افزایش پیدا میکنه و با توجه به اینکه از عدد 10 بیشتر است از حلقه خارج میشه و دیگه سلول A11 پاک نمیشه.

حتما بخوانید:  روش های چسباندن اطلاعات

بعد از آشنایی با ساختار حلقه For، این سوال پیش میاد که اگر بخوایم مقداری که در انتهای هر حلقه، مقداری که به متغیر شمارنده اضافه میشه چیزی به غیر از یک باشه چه باید کرد؟

فرض کنید قصد ایجاد داده های محور افقی یک نمودار هستید. این اعداد از 1 شروع و به فاصله 0.1 از هم زیاد میشه تا به 10 برسه. برای این کار از کد زیر استفاده میکنیم:

1
2
3
For i = 1  To10  Step 0.5
    Worksheets( "sheet1" ).Cells( (i - 0.5) / 0.5, 1 ) = i
Next i

در این کد با استفاده از دستور Step تعیین کردیم که متغیر i در انتهای حلقه به مقدار 0.5 زیاد بشه. همچنین از این متغیر استفاده کردیم که در هر بار چرخش مقدار i با استفاده از دستور Cells در سلول های ستون A نوشته بشه.

نکته:
برای اینکه چرخه از حالت افزایش (افزایش مقدار متغیر شمارنده) به حالت کاهشی تغییر کنه کافیه مقدار عددی که جلوی Step نوشته میشه عدد منفی باشه و مقدار اول و آخر باز جابجا بشه:
For i = 10 To 1 Step -1

 

نوع دیگری از حلقه ها در ماکرو که برای تعریف تکرار با شرط دلخواه وجود داره حلقه While هست که در مقاله ای دیگه بهش پرداخته میشه.

برچسب:متوسط

  • اشتراک گذاری:
profile avatar
سامان چراغی
من سامان چراغی هستم. دانش آموخته مقطع فوق لیسانس دانشگاه تربیت مدرس در رشته مهندسی صنایع. از سال 1388 اکسل و برنامه نویسی VBA رو به صورت حرفه ای شروع کردم.

مطلب قبلی

بدست آوردن Kامین عدد کوچک با تابع Small در اکسل
۲۱ فروردین ۱۳۹۷

مطلب بعدی

ابزار Text to Column اکسل | قسمت دوم
۲۱ فروردین ۱۳۹۷

ممکن است همچنین دوست داشته باشید

Events Cover
رویدادها در اکسل
۱۰ فروردین, ۱۳۹۷
InputBox-Function-Cover
تابع Msgbox و تعامل با کاربر
۱۲ اسفند, ۱۳۹۶
Macro-Security-Cover
تنظیمات امنیتی ماکرو در اکسل
۲۵ بهمن, ۱۳۹۶

    14 نظر

  1. profile avatar
    مهدی
    ۲۷ آذر ۱۳۹۹
    پاسخ

    سلام بنده میخوام با استفاده از کد نویسی در اکسل تعدادی شیت ایجاد کنم . چطور میشه این کار را انجام داد ؟
    آیا باید دستور ساخت شیت رو داحل یک حلق برد ؟
    اگر درسته لطفا راهمایی کنید که چگونه این کار را انجام بدهم

    • profile avatar
      حسنا خاکزاد
      ۲۹ آذر ۱۳۹۹
      پاسخ

      درود بر شما
      برای این کار ماکرو ضبط کنید و کد رو مشابه مقاله که ساختار for رو توضیح داده قرار بدید

  2. profile avatar
    سعیدرضا
    ۲۲ دی ۱۳۹۸
    پاسخ

    با سلام
    من 30 تا فایل به تعداد روز های ماه دارم که داخلش اطلاعات هست.
    حالا می خوام یک فایل جمع درس کنم که بره از داخل فایل های دیگه چنتا سلول مشخص رو بخونه بیاره داخل مجموع.
    چطور میتونم این کارو بکنم؟
    البته این سی تا فایل به مرور تهیه میشوند و باید فایل جمع هر فایل جدید که به فولدر ماه اضافه میشه رو اتوماتیک پیدا کنه و چنتا سلول را بخونه بیاره داره خودش.
    سپاس

    • profile avatar
      حسنا خاکزاد
      ۲۲ دی ۱۳۹۸
      پاسخ

      درود بر شما
      یا باید کدنویسی VBA انجام بدید یا با پاورکوئری انجام بدید

      • profile avatar
        سعیدرضا
        ۲۳ دی ۱۳۹۸
        پاسخ

        بسیار ممنون از پاسخ سریع تون
        بله بنده اطلاع داشتم هردو روش فوق چاره کار است اما چه کنم که هیچ کدام را بلد نیستم و فیلم ها اموزشی نیز کمکی نکرد. شاید دوستی بتواند به بنده کمک کند؟!
        سپاس از سایت بسیار پر بارتون

        • profile avatar
          حسنا خاکزاد
          ۲۳ دی ۱۳۹۸
          پاسخ

          سوالتون چیزی نیست که بشه اینجا مشخصا جواب داد. بستگی به خیلی چیزها داره
          اینجا فقط میشه راهنمایی کرد. مطابعه و یادگیری با خودتون

          دستور merge رو در پاورکوئری مطالعه کنید و روی داده هاتون اعمال کنید

  3. profile avatar
    شهاب
    ۲۵ آذر ۱۳۹۸
    پاسخ

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub transpose()
    xRow = Selection.Rows.Count
    xCol = Selection.Column
    nextRow = 1
    stepValue = 12
    For i = 1 To xRow Step stepValue
    Cells(i, xCol).Resize(stepValue).Copy
    Cells(1, xCol).Offset(1, 3).PasteSpecial Paste:=x1PasteA
    nextRow = nextRow + 1
    Next
    End Sub

    سلام مشکل این کد چیه؟

    • profile avatar
      سامان چراغی
      ۱ دی ۱۳۹۸
      پاسخ

      سلام
      کد زیر رو با اکد انتهای پیام جابجا کنید:

      1
      Cells(1, xCol).Offset(1, 3).PasteSpecial Paste:=x1PasteA

      کد صحیح:

      1
      Cells(1, xCol).Offset(1, 3).PasteSpecial Paste:=x1PasteA

  4. profile avatar
    علی
    ۱۷ مرداد ۱۳۹۸
    پاسخ

    من یک ستون دارم با یه سری داده های تکراری
    در مقابل این ستون یه ستون دیگه هسات که شامل یه سری عدد هست
    حالا میخوام بنویسم تا جایی که ستون اول با هم مساوی هستند دادهای ستون دوم رو کنار هم (جمع نکنه) بذاره
    Sub ali()
    Dim i As Integer
    Dim j As Integer
    j = i – 1
    For i = 2 To 6
    If Cells(i, “a”).Value = Cells(i – 1, “a”).Value Then
    Cells(i – 1, “c”) = Cells(i – 1, “b”).Value & Cells(i, “b”).Value
    End If
    Next i

    End Sub
    این کد رو نوشتم اما این فقط دو ستون رو کنار هم میذاره
    برا نوشتن حلقه تو این دستور کمک میخواستم ازتون
    ممنون

    • profile avatar
      سامان چراغی
      ۱۲ آبان ۱۳۹۸
      پاسخ

      سلام
      برای حل این مسئله نیاز به تعریف حداقل دو حلقه تو در تو هست برای همین درون حلقه For اولی که خودتون نوشتید باید یک حلقه For دیگه تعریف کنید که بر اساس عددی که در ستون اول بررسی میکنید داده های ستون دوم (با استفاده از حلقه دوم) بررسی کنه و نتیجه دلخواه رو براتون ثبت کنه.

  5. profile avatar
    میثم
    ۶ تیر ۱۳۹۸
    پاسخ

    سلام برای تبدیل یک کد دستوری به یک حلقه چکاری باید انجام دهیم
    مثلا کد
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If (KeyAscii > 47 And KeyAscii < 58) Then
    KeyAscii = KeyAscii
    Else
    KeyAscii = 0
    If Len(TextBox1.Text) < 10 Then
    MsgBox "شما نمی‌توانید حروف وارد کنید ، فقط باید عدد وارد کنید", vbMsgBoxRight, "اطلاعات ورودی اشتباه است"
    Cancel = True
    End If
    End If
    End Sub
    را چطور حلقه کنم که بتونم برای چندین تکس باکس استفاده کنم

    • profile avatar
      سامان چراغی
      ۱۱ تیر ۱۳۹۸
      پاسخ

      سلام، از حلقه ها برای انجام این کار استفاده کنید.

  6. profile avatar
    سلیمانی
    ۲۸ تیر ۱۳۹۷
    پاسخ

    سلام
    من این مقاله شما را خوندم . خیلی جالبه با vba خیل از حلقه های مورد نیاز را می تونم ایجاد کنم ولی مشکلی که دارم اینه که چطور وارد محیط vba بشم تا حلقه را ایجاد کنم. ممنون میشم اگه راهنمایی کنید.

    • profile avatar
      حسنا خاکزاد
      ۲۸ تیر ۱۳۹۷
      پاسخ

      درود بر شما
      پست زیر رو مطالعه کنید:

      https://excelpedia.net/macro-recording/

نظر بدهید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --

زودتر از دیگران با خبر بشید

از طریق ایمیل، مطالب آموزشی درباره اکسل و برنامه نویسی وی بی و سایر رویدادهای مهم را دریافت خواهید کرد.
  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

آخرین مطالب

مقادیر متمایز در اکسل
تفاوت داده Distinct و Unique چیست؟ چطور میشه مشخص کرد
۱۰فروردین۱۴۰۰
استفاده از چندین تابع IF اکسل در هم
توابع IF تو در تو و نکات مهمی که باید بدانید
۲۷اسفند۱۳۹۹
تابع Trim
تابع Trim در اکسل
۲۱اسفند۱۳۹۹
کاربرد Power Query
چند مثال کاربردی از ابزار Power Query
۱۵اسفند۱۳۹۹

وجود یک منبع جامع و به روز که بدونی همیشه پشتیبانته برای یادگیری ضروریه. اکسل پدیا رو برای همین به وجود آوردیم.

پاسخ سوالات شما

اگر سوالات اکسلی دارید تو تالار گفتمان اکسل پدیا میتونید مطرح کنید. اساتید بسیاری هستند که به شما کمک میکنند.

کانال و تالار گفتمان اکسل پدیا

ورود به تالار گفتگو تلگرام

عضویت در خبرنامه
با عضویت در خبرنامه، ایمیل‌های آموزشی درباره اکسل و برنامه نویسی وی بی را دریافت خواهید کرد.

  • این فیلد برای اعتبار سنجی است و باید بدون تغییر باقی بماند .

021-47625755

[email protected]

آدرس: تهران، میدان دوم صادقیه، برج گلدیس، طبقه 7 واحد 721

دانلود اپ اکسل پدیادانلود از کافه بازار

تمامی حقوق برای اکسل پدیا محفوظ است.

  • اکسل از راه دور
  • شرایط و قوانین
  • درباره ما
  • تماس با ما