یکی از قابلیت‌های مفید Excel مجموعه‌ی آفیس مایکروسافت، فرمت کردن سلول‌ها با توجه به مقدار درونشان است. منظور از فرمت، مواردی مثل رنگ سلول است و این یعنی می‌توانید از قابلیت Conditional Formatting اکسل استفاده کنید و سلول‌هایی که مقدارشان بین دو عدد خاص است را با رنگ خاص، مشخص کنید.

اگر از یک اسکریپت ساده‌ی ویژوآل بیسیک در اکسل استفاده کنید، می‌توانید سلول‌هایی که رنگ خاصی دارند را قفل کنید! چه انتخاب رنگ سلول به صورت دستی صورت گرفته باشد و چه از فرمت کردن شرطی یا Conditional Formatting استفاده شده باشد، در هر دو صورت می‌توانید به کمک VBA سلول‌ها را قفل کنید.

در ادامه به نحوه قفل کردن سلول‌های اکسل که رنگ خاصی دارند را بررسی می‌کنیم. با سیاره‌ی آی‌تی همراه شوید.

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

فعال‌سازی تب Developer در اکسل و نوشتن تابع با VBA

برای نوشتن اسکریپت، ابتدا باید تب به اسم Developer را فعال کنید که در حالت پیش‌فرض فعال نیست. برای این مهم ابتدا روی منوهای بالای صفحه راست‌کلیک کنید و گزینه‌ی Customize the Ribbon را انتخاب کنید.

تیک گزینه‌ی Developer را بزنید که در حالت عادی غیرفعال و مخفی است و سپس روی OK کلیک کنید.

اکنون در بالای صفحه، تب جدیدی به اسم دولوپر به معنی توسعه‌دهنده و برنامه‌نویس اضافه شده است. اکنون روی این تب جدید کلیک کنید و روی اولین گزینه‌ی آن که Visual Basic است، کلیک کنید. 

در پنجره‌ای که نمایان شده و در ستون سمت چپ، روی This Worksheet دبل‌کلیک کنید تا پنجره‌ی اضافه کردن اسکریپت مربوط به ورک‌شیت فعلی باز شود.

در این بخش کد زیر را پیست کنید که سلول‌هایی به رنگ زرد خالص و اشباع را قفل می‌کند:

Sub Lock_by_Color()

Dim colorIndex As Integer

Dim Range As Range

colorIndex = FFFF00

For Each Range In ActiveSheet.UsedRange.Cells

Dim color As Long

color = Range.Interior.colorIndex

If (color = colorIndex) Then

Range.Locked = True

Else

Range.Locked = False

End If

ActiveSheet.Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True _ , AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True ActiveSheet.EnableSelection = xlNoRestrictions End Sub

در نوار ابزار بالای پنجره روی دکمه‌ی Run کلیک کنید که البته شورت‌کات آن F5‌ است. در نهایت پنجره‌ی ویژوآل بیسیک را ببندید و فایل اکسل را با پسوند xlsm یا حالت Excel Macro-Enabled Workbook ذخیره کنید.

چگونه در اکسل سلول‌هایی با رنگ‌های دیگر را قفل کنیم؟

همان‌طور که اشاره کردیم کد فوق برای قفل کردن سلول‌هایی که رنگ زرد اشباع و کاملاً خالص دارند را قفل می‌کند. برای سایر رنگ‌ها ابتدا باید کد مربوط به رنگ موردبحث را پیدا کنید چرا که VBA رنگ‌ها را به صورت اسم یا به صورت غلظت سه رنگ اصلی یعنی قرمز و سبز و آبی نمی‌شناسد بلکه هر رنگ با یک کد شناخته می‌شود. به عنوان مثال رنگ زرد خالص، کد #FFFF00‌ دارد که در مورد معنی آن توضیح می‌دهیم. کافی است کد این رنگ را بدون # در خط ۴ اسکریپت فوق قرار دهید.

اگر اهل محاسبه نیستید و می‌خواهید سریعاً کد رنگ‌ها را دریافت کنید، می‌توانید از وب‌سایت‌هایی مثل HTMLColorCode استفاده کنید و رنگ را انتخاب کرده و کد آن را ببینید. به علاوه مقدار R و G‌ و B که در ادامه برای رنگ‌آمیزی سلول‌های اکسل لازم است هم ارایه می‌شود:

در ادامه می‌توانید رنگ سلول‌ها را به صورت دستی و Custom انتخاب کنید:

