نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی پرتال اطلاعاتی
  • خانه
  • اهن
  • تابع Select case همه شرایط را بررسی می کند. اپراتور شعبه "Select Case"

تابع Select case همه شرایط را بررسی می کند. اپراتور شعبه "Select Case"

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

VBA از ساختارهای تصمیم گیری زیر پشتیبانی می کند:

اگر ... ... سپس. ... ... دیگر

6.1 ساختار If. ... ... سپس

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

If شرط, سپس عبارت If شرط, سپس عبارت End If

شرط معمولاً یک مقایسه ساده است، اما می تواند هر عبارتی با مقدار محاسبه شده باشد. این مقدار اگر صفر باشد به صورت False تعبیر می شود و هر غیرصفری True در نظر گرفته می شود. اگر شرط درست باشد، تمام عبارات بعد از کلمه کلیدی Then اجرا می شوند. برای اجرای شرطی یک دستور واحد، می توانید از نحو تک خطی و نحو چند خطی (ساخت بلوک) استفاده کنید.

دو عملگر زیر معادل هستند:

در صورت وجود تاریخ< Now Then anyDate = Now If anyDate < Now Then anyDate = Now End If

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

در صورت وجود تاریخ< Now Then anyDate = Now Timer.Enabled = False " Запретить таймер. End If

اگر شرط نادرست باشد، عبارات بعد از کلمه کلیدی Then اجرا نمی شوند و کنترل به خط بعدی (یا خط بعد از دستور End If در ساخت بلوک) منتقل می شود.

6.2 اگر ساخت. ... ... سپس. ... ... دیگر

چندین بلوک از دستورات را تعریف می کند که یکی از آنها بسته به شرایط اجرا می شود:

If شرط 1 سپس عبارت 1 ElseIf شرط 2 سپس عبارت2. ... ... عبارت Else -n پایان If

هنگام اجرا، شرط 1 ابتدا بررسی می شود. اگر نادرست باشد، VBA شرط2 بعدی را بررسی می کند و به همین ترتیب تا زمانی که یک شرط واقعی را پیدا کند. هنگامی که VBA آن را پیدا می کند، بلوک مناسبی از دستورات را اجرا می کند و سپس کنترل را به دستور بعد از دستور End if منتقل می کند. در این ساختار، شما می توانید یک بلوک دستور Else را اضافه کنید که VBA در صورتی که هیچ یک از شرایط برآورده نشد، آن را اجرا می کند.

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

مثال فرعی 1 () Dim a As Single, b as Single, x as Single Dim z as Double Call read ("A1"، a) Call read ("B1"، b) اجازه دهید x = CSng (InputBox ("x را وارد کنید" ، "ورودی داده"، 0)) اگر x<= a Then z = Sin(x) ElseIf x >= b سپس z = قهوهای مایل به زرد (x) دیگر: z = Cos (x) پایان اگر فراخوانی شود ("C1"، z) پایان فرعی

توجه داشته باشید که می توانید هر تعداد بلوک Elself را به دستور If خود اضافه کنید. ... ... سپس. با این حال، تعداد بلاک های Elself می تواند آنقدر زیاد شود که If. ... ... سپس بسیار دست و پا گیر و ناخوشایند خواهد شد. در چنین شرایطی باید از ساختار تصمیم گیری دیگری استفاده کرد - Select Case.

6.3 گزینه Case Construction را انتخاب کنید

ساختار Select Case جایگزینی برای ساختار If است. ... ... سپس. ... ... در غیر این صورت در صورت اجرای بلوکی متشکل از مجموعه بزرگی از دستورات. ساختار Select Case قابلیتی شبیه ساز If فراهم می کند. ... ... سپس. ... ... در غیر این صورت، اما وقتی چندین گزینه دارید، کد شما را خواناتر می کند.

ساختار Select Case بر روی یک عبارت آزمایش پذیر عمل می کند که یک بار پس از ورود به ساختار ارزیابی می شود. سپس VBA نتیجه را با مقادیر مشخص شده در دستورات Case سازه مقایسه می کند. اگر مطابقت یافت شود، بلوک دستور مرتبط با عبارت Case اجرا می شود:

