سبد خرید
0

محصولی در سبد خرید نیست.

بازگشت به فروشگاه

قواعد فرمول نویسی حرفه ای در اکسل | قسمت دوم

آدرس دهی
۴.۳/۵ - (۴۱ امتیاز)

چرا آدرس دهی بسیار مهم است؟

همانطور که قبلا گفتم فرمول نویسی حرفه ای اصول و قوانینی داره که یکی از مهم ترین موضوعات، بحث مطلق/نسبی (Absolute/Relative) بودن آدرس محدوده هاست. این موضوع وقتی مطرح میشه که بخوایم فرمولی که نوشتیم رو Drag کنیم. اگر به این مسئله تسلط عالی نداشته باشیم، هیچ وقت نمیتونیم به فرمولی که می نویسیم و درگ می کنیم اعتماد کنیم و مجبوریم تک تک نتایج رو بررسی کنیم که این کار در مقیاس های بزرگ بسیار وقتگیر خواهد بود. برای درک بهتر این موضوع (آدرس دهی) اول باید با نحوه ارجاع به یک سلول و یا فراخوانی یک سلول در اکسل آشنا بشیم که به دو روش صورت میگیره:

  • مدل A1
  • مدل R1C1 یا (Row1Column1~ ردیف۱ستون۱)

هر دوی این آدرس ها به سل A1 اشاره می کنند که پیش فرض اکسل، همون حالت اول یعنی A1 است. فقط یک نکته اینکه درصورتی که بخواهیم از حالت دوم استفاده کنیم، باید تیک گزینه R1C1 reference style در شکل ۱ را بزنیم تا سرستون های اکسل از A, B, C… به ۱,۲,۳… و در نتیجه نوع آدرس دهی از A1 به R1C1 تغییرکند.

تغییر نوع آدرس دهی دراکسل

شکل۱- آدرس دهی – تغییر نوع آدرس دهی دراکسل

حالا با حل یک مثال، بحث نسبی و مطلق بودن آدرس در فرمول نویسی رو شرح میدم:

محدوده ای از اعداد داریم که میخواهیم همه رو در یک سل به خصوص ضرب کنیم. طبق شکل ۱، در سل C2 می نویسیم A2*C1= و درگ می کنیم. مسئله ای که پیش میاد این هست که همه سل ها در حین درگ کردن، با هم حرکت میکنند (مطابق شکل ۱).

آدرس دهی- درگ کردن فرمول (نتیجه غلط)

شکل ۲- آدرس دهی درگ کردن فرمول (نتیجه غلط)

 در حالیکه ما میخواهیم سل C1 ثابت باشه و فقط سل های ستون A تغییر کنند. یعنی چیزی مطابق با شکل ۲٫

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

 فرمول مد نظر بعد از درگ کردن

شکل۳- آدرس دهی – فرمول مد نظر بعد از درگ کردن

درگ کردن در اکسل به دو صورت هست. در لحظه یا در ستون حرکت میکنیم (به سمت بالا و پایین) و یا در سطر(به سمت چپ و راست).

وقتی در ستون حرکت میکنیم (بالا یا پایین) فقط ردیف سل حرکت کننده تغییر می کند و وقتی در ردیف حرکت میکنیم (چپ یا راست) فقط ستون سل حرکت کننده تغییر میکند.

پس برای مطلق/نسبی کردن آدرس سل ها در فرمول ها:

  • اول باید ببینیم در کدام مسیر داریم حرکت میکنیم (سطر یا ستون) و چه چیزی در حال تغییر است (شماره ردیف یا نام ستون)؟
  • بعد تصمیم بگیریم که آیا میخواهیم تغییر کند یا ثابت بماند؟

وقتی میخواهیم سطر یا ستون رو فیکس کنیم، باید یک علامت $ پشت شماره ردیف یا نام ستون بذاریم. با این تفاسیر، چهار حالت برای آدرس دهی داریم:

 

سطر آزاد-ستون آزاد

A1

با درگ کردن در ستون، شماره ردیف تغییر میکند
با درگ کردن در ردیف، نام ستون تغییر میکند

سطر مطلق-ستون مطلق

$A$1

با درگ کردن در ستون، شماره ردیف تغییر نمیکند
با درگ کردن در ردیف، نام ستون تغییر نمیکند

سطر آزاد-ستون مطلق

$A1

با درگ کردن در ستون، شماره ردیف تغییر میکند
با درگ کردن در ردیف، نام ستون تغییر نمیکند