ابتدا روی سلول رنگی که رنگ موردنظر شما را دارد راست کلیک کرده و گزینه‌ی Format Cell را انتخاب کنید. سپس روی تب Fill کلیک کنید. در این تب نیز روی More Colors کلیک کنید. در پنجره‌ی انتخاب رنگ‌های بیشتر، تب دوم یا Custom را انتخاب کنید.

اکنون سه عدد R و G و B‌ را در سه فیلد Red و Green و Blue تایپ کنید و سپس روی OK کلیک کنید و در پنجره‌ی Format Cells‌ نیز روی OK کلیک کنید تا رنگ جدید و خاصی که انتخاب کرده‌اید برای پس‌زمینه‌ی سلول، تنظیم شود.

آشنایی با کد رنگ‌ها در مبنای شانزده یا HEX و نحوه محاسبه و تبدیل RGB‌ به HEX

کد رنگ‌ها مشخص می‌کند که مقدار سه نور با رنگ‌های اصلی یعنی Red یا قرمز، Green یا سبز و Blue‌ یا آبی چقدر است. به این شیوه‌ی بیان رنگ‌ها، RGB گفته می‌شود. به عنوان مثال رنگ زرد که ترکیب نور سبز و قرمز است، به این صورت خواهد بود:

rgb(255,255,0)

در واقع هر رنگ عددی از ۰ الی ۲۵۵ واحد دارد که با ویرگول از عدد بعدی جدا می‌شود. ساده و روشن.

اما روش دیگر این است که سه عدد در مبنای شانزده را پشت‌سر‌هم قرار دهیم. در واقع هر رنگ که عددی بین ۰ و ۲۵۵ است و اگر آن را در مبنای ۱۶ یا HEX بیان کنیم، عددی بین 00 الی FF‌ می‌شود. دقت کنید که اعداد ۱۰ و ۱۱ و ۱۲ و … و ۱۵ در مبنای ۱۶، با حرف A و B و C‌ و … و F نشان داده می‌شود. بنابراین FF‌ عددی با یکان ۱۵ و شانزده‌گان ۱۵ است و مقدار آن به صورت زیر محاسبه می‌شود:

FF = F×16 + F×1 = 15×16 + 15×1 = 240 + 15 = 255

به همین ترتیب عدد معادل EB را محاسبه می‌کنیم:

EB = E×16 + B×1 = 14×16 + 11×1 = 224 + 11 = 235

در نهایت غلظت سه نور قرمز و سبز و آبی را که سه عدد است، پشت سر هم قرار می‌دهیم تا کد رنگ ساخته شود. به چند مثال توجه کنید تا موضوع روشن شود:

رنگ قرمز خالص که عدد اول ۲۵۵ و دو عدد بعدی که سبز و آبی است، ۰ است:

Red = FF

Green = 00

Blue = 00

بنابراین کد رنگ قرمز سیر یا کاملاً اشباع، #FF0000 خواهد بود. به همین ترتیب رنگ سبز و آبی کاملاً اشباع نیز با کد #00FF00 و #0000FF معرفی می‌شوند.

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

Red = FF

Green = FF

Blue = 00

و لذا کد آن #FFFF00 است.

و اما در مورد سایر اعداد، ابتدا روی سلول رنگی که رنگ موردنظر شما را دارد راست کلیک کرده و گزینه‌ی Format Cell را انتخاب کنید. سپس روی تب Fill کلیک کنید. در این تب نیز روی More Colors کلیک کنید. در پنجره‌ی انتخاب رنگ‌های بیشتر، تب دوم یا Custom را انتخاب کنید.

اکنون می‌توانید رنگ دلخواه را از پالت رنگ‌ها انتخاب کنید و مقدار رنگ قرمز و سبز و آبی آن را بخوانید:

برای تبدیل هر عدد به عددی در مبنای ۱۶، ابتدا عدد را بر ۱۶ تقسیم کنید، خارج قسمت معادل شانزده‌گان خواهد بود و باقی‌مانده معادل یکان! به عنوان مثال عدد ۲۳۵ را در نظر بگیرید که اگر بر ۱۶ تقسیم شود، حاصل 14.6875 خواهد بود و به عبارت دیگر خارج قسمت ۱۴ است. باقی‌مانده نیز ۱۱ است. ۱۴ در مبنای ۱۶ همان E است و ۱۱ نیز B است.

235/16 = 14 + 11/16

بنابراین ۲۳۵ معادل EB است.

به این ترتیب بدون استفاده از سایت یا نرم‌افزار تبدیل کد رنگ‌ها به RGB یا حالت برعکس، تبدیل RGB‌ به HEX، می‌توانید رنگ‌ها را تبدیل کنید.