PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشي: Volatile Function



~M*E*H*D*I~
2014/08/11, 17:17
http://exceliran.com/up/up/4b61f65c00103c6ee8bee403327da6e9.png (http://www.exceliran.com)


توابع فرار (Volatile Function)
توابع فرار توابعی هستند که با هربار تجدید محاسبه فایل این توابع مجددا محاسبه می شود درواقع این محاسبه ارتباطی به تغییر داده ها و یا تغییر فرمول ندارد، لذا می بایست تا حد امکان از بکارگیری این توابع خود داری نمایید. کاربرد بیش از حد این توابع به طور محسوسی در هر بار تجدید محاسبه سرعت فایل را کاهش داده و منجر به هنگ شدن فایل می گردد.
توابع زیر که به صورت واضح جزو توابع فرار محسوب می گردند:

RAND(), NOW(), TODAY()
برخلاف تصور توابع زیر نیز جزو این توابع محسوب می گردد:

OFFSET(), CELL(), INDIRECT(), INFO()

برخی توابع در برخی ورژن ها فرار محسوب می شوند به عنوان مثال تابع INDEX() در اکسل 97 فرار محسوب نمی گردد.
دسته ای از توابع توسط مایکروسافت به عنوان توابع فرار معرفی شده اند که در صورت تست کردن به عنوان تابع فرار شناسایی نمی شوند:


INDEX(), ROWS(), COLUMNS(), AREAS()
و تابعی مانند
CELL("Filename") همانند توابع فرار محسوب می گردد با اینکه مایکروسافت آنرا فرار نمی داند.
برخی توابع براساس نوع استفاده می توانند فرار باشند از ورژن 2002 به بعد تابع sumif چنین حالتی دارد ، این تابع زمانی که محدوده آرگومان اول برابر با محدوده آرگومان سوم نباشد یک تابع فرار است به عنوان مثال
=SUMIF(A1:A4,">0",B1) فرار محسوب می گردد اما
=SUMIF(A1:A4,">0",B1:B4) فرار نیست.
در صورت استفاده از یک تابع فرار در یک فرمول تابع حاصل فرار محسوب می شود حتی اگر تابع استفاده شده در مجموعه فرمول مورد محاسبه واقع نشود.
به عنوان مثال فرمول
=IF(1<2,99,NOW()) همواره 99 را بازمیگرداند و تابع
NOW() مورد محاسبه واقع نمی شود با این حال یک تابع فرار محسوب می شود.
حالت دیگری نیز وجود دارد که فرض کنید در سلول A1 تابع
Now() را بنویسید و از فرمول
=IF(1<2,99,A1) استفاده کنید در این صورت این تابع خاصیت توابع فرار را نخواهد داشت.

~M*E*H*D*I~
2014/08/12, 11:39
وابستگی به توابع فرار
وابستگی مستقیم: وابستگی مستقیم به یک تابع فرار منجر به تجدید محاسبه می گردد، به عنوان مثال اگر در سلول A1 تابع Now() نوشته شود و A2=A1 و A3=A2 و به همین ترتیب ، همگی جزء توابع فرار محسوب می شوند.
وابستگی غیر مستقیم : وابستگی غیرمستقیم به یک تابع فرار همواره منجر به تجدید محاسبه نمی شود.فرض کنید در سلول A1 تابع Now() نوشته شده و در سلول های A2 تا A5 اعداد 2 تا 5 نوشته شود
تابع
=INDEX(A1:A5,1,1) به طور مستقیم به سلول A1 وابسته است و فرمول فرار محسوب می شود
تابع
=INDEX(A1:A5,3,1) به طور غیرمستقیم به A1 وابسته است اما فرار محسوب نمی گردد.
فرمت های شرطی
استفاده از فرمت های شرطی (conditional formatting) منجر به فرار شدن فرمول های مورد استفاده می گردد دلیل آن نیز واضح است چرا که فرمول های استفاده شده در فرمت های شرطی برای اعمال شروط بایستی مکررا محاسبه گردند.
اقداماتی که منجر به تجدید محاسبه میگردد


استفاده از اتوفیلتر منجر به تجدید محاسبه فرمول های بکار رفته در سلول ها میگردد
دابل کلیک بر روی جدا کننده سطرها و ستون ها منجر به تجدید محاسبه می گردد در حالی که تغییر اندازه ستون ها و ردیف ها به صورت دستی منجر به تجدید محاسبه نمی گردد.
حذف و اضاف کردن ردیف ها ستون ها جابجایی سلول ها منجر به تجدید محاسبه می گردد
اضافه کردن یا حذف کردن اسامی تعریف شده از طریق Name manager منجر به تجدید محاسبه می گردد
تغییر نام یا تغییر مکان شیت منجر به تجدید محاسبه می شود.
حذف کردن یک شیت منجر به تجدید محاسبه می شود اما اضافه کردن شیت جدید چنین خاصیتی ندارد
مخفی و غیر مخفی کردن ردیف ها و ستون ها در اکسل 2003 منجر به تجدید محاسبه می گردد
باز کردن فایل های CSV به هر طریقی منجر به تجدید محاسبه در کلیه ورک بوک های فعال شده حتی اگر محاسبات را به صورت دستی تنظیم کرده باشید ، این تجدید محاسبه به هیچ عنوان متوقف نمی شود مگر اینکه در با استفاده ازVBA خصوصیت EnableCalculation را به false تغییر دهید.
هربار تکرار در Golseek نیز منجر به تجدید محاسبه می گردد.

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