سطر مطلق-ستون آزاد

A$1

با درگ کردن در ستون، شماره ردیف تغییر نمیکند
با درگ کردن در ردیف، نام ستون تغییر میکند

حالا برگردیم به همان سوال اول. میخواهیم $ را برای فرمول A2*C1= تنظیم کنیم که با درگ کردن، بدرستی عمل کند. چون در ستون داریم حرکت میکنیم، پس فقط شماره ردیف تغییرمیکنه. حالاما باید تصمیم بگیریم کدوم شماره ردیف تغییر کنده و کدوم ثابت بمونه. چون میخواهیم سل C1 ثابت بمونه و در همه سل ها تکرار بشه (شکل۳)، پس مطابق شکل ۴، $ را پشت ۱ در C1 میگذاریم. اما میخواهیم A2 درسل های بعدی به A3 و A4 و… تغییر کند.پس $ نیازی ندارد.

درگ کردن فرمول (نتیجه درست)

شکل ۴- آدرس دهی – درگ کردن فرمول (نتیجه درست)

نکته:
علامت $ را هم میتونیم مستقیما تایپ کنیم. هم اینکه از کلید F4 استفاد کنیم. وقتی روی آدرس مورد نظر قرار بگیریم، با هر بار F4 زدن، یکی از ۴ حالت آدرس دهی ظاهر میشه.

 

مثال دوم:

میخواهیم یک جدول ضرب ایجاد کنیم. فرمول خیلی ساده هست، A2*B1=. حالا باید طوری آدرس دهی کنیم که با انتقال آن به کل جدول، محاسبات به درستی انجام شود. به شکل ۵ دقت کنید. علامت $ پشت نام A و ردیف ۱ قرار گرفته. چرا؟

 آدرس دهی در جدول ضرب

شکل ۵- آدرس دهی در جدول ضرب

A2*B1= رو در نظر بگیرید. وقتی در ستون حرکت میکنیم، همواره میخواهیم اعداد موجود در ردیف ۱ در بقیه اعداد که در ستون A هستن، ضرب بشن. پس ردیف ۱ را فیکس میکنیم. وقتی هم که در ردیف حرکت میکنیم، میخواهیم عدد موجود در ستون A در بقیه اعداد ردیف ۱ ضرب بشن. پس $ ها رو به این صورت اعمال میکنیم A2*B$۱ا$=. بعبارت کلی، هر جای این جدول ضرب هستیم، میخواهیم عددی در ردیف۱ ضرب در عددی در ستون A بشه. پس ردیف ۱ و ستون A در فرمول باید فیکس بشه.

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

مشاهده ویدئو آدرس دهی در اکسل

در این ویدئو نحوه استفاده صحیح از $ جهت ایجاد فرمول های درست آموزش داده شده:

[jwp-video n=”1″]

کلیدواژه : مقدماتی
آواتار
145

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