Case test_expression]] را انتخاب کنید. ... ... ] پایان انتخاب کنید

هر لیست عبارت لیستی از یک یا چند مقدار است. اگر بیش از یک مقدار در یک لیست وجود داشته باشد، آنها با کاما از هم جدا می شوند. هر بلوک عبارت شامل چند عبارت است یا هیچ کدام. اگر معلوم شد که مقدار محاسبه شده عبارت آزمایش شده با مقادیر چندین عبارت Case مطابقت دارد، بلوک عبارات مرتبط با اولین عبارت Case از تمام موارد مطابق پیدا شده اجرا می شود. VBA یک بلوک دستور مرتبط با یک عبارت Case Else را اجرا می کند (توجه داشته باشید که اختیاری است) اگر هیچ مقدار عبارت منطبقی با مقادیر از همه لیست های دستورات Case یافت نشد.

بیایید مثالی از محاسبه تابع را در نظر بگیریم

مثال فرعی2 () Const pi2 = 1.57 Dim x As Single Dim z As Double Let x = CSng (InputBox ("enter x"، "Data input" 0)) Case x Case -pi2 z = Sin (x) Case 0 را انتخاب کنید z = Cos (x) Case pi2 z = Tan (x) Case Else MsgBox "داده های ورودی نامعتبر!" خروج از پایان فرعی Call out ("D1"، z) پایان فرعی را انتخاب کنید

توجه داشته باشید که ساختار Select Case عبارت را تنها یک بار در هنگام وارد کردن و در If ارزیابی می کند. ... ... سپس. ... ... در غیر این صورت، یک عبارت متفاوت برای هر عبارت Elself ارزیابی می شود. اگر ... ... سپس. ... ... اگر عبارت If و هر عبارت Elself یک عبارت را ارزیابی کنند، می توان با Select Case جایگزین کرد.

زبان برنامه نویسی ویژوال بیسیک. برنامه ریزی شعبه

انشعاب در ویژوال بیسیک با استفاده از:

  • عبارت IF شرطی؛
  • تابع IIF داخلی؛
  • اپراتور CASE را انتخاب کنید.

برای بررسی یک شرط و اجرای یک عملگر یا بلوکی از دستورات، از استفاده کنید مشروط اگر ... سپس... این عملگر را می توان با نحو مختلف استفاده کرد: تک خطی (خطی) و چند خطی (بلوک).

عملگر خطی دستور زیر را دارد:

اگر<условие>سپس<операторы!>

دستور بلوک دارای نحو زیر است:

اگر<условие>سپس
<блок операторов 1>
پایان اگر

اگر شرط مشخص شده True باشد، بلوک دستور اجرا می شود، در غیر این صورت، دستور block2. اگر بند Else مشخص نشده باشد،اگر شرط برآورده شود، کنترل بلافاصله پس از If به اپراتور بعدی منتقل می شود.

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

اگر<условие 1>سپس
<блок операторов 1>
خود<условие 2>سپس
<блок операторов 2>
خود<условие n>سپس
<блок операторов n>
پایان اگر

برای انتخاب یکی از مقادیر بسته به تحقق یا عدم تحقق یک شرط خاص، از تابع شرطی IIF استفاده می شود که دارای نحو زیر است:

IIF (<условие>, <значение1>, <значение2>)

این تابع اگر شرط درست باشد مقدار 1 و اگر شرط نادرست باشد مقدار 2 را برمی‌گرداند.

به عنوان یک شرط، می توانید از یک عبارت Boolean استفاده کنید که True or را برمی گرداند

False یا هر عبارت حسابی (صفر معادل False و غیر صفر True است).

عبارت SELECT CASEبرای آزمایش یک شرط و اجرای یکی از چندین بلوک دستور استفاده می شود.

فرمت رکورد اپراتور:

انتخاب مورد<проверяемое выражение>
مورد<список выражений 1>
<операторы 1>مورد<список выражений 2>
<операторы 2>مورد<список выражений 3>
<операторы 3>
مورد دیگر
<операторы группы Else>
پایان انتخاب کنید

عبارت مورد آزمایش در ابتدای عبارت Select Case ارزیابی می شود. این عبارت می تواند هر نوع مقداری (بولی، عددی، رشته ای) را برگرداند.

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

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

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

  • <выражение>- همزمانی عبارت داده شده را با یکی از عبارات - عناصر لیست بررسی می کند.
  • <выражение 1>که<выражение 2>- بررسی می کند که آیا عبارت مشخص شده در محدوده مشخص شده است یا خیر.
  • < Is <логический оператор> < выражение>- تحقق شرط مشخص شده را برای عبارت مشخص شده بررسی می کند.

و در پست امروز در مورد بیانیه انتخاب مورد VBA بحث خواهیم کرد. VBA Select Case را می توان به جای دستورات پیچیده Excel Nested If استفاده کرد. این باعث می شود کد VBA سریعتر اجرا شود و درک آن آسانتر شود.

دستور Select-Case (که در برخی از زبان‌ها به آن Switch Case نیز گفته می‌شود) یک متغیر یا یک عبارت را برای موارد (مقدار) مختلف بررسی می‌کند. اگر هر یک از موارد درست شود، فقط آن مورد اجرا می شود و برنامه همه موارد دیگر را نادیده می گیرد.

اگر به یاد داشته باشید که در آخرین پست ما در مورد "چگونه می توانید" صحبت کردیم.

نحو بیانیه مورد انتخاب VBA:

نحو به شرح زیر است:

Case Condition را انتخاب کنید
مقدار موردی_1
کد برای اجرا وقتی شرط = value_1
مقدار موردی_2
کد برای اجرا وقتی شرط = value_2
مقدار موردی_3
کد برای اجرا وقتی شرط = value_3
مورد دیگر
کد برای اجرا زمانی که همه موارد دیگر False هستند
پایان انتخاب کنید

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

«Value_1»، «value_2» و «value_3» نتایج احتمالی «شرط» هستند. هر زمان که هر یک از این مقادیر با "شرط" مطابقت داشته باشد، بلوک Case مربوطه آن اجرا می شود.

«Else» نوعی مقدار مورد پیش‌فرض است که فقط زمانی اجرا می‌شود که تمام عبارات Case بالا به False تبدیل شوند. مورد «دیگر» اختیاری است، اما به طور کلی استفاده از آن عمل خوبی در نظر گرفته می‌شود.

نمونه هایی از Select-Case در VBA:

حال اجازه دهید به چند نمونه عملی از بیانیه های موردی برویم.

مثال 1:گزینه Case Statement with an Expression را انتخاب کنید.

در مثال زیر، یک شرط (به عنوان مثال a = b) به دستور Select Case ارائه کرده ایم. اگر درست باشد بلوک Case True اجرا می شود و اگر False باشد بلوک Case False اجرا می شود.

Sub Select_Case_Example () "مقدار را برای متغیرهای a = InputBox (" مقدار A: ") را وارد کنید b = InputBox (" مقدار B: ")" ارزیابی عبارت Select Case a = b Case True MsgBox "The عبارت درست است "Case False MsgBox" عبارات FALSE است "End Select End Sub

توجه داشته باشید:در این کد برای گرفتن مقادیر از کاربر استفاده می شود.

مثال 2:عبارت Case برای بررسی رشته های متنی

در این مثال رشته های متنی را در عبارات Case با هم مقایسه می کنیم. اگر مطابقت یافت شود، بلوک case مربوطه اجرا می شود در غیر این صورت بلوک Case Else اجرا می شود.

Sub Select_Case_Example () "مقدار متغیرها را وارد کنید fruit_name = InputBox (" نام میوه را وارد کنید: ")" ارزیابی عبارت Select Case fruit_name Case "Apple" MsgBox "You entered Apple" Case "Mango" MsgBox "You entered Mango" Case "Orange" MsgBox "شما وارد نارنجی شدید" مورد دیگری MsgBox "من" این میوه را نمی‌شناختم! "End Select End Sub

