استیو می خواهد یک دستور IF (با استفاده از تابع کاربرگ) بر اساس رنگ یک سلول ایجاد کند. به عنوان مثال، اگر A1 دارای یک پر سبز است، می خواهد کلمه "go" را برگرداند، اگر دارای یک پر قرمز باشد، می خواهد کلمه "stop" را برگرداند، و اگر رنگ دیگری است، کلمه "neher" را برگرداند. . استیو ترجیح می دهد از ماکرو برای این کار استفاده نکند.
متأسفانه، هیچ راهی برای انجام قابل قبول این کار بدون استفاده از ماکروها، به هر شکل، وجود ندارد. نزدیکترین راه حل غیر ماکرو ایجاد نامی است که رنگ ها را تعیین می کند، به این ترتیب:
=IF(GET.CELL(38,Sheet1!A1)=10,"GO",IF(GET.CELL(38,Sheet1!A1)
=3,"Stop","Neither"))
- سلول A1 را انتخاب کنید.
- روی Insert | کلیک کنید نام | تعريف كردن. اکسل کادر محاوره ای Define Name را نمایش می دهد.
- از نامی مانند "mycolor" (بدون علامت نقل قول) استفاده کنید.
- در کادر Refers To عبارت زیر را به صورت یک خط وارد کنید:
- روی OK کلیک کنید.
با این نام تعریف شده، می توانید در هر سلولی، موارد زیر را وارد کنید:
=mycolor
نتیجه این است که متنی را بر اساس رنگ سلولی که این فرمول را در آن قرار می دهید مشاهده خواهید کرد. البته اشکالی که در این روش وجود دارد این است که به شما اجازه نمی دهد به سلول های دیگری به غیر از آن چیزی که فرمول در آن قرار داده شده است مراجعه کنید.
پس راه حل استفاده از یک تابع تعریف شده توسط کاربر است که (طبق تعریف) یک ماکرو است. ماکرو می تواند رنگی را که یک سلول با آن پر شده است بررسی کند و سپس مقداری را برگرداند. به عنوان مثال، مثال زیر یکی از سه کلمه را بر اساس رنگ در یک سلول هدف برمی گرداند:
Function CheckColor1(range)
If range.Interior.Color = RGB(256, 0, 0) Then
CheckColor1 = "Stop"
ElseIf range.Interior.Color = RGB(0, 256, 0) Then
CheckColor1 = "Go"
Else
CheckColor1 = "Neither"
End If
End Function
این ماکرو مقادیر RGB رنگهای یک سلول را ارزیابی میکند و یک رشته را بر اساس آن مقادیر برمیگرداند. شما می توانید تابع را در یک سلول به این صورت استفاده کنید:
=CheckColor1(B5)
اگر ترجیح می دهید رنگ های شاخص را به جای رنگ های RGB بررسی کنید، تغییرات زیر کار می کند:
Function CheckColor2(range)
If range.Interior.ColorIndex = 3 Then
CheckColor2 = "Stop"
ElseIf range.Interior.ColorIndex = 4 Then
CheckColor2 = "Go"
Else
CheckColor2 = "Neither"
End If
End Function
چه از رویکرد RGB و چه از رویکرد شاخص رنگ استفاده کنید، باید بررسی کنید که مقادیر استفاده شده در ماکروها، مقادیر واقعی استفاده شده برای رنگهای سلولهای مورد آزمایش را منعکس میکنند. به عبارت دیگر، اکسل به شما این امکان را می دهد که از سایه های مختلف سبز و قرمز استفاده کنید، بنابراین باید مطمئن شوید که مقادیر RGB و مقادیر شاخص رنگ استفاده شده در ماکروها با مقادیر استفاده شده توسط سایه های رنگی در سلول های شما مطابقت دارند.
یکی از راه هایی که می توانید این کار را انجام دهید این است که از یک ماکرو بسیار ساده استفاده کنید که کاری جز برگرداندن مقدار شاخص رنگ انجام نمی دهد:
Function GetFillColor(Rng As Range) As Long
GetFillColor = Rng.Interior.ColorIndex
End Function
اکنون در کاربرگ خود می توانید از موارد زیر استفاده کنید:
=GetFillColor(B5)
نتیجه این است که مقدار شاخص رنگ سلول B5 نمایش داده می شود. با فرض اینکه سلول B5 با استفاده از یکی از رنگ های مورد انتظار شما (قرمز یا سبز) فرمت شده است، می توانید مقدار شاخص را به ماکروهای قبلی وصل کنید تا به نتایج دلخواه برسید. با این حال، می توانید به سادگی از آن مرحله بگذرید و به مقدار بازگشتی توسط GetFillColor برای جمع آوری فرمول IF به این روش تکیه کنید:
=IF(GetFillColor(B5)=4,"Go", IF(GetFillColor(B5)=3,"Stop", "Neither"))
باید به خاطر داشته باشید که این توابع (چه به مقادیر رنگ RGB و چه به مقادیر شاخص رنگ نگاه کنید) قالب بندی صریح یک سلول را بررسی می کند. آنها هیچ گونه قالب بندی ضمنی را در نظر نمی گیرند، مانند قالب بندی مشروط.
برای برخی ایدهها، فرمولها و عملکردهای خوب دیگر در مورد کار با رنگها، به این صفحه در وبسایت چیپ پیرسون مراجعه کنید:
http://www.cpearson.com/excel/colors.aspx