دیدگاه کاربران
  • میلاد م ۲۸ دی ۱۳۹۸ / ۱۱:۲۲ ق٫ظ

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

    • سامان چراغی ۲۸ دی ۱۳۹۸ / ۱۲:۲۱ ب٫ظ

      سلام
      میتویند روی سلول هایی که میخواید Data Validation بزنید و حالت Text Length رو Less Than تعیین کنید و عدد رو صفر بذارید. همچنین در تب Error Alert حالت Style رو روی Warning بذارید.

  • میلاد م ۲۴ دی ۱۳۹۸ / ۲:۰۰ ب٫ظ

    با سلام
    میبخشید زیاد سوال پرسیدم
    یک سوال خیلی مهم دیگه هم داشتم ممنون میشم راهنمایی منید

    یک فایل اکسل دارم که دو تا شیت داره و برای اینکه بتوانم بعضی داده های داخل سیت دو را در شیت یک ببینم ادرس دهی کردم به صورت زیر :
    =Sheet2!D5
    تا اینجا مشکلی ندارم و داده شیت دو در شیت یک نمایش داده میشه
    حال وقتی این فرمول را به سطرهای زیر گسترش میدهم اکسل می اید یکی یکی به سطرهای ان اضافه میکنه به صورت زیر:
    =Sheet2!D6
    =Sheet2!D7
    =Sheet2!D8

    ولی من در اصل میخوام مثلا شش تا شش تا اضافه کنه یعنی میخواهم :
    در ردیف اول شیت یک مقدار =Sheet2!D5 را نمایش بدهد
    در ردیف دوم شیت یک مقدار =Sheet2!D11 رانمایش بدهد
    در ردیف سوم شیت یک مقدار =Sheet2!D17 رانمایش بدهد

    و از اونجایی که تعداد سطرها خیلی زیاد هست امکان دونه دونه وارد کردن ندارم و میخواهم اگر حالتی هست که میشه تعریف کنیم که وقتی فرمول
    =Sheet2!D5
    را به سطر پایین میکشیم خود اکسل ۶ تا ۶ تا اضافه کند
    ممنون

    • سامان چراغی ۲۷ دی ۱۳۹۸ / ۸:۳۵ ب٫ظ

      سلام
      از فرمول زیر استفاده کنید:

      =INDIRECT("Sheet2!A"&((ROW(A1)-1)*6+5))
      
  • محمد کوهنورد ۲۴ دی ۱۳۹۸ / ۱۱:۱۰ ق٫ظ

    با سلام میخواستم یه فرمول بنویسم مثلا شیت ۱یه سلولی توش عدد هست و اون عدد رو توی شیت ۲ نشون بدم و اگر هم سلول پایینش توی شیت ۱ عدد هست توی شیت ۲ نشون بده اگه نیست خالی بذاره ممنون میشم راهنمایی کنید

    • سامان چراغی ۱۱ اسفند ۱۳۹۸ / ۷:۳۷ ب٫ظ

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

  • علی ظفری ۱۷ دی ۱۳۹۸ / ۹:۲۷ ق٫ظ

    سلام
    یک جدول در خواست از قبل اماده کردیم ( دارای فرمول در سلولها است)۲۰ سطر دارد در درخواست بعد ۱۰ مورد احتیاج داریم می خواهیم بقیه سطرها عدد صفر ظاهر نشود چکار باید کرد؟

    • آواتار
      حسنا خاکزاد ۱۷ دی ۱۳۹۸ / ۶:۵۵ ب٫ظ

      درود بر شما
      برای عدم نمایش صفر، کئ زیر رو در فرمت سل بزنید:
      ۰;-۰;;@

  • علی ۱۴ دی ۱۳۹۸ / ۵:۴۴ ب٫ظ

    سلام – من در قسمت ماشین الات یک شرکت کار میکنم و میخوام برای هر دستگاه مثلا ده تا کامیون دارم میخوام برای هر کدام یک شیت داشته باشم و یک شیت هم کلی گزارش رو بنویسم و خودکار برن توی شیت مخصوص با توجه به کد دستگاه مثلا ۵ لیتر روغن برای کامیون ۱ و ۲۰ لیتر روغن برا کامیون ۲ و به همین صورت روزهارو نوی یک شیت ادامه بدم ولی اطلاعات خودکار برن توی شیت دستگاه هام . ممنون از جوابتون اگر به ایمیل بفرستید جوبرو ممنون میشم

    • آواتار
      حسنا خاکزاد ۱۴ دی ۱۳۹۸ / ۷:۰۸ ب٫ظ

      درود بر شما
      بهتره که یک دیتابیس جامع داشته باشید و از روی اون هر گزارشی برای هر کامیون میخواید ایجاد کنید
      حالا این گزارش میتونه با فرمول نویسی باشه میتونه با pivottable باشه

  • فاطمه ۱۳ دی ۱۳۹۸ / ۳:۱۶ ب٫ظ

    با سلام بسیار ممنون از مطالب مفید و کاربردی شما؛
    من یک سوال داشتم، یک فرم داریم که در آن از کامبوباکس استفاده کردیم چطور می توانیم آن را در فرم فیکس کنیم که با هر موس حرکت نکند
    با تشکر

    • آواتار
      حسنا خاکزاد ۲۹ دی ۱۳۹۸ / ۸:۳۶ ب٫ظ

      درود بر شما
      از قسمت Properties گزینه dont move or size with cell رو بزنید

  • امین الله قهرمانی ۷ دی ۱۳۹۸ / ۹:۴۵ ب٫ظ

    با سلام و تشکر از مطالب مفید شما
    من یک ستون اکسل دارم که در اون ستون سلول های خالی و سلول های دارای عدد هست برخی اعداد تکی هستند و برخی پیوسته ۲تایی و ۳تایی و ۴ تایی و …. حالا میخوام از اول تا آخر ستون به سلولهای دارای عدد که تکی و پیوسته هستند در ستون دوم یک کد ترتیبی داده بشه به طوری عدد تکی اول مثلا کد ۱ و دو عدد پیوسته بعدی کد ۲ و و یا سه عدد پیوسته بعدی کد ۳ به همین ترتیب تا آخر به ترتیب کد گذاری بشن
    ممنون میشم راهنمایی بفرمایید

    • آواتار
      حسنا خاکزاد ۸ دی ۱۳۹۸ / ۱۲:۴۰ ب٫ظ

      درود بر شما
      متوجه سوال نشدم
      مثال در قالب یک ستون بزنید و توضیح بدید هدف چی هست

      • امین الله قهرمانی ۸ دی ۱۳۹۸ / ۱۰:۲۴ ب٫ظ

        هزاران سلام و سعادت بر شما
        من قصد دارم در یک ستون دیتا ردیف های دارای اعداد تکی یا چندتایی پیوسته و جاهای خالی پس از آنها تا رقم بعدی کد گذاری یکسان شوند
        مثال واضح :
        ستون دیتای اصلی ستون کد دهی
        ۰.۱ ۱
        ۰.۵ ۱
        خالی ۱
        خالی ۱
        ۰.۷ ۲
        ۰.۹ ۲
        ۰.۱ ۲
        خالی ۲
        خالی ۲
        ۰.۴ ۳
        خالی ۳
        خالی ۳

        • سامان چراغی ۹ دی ۱۳۹۸ / ۸:۰۶ ب٫ظ

          سلام
          از فرمول زیر استفاده کنید:

          =IF(AND(A1="",A2 <>""),MAX($B$1:B1)+1,B1)
          

          مفروضات:
          ۱- اعداد شما در ستون A نوشته شده باشند.
          ۲- اطلاعات شما از سلول A2 شروع شده باشند.
          ۳- سلول A1 باید خالی باشد.
          ۴- این فرمول در سلول B2 نوشته شود.

          • امین الله قهرمانی ۱۱ دی ۱۳۹۸ / ۱۱:۲۰ ب٫ظ

            سپاسگزارم ممنون

  • امیر ۷ دی ۱۳۹۸ / ۱:۳۶ ب٫ظ

    سلام
    یه ستون دارم که میخوام متراژ رو از صفر تا ۱۰۰۰ وارد کنم و هر ستون نسبت به ستون قبلی ده متر بیشتر باشه یعنی به این صورت باشه
    ۰
    ۱۰
    ۲۰
    ۳۰
    ۴۰
    چه طور این کار رو کنم که با کپی کردن هر سلول به صورت خودکار خودش اعداد رو وارد کنه؟

    • آواتار
      حسنا خاکزاد ۷ دی ۱۳۹۸ / ۴:۲۸ ب٫ظ

      درود بر شما
      فرمول بنویسید که اگر سلول مرتبط پر بود، قبلی رو + ۱۰ کنه

      پر بودن رو هم در if با <>“” میتونید نشون بدید

  • علی حیان ۶ دی ۱۳۹۸ / ۸:۰۸ ب٫ظ

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

    • آواتار
      حسنا خاکزاد ۷ دی ۱۳۹۸ / ۱۱:۳۲ ق٫ظ

      درود بر شما
      طبق توضیاحات شما، مبلغ قابل پرداخت و کل دریافتی با هم مساوی هستن!
      چه در دو قسط باشه (جمع دو قسط برابر است با کل مبلغ قابل پرداخت)
      چه قسطی نباشه که میشه کل مبلغ پرداخت
      پس یعنی ستون چهارم در هر صورت با مبلغ قابل پرداخت برابر است

      احتمالا یک فرضیه ای دارید که توضیح ندادید

  • علی ۲۵ آذر ۱۳۹۸ / ۱۲:۲۴ ب٫ظ

    با سلام و تشکر از سایت خوبتون
    یک سوال داشتم. من در یک ستون عدد ۱۳۸۵ و در ستون همجوار آن عدد ۱۳۹۰ را دارم. با چه دستوری میشه به صورت اتوماتیک این محدوده سنواتی را در ۶ ستون مجزا از ۱۳۸۵ تا ۱۳۹۰ درج کرد؟ با تشکر

    • آواتار
      حسنا خاکزاد ۲۵ آذر ۱۳۹۸ / ۱:۴۹ ب٫ظ

      درود بر شما
      از ۱۳۸۵ شروع کنید و + ۱ کنید و با if ترکیب کنید که اگر از ۱۳۹۰ بیشتر شد خالی بذاره

ارسال دیدگاه

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

توسط
تومان