مثال 3:بیانیه مورد برای بررسی اعداد

در مثال زیر بررسی خواهیم کرد که آیا عدد وارد شده توسط کاربر کمتر یا بزرگتر از 5 است.

Sub Select_Case_Example () "مقدار متغیرها را وارد کنید Num = InputBox (" هر عددی را بین 1 تا 10 وارد کنید: ")" ارزیابی عبارت Select Case Num Case Is< 5 MsgBox "Your Number is less than 5" Case Is = 5 MsgBox "Your Number is Equal to 5" Case Is >5 MsgBox "شماره شما بزرگتر از 5 است" پایان End Sub را انتخاب کنید

توجه داشته باشید:شما می توانید استفاده کنید استکلمه کلیدی با Case Statement برای مقایسه مقادیر.

مثال 4:عبارت Case را برای بررسی شرایط متعدد در یک مورد واحد انتخاب کنید.

در این مثال از کاربر می خواهیم که هر عددی را از 1 تا 10 وارد کند. و سپس با استفاده از چند شرط در عبارت case، زوج یا فرد بودن عدد را بررسی خواهیم کرد. توجه داشته باشید که در اینجا من از یک "," (کاما) برای مقایسه چند شرط در یک مورد استفاده کرده ام.

Sub Select_Case_Example () "مقدار متغیرهای Num = InputBox را وارد کنید (" هر عددی را بین 1 تا 10 وارد کنید: ")" ارزیابی عبارت Select Case Num Case 2, 4, 6, 8, 10 MsgBox "Your Number Is Even." Case 1, 3, 5, 7, 9 MsgBox "شماره شما فرد است." Case Else MsgBox "شماره شما خارج از محدوده است." پایان End Sub را انتخاب کنید

توجه داشته باشید:می‌دانم که روش‌های ساده‌تری برای بررسی زوج یا فرد بودن یک عدد وجود دارد، اما من از این مثال فقط برای توضیح اینکه چگونه می‌توانید شرایط چندگانه را در یک عبارت موردی بررسی کنید استفاده کرده‌ام.

مثال 5:عبارت Case برای بررسی یک محدوده پیوسته به عنوان شرط.

در اینجا یک محدوده پیوسته را به عنوان یک شرط آزمایش خواهیم کرد. ما از کاربر می خواهیم که هر عددی را بین 1 تا 10 وارد کند، اگر عدد بین 1 تا 5 باشد (شامل 1 و 5) در صورتی که عدد وارد شده توسط کاربر باشد، "مورد 1 تا 5" "درست" خواهد بود. بین 6 و 10 (شامل هر دو 6 و 10) سپس «مورد 6 تا 10» «درست» خواهد بود، اگر هر دو حالت قبلی «نادرست» باشند، «مورد دیگر» اجرا خواهد شد.

Sub Select_Case_Example () "مقدار متغیرها را وارد کنید Num = InputBox (" هر عددی را بین 1 تا 10 وارد کنید: ")" ارزیابی عبارت Select Case Num Case 1 تا 5 MsgBox "تعداد شما بین 1 تا 5" Case 6 تا 10 MsgBox "شماره شما بین 6 تا 10" Case Else MsgBox "شماره شما خارج از محدوده است." پایان End Sub را انتخاب کنید

بنابراین، این همه در مورد VBA Select Case Statement بود. در صورت تمایل نظرات خود را در مورد این موضوع به اشتراک بگذارید.

درباره ankit kaul

Ankit بنیانگذار Excel Trick است. او یک گیک فناوری است که دوست دارد در تمام طول روز جلوی دوست دختر مربع سرش (رایانه شخصی اش) بنشیند. : دی. Ankit اشتیاق زیادی به یادگیری مایکروسافت اکسل دارد. تنها هدف او این است که شما بچه ها را به "Excel Geeks" تبدیل کند.

مهمترین عملگرهای شرطی مورد استفاده در Excel VBA عملگرها هستند اگر پس از آنو انتخاب مورد... هر دوی این عبارت ها یک یا چند شرط را بررسی می کنند و بسته به نتیجه، اقدامات مختلفی را انجام می دهند. در ادامه در مورد این دو عملگر شرطی با جزئیات بیشتری صحبت خواهیم کرد.

ویژوال بیسیک اگر ... سپس بیانیه

اپراتور اگر پس از آنشرایط را بررسی می کند و اگر TRUE باشد، مجموعه اقدامات مشخص شده انجام می شود. مجموعه ای از اقدامات را نیز می توان تعریف کرد که اگر شرط FALSE باشد انجام می شود.

نحو اپراتور اگر پس از آنمثل این:

اگر شرط 1سپس
اقدامات در صورت تحقق شرط 1
اگر دیگر شرط 2سپس
اقدامات در صورت تحقق شرط 2
دیگر
اقدامات در صورت عدم رعایت هیچ یک از شرایط
پایان اگر

در این عبارت عناصر اگر دیگرو دیگراگر شرایط اپراتور مورد نیاز نباشد، ممکن است استفاده نشود.

در زیر مثالی است که در آن با استفاده از عملگر اگر پس از آنرنگ پر شدن سلول فعال بسته به مقدار موجود در آن تغییر می کند:

اگر ActiveCell.Value< 5 Then ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет ElseIf ActiveCell.Value < 10 Then ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End If

توجه داشته باشید که به محض درست شدن شرط، اجرای دستور شرطی قطع می شود. بنابراین، اگر مقدار متغیر ActiveCellکمتر از 5، سپس شرط اول درست می شود و سلول سبز می شود. پس از آن، اجرای اپراتور اگر پس از آنقطع می شود و سایر شرایط بررسی نمی شود.

عبارت Case Statement را در ویژوال بیسیک انتخاب کنید

اپراتور انتخاب موردمشابه اپراتور اگر پس از آنبه این صورت که صحت شرط را نیز بررسی می کند و بسته به نتیجه یکی از گزینه ها را انتخاب می کند.

نحو اپراتور انتخاب موردمثل این:

انتخاب مورد اصطلاح
مورد ارزش 1
اقدامات در صورتی که نتیجه Expression با مقدار 1 مطابقت داشته باشد
مورد ارزش 2
اقدامات در صورتی که نتیجه Expression با Value2 مطابقت داشته باشد

مورد دیگر
اقدامات در صورتی که نتیجه Expression با هیچ یک از گزینه های لیست شده Values ​​مطابقت نداشته باشد
پایان انتخاب کنید

عنصر مورد دیگراختیاری است، اما برای مدیریت مقادیر غیرمنتظره توصیه می شود.

در مثال زیر با استفاده از ساخت انتخاب موردرنگ پر شدن سلول فعلی بسته به مقدار موجود در آن تغییر می کند:

Case ActiveCell.Value Case Is را انتخاب کنید<= 5 ActiveCell.Interior.Color = 65280 "Ячейка окрашивается в зелёный цвет Case 6, 7, 8, 9 ActiveCell.Interior.Color = 49407 "Ячейка окрашивается в оранжевый цвет Case 10 ActiveCell.Interior.Color = 65535 "Ячейка окрашивается в жёлтый цвет Case 11 To 20 ActiveCell.Interior.Color = 10498160 "Ячейка окрашивается в лиловый цвет Case Else ActiveCell.Interior.Color = 255 "Ячейка окрашивается в красный цвет End Select

مثال بالا نشان می دهد که چگونه می توانید یک مقدار را برای یک عنصر به روش های مختلف تعیین کنید مورددر حال ساخت انتخاب مورد... این راه هاست:

مورد است<= 5 بنابراین، با استفاده از کلمه کلیدی مورد استمی توان بررسی کرد که آیا مقدار راضی است یا خیر اصطلاحاتشرایطی مانند <=5 .
مورد 6، 7، 8، 9 به این ترتیب می توانید بررسی کنید که آیا مقدار یکسان است یا خیر اصطلاحاتبا یکی از مقادیر ذکر شده مقادیر ذکر شده با کاما از هم جدا می شوند.
مورد 10 این بررسی می کند که آیا مقدار یکسان است یا خیر اصطلاحاتبا مقدار معین
مورد 11 تا 20 بنابراین، می توانید یک عبارت بنویسید تا بررسی کنید که آیا مقدار راضی است یا خیر اصطلاحاتشرایطی مانند از 11 تا 20(معادل نابرابری «11<=значение<=20”).
مورد دیگر مانند این، با استفاده از کلمه کلیدی دیگر، اقدامات در صورتی نشان داده می شود که مقدار اصطلاحاتبا هیچ یک از گزینه های ذکر شده مطابقت ندارد مورد.

به محض پیدا شدن یکی از شرایط، اقدامات مربوطه انجام شده و سازه خارج می شود. انتخاب مورد... یعنی در هر صورت فقط یکی از شاخه های ذکر شده اجرا می شود مورد.

خوب، هیچ راهی برای انجام آنچه می خواهید وجود ندارد. شما نمی توانید از چیزی غیر از نحو اکسل در داخل یک فرمول استفاده کنید، بنابراین چیزهایی مانند "A1 = 1 تا 9" ممکن نیست.

شما می توانید یک روال VBA نسبتاً پیچیده بنویسید که رشته ها یا هر چیز دیگری را می گیرد و آنها را تجزیه می کند، اما این واقعاً به طراحی و پیاده سازی یک زبان کامل خلاصه می شود. و "کد" شما به خوبی با اکسل کار نمی کند. به عنوان مثال، اگر شما چیزی شبیه به

موارد ("(A1 = """، "هیچ چیز وجود ندارد" ")، (دیگر، A1)")

(به نقل قول های فراری توجه کنید) اکسل مرجع A1 شما را هنگامی که آن را جابجا می کنید یا فرمولی را کپی می کنید به روز نمی کند. بنابراین، کل پارامتر "syntax" را کنار بگذارید.

با این حال، به نظر می رسد که می توانید بیشتر رفتاری را که فکر می کنم واقعاً می خواهید با فرمول های معمولی اکسل به اضافه یک VBA UDF کوچک بدست آورید. ابتدا UDF:

تابع عمومی arr (ParamArray args ()) arr = args تابع پایان

این به ما امکان می دهد از مجموعه ای از آرگومان ها یک آرایه ایجاد کنیم. از آنجایی که آرگومان‌ها می‌توانند عبارات باشند، نه فقط ثابت، می‌توانیم آن را از فرمول زیر نام ببریم:

Arr (A1 = 42، A1 = 99)

و آرایه ای از بولی ها را برگردانید.

با این UDF کوچک، اکنون می توانید از فرمول های معمولی برای "انتخاب پرونده" استفاده کنید. آنها به این شکل خواهند بود:

CHOOSE (مطابقت (صحیح، arr (A1> 5، A1<5, A1=5), 0), "gt 5", "lt 5", "eq 5")

اتفاقی که می افتد این است که "arr" یک آرایه بولی را برمی گرداند، "MATCH" موقعیت اولین TRUE را پیدا می کند و "CHOOSE" "مورد" مربوطه را برمی گرداند.

می‌توانید با قرار دادن کل مورد در «IFERROR»، عبارت «دیگر» را شبیه‌سازی کنید:

IFERROR (انتخاب (تطابق (صحیح، آرر (A1> 5، A1<5), 0), "gt 5", "lt 5"), "eq 5")

اگر این برای شما زیاد است، همیشه می توانید VBA UDF دیگری بنویسید که نتیجه آن MATCH، CHOOSE و غیره باشد. داخل و آن را اینگونه صدا می کند:

موارد (arr (A1> 5، A1<5, A1=5), "gt 5", "lt 5", "eq 5")

این به نحو پیشنهادی شما نزدیک است و بسیار بسیار ساده تر است.

من می بینم که شما قبلاً راه حلی (خوب) ارائه کرده اید که به آنچه واقعاً می خواهید نزدیکتر است، اما فکر کردم به هر حال این را اضافه کنم، زیرا عبارت من در بالا در مورد بازیگران MATCH، CHOOSE و غیره است. داخل UDF باعث شد ساده تر از آنچه هست به نظر برسد.

بنابراین موارد "UDF" در اینجا آمده است:

موارد توابع عمومی (caseCondResults، ParamArray caseValues ​​()) در خطا برو به EH Dim resOfMatch resOfMatch = Application.Match (True، caseCondResults، 0) اگر IsError (resOfMatch) سپس case = resOfMatch Else Call caseV (case) LBound) (caseValues ​​+ resOfMatch - 1)) End If Exit Function EH: case = CVERr (xlValue) End Function

از یک روال کمکی کوچک استفاده می کند، "تخصیص":

تخصیص زیر عمومی (ByRef lhs، rhs) اگر IsObject (rhs) سپس lhs = rhs را تنظیم کنید Else lhs = rhs پایان اگر پایان Sub

رویه تخصیص فقط رسیدگی به این واقعیت را آسان تر می کند که کاربران می توانند UDF ها را با هر مقدار یا محدوده مرجع فراخوانی کنند. از آنجایی که می‌خواهیم UDF «موارد» ما مانند Excel «CHOOSE» کار کند، می‌خواهیم منابع را در صورت نیاز برگردانیم.

اساساً در "موارد" جدید UDF ما خودمان "انتخاب" را انجام می دهیم و مقادیر موارد را در آرایه پارامتر فهرست می کنیم. من کنترل کننده خطا را در آنجا حذف کردم، بنابراین موارد اساسی مانند عدم تطابق بین نتایج شرط مورد و مقادیر حروف باعث یک مقدار بازگشتی #VALUE! احتمالاً بررسی‌های بیشتری را به تابع واقعی اضافه می‌کنید، برای مثال، برای اطمینان از اینکه نتایج شرط بولی هستند و غیره.

خوشحالم که راه حل بهتری برای خودتان به دست آورده اید! جالب بود.

اطلاعات بیشتر در مورد "تخصیص":

در پاسخ به نظر شما، در اینجا بیشتر در مورد چرایی این بخشی از پاسخ من است. VBA برای تخصیص یک شی به یک متغیر از نحو متفاوتی نسبت به تخصیص یک مقدار ساده استفاده می کند. به راهنمای VBA نگاهی بیندازید یا به این سؤال stackoverflow نگاه کنید و دیگران دوست دارند: کلمه کلیدی Set واقعاً در VBA چه می کند؟

این مهم است زیرا وقتی یک تابع VBA را از فرمول اکسل فرا می‌خوانید، پارامترها می‌توانند علاوه بر اعداد، رشته‌ها، بولین‌ها، خطاها و آرایه‌ها، اشیاء Range باشند. (نگاه کنید به یک Excel VBA UDF که از یک کاربرگ فراخوانی می شود، می تواند نمونه ای از کلاس مدل شی VBA اکسل به غیر از "Range" ارسال شود؟)

مراجع محدوده همان چیزی است که با استفاده از نحو اکسل مانند A1: Q42 توضیح می دهید. وقتی یکی را به عنوان پارامتر به UDF اکسل می دهید، به عنوان یک شی Range ظاهر می شود. اگر می خواهید یک شی Range را از یک UDF برگردانید، باید این کار را به صراحت با استفاده از کلمه کلیدی VBA "Set" انجام دهید. اگر از Set استفاده نمی کنید، اکسل به جای آن مقدار را در محدوده گرفته و آن را برمی گرداند. بیشتر اوقات مهم نیست، اما گاهی اوقات شما محدوده واقعی را می خواهید، به عنوان مثال زمانی که فرمولی با نام دارید که باید به یک محدوده ارزیابی شود زیرا به عنوان منبع چک لیست استفاده می شود.

مقالات مرتبط برتر