سبد خرید
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 لیسانس بودم، به توصیه استاد مشاورم شروع به خوندن اکسل بصورت حرفه ای کردم و همچنان در حال مطالعه و یادگیری و البته آموزش به بقیه هستم.

دیدگاه کاربران
  • امین ۱۵ آبان ۱۳۹۷ / ۴:۱۴ ب٫ظ

    سلام . میشه یه راهنمایی کنید بگید چطور میشه روبروی یه ستون با اعداد مختلف اعداد ثابت قرار داد . یعنی اگر تو ستون دوم ۱۰ تاعدد ۳۲۰ هست جلوش ۱۰تا ۱ بندازه . عدد که عوض میشه این شمارشگر هم تغییر کنه.با عدد بعدی بشه ۲ ، بعدی ۳ و الی آخر

    • سامان چراغی ۱۶ آبان ۱۳۹۷ / ۱۲:۱۱ ب٫ظ

      سلام
      از تابع Countif استفاده کنید.

      =COUNTIF($A$1:A1,A1) 
      
  • امین ۱۵ آبان ۱۳۹۷ / ۲:۵۵ ب٫ظ

    سلام مجدد . ممنون از پاسخ قبلیتون . میشه یه راهنمایی در مورد همون موضوع قبل به من بدید . من حالا اگه بخوام جلوی همه اعداد شبیه هم مثل ۴۵۱ عدد ۱ بیفته بعد عدد که تغییر کرد بشه عدد ۲ و همینطور تا آخر باید چی کار کنم؟

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

      درود
      سوال واضح نیس
      یعنی چی تغییر کنه بشه ۲ و …
      میتونید سوالتون رو در گروه مطرح کنید و فایل نمونه بذارید

      • امین ۱۵ آبان ۱۳۹۷ / ۴:۴۵ ب٫ظ

        منظورم اینه که اگر در ستون اول ۱۰بار عدد ۴۵۰ ثبت شده بود ۱۰مرتبه عدد ۱ رو بندازه . بعد به عنوان مثال اگر عدد بعدی ۲۰۰ بود و ۵بار تکرار شده بود ۵تا عدد ۲ بندازه و الی آخر

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

          با فرض اینکه در ستون B اده ها تایپ شده باشه. این فرمول رو در سلول A2 بنویسید و درگ کنید. (A1رو هم مساوی ۱ بذارید)

          =if(B2=B1,A1,max($A$1:A1)+1)
          
  • امین ۱۵ آبان ۱۳۹۷ / ۱۱:۲۰ ق٫ظ

    سلام . میشه به من کمک کنید چطوری برای اعداد ثابت در یک ستون میتونم شماره ردیف بندازم؟یعنی اگر در یک ستون ۱۵ بار عدد ۴۵۶ تایپ شده در ستون بغل اعداد ۱ تا ۱۵ رو بندازه بعد به تعداد اعداد دیگر تعداد ردیف های متناظر با اعداد رو تایپ کنه.ممنون

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

      اگر شماره ردیف میخواید بزنید. این مقاله رو بخونید:
      https://excelpedia.net/excel-auto-number/

      اما اگر میخواید تعداد هر داده رو کنارش بزنه، از countif باید استفاده کنید با محدوده متحرک ( countif($A$1:A1,A1

  • مهدی ۱۴ آبان ۱۳۹۷ / ۱:۵۳ ب٫ظ

    با سلام
    میخوام سلول های خاص مثلا سلولهای با مقادیر صفر رو خذف کنم و سلول زیرین shift up به بالا داشته باشه چطور میشه فرمولش رو نوشت و درگ کرد

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

      درود بر شما
      چند روش وجود داره:
      هم میتونید با ابزار filter داده های مورد نظر رو پیدا کنید (از شرط OR استفاده کنید در Custom filter) و بعد انتخاب کرده و حذف کنید.

      هم میتونید با ابزار find داده های مورد نظر رو پیدا کنید و بعد با زدن Ctrl+A همه سلول های پیدا شده رو پیدا کرده و delete بزنید

      راه حل فرمولی هم یک if بنویسید، که اگر صفر و یک بود مثلا بزنه OK. بعد فیلتر کنید و انتخاب کنید و حذف کنید.

  • حامد فیضی ۱ آبان ۱۳۹۷ / ۴:۲۵ ب٫ظ

    با سلام و خسته نباشید من تو بین اعداد یک ستون می خوام یک عدد مشخص رو پیدا کنم, که تو کدوم ردیف هست, بعد ۳ ردیف بعداز ردیف مشخص شده از ردیف های ستون کناری که اعداد دیگه ای داره با هم جمع کنه.
    مثال در واقع میخوام ستون b12 که ستون b رو تو فرمول بدم تا با مشخص کردن ردیف با استفاده از match بدست میاد که مثلا ۱۲ باشه تو سلولی که فرمول نوشتم اسم سلول b12 بیاره.

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

      درود بر شما
      با استفاده از ترکیب address و indirect میتونید انجام بدید

      =indirect(address(match(....)+3,2))

      با استفاده از match مکان رو پیدا میکنید و عدد ۲ داره نشون میده که ستون ۲ یا B هست.

  • منیره ۳۰ مهر ۱۳۹۷ / ۱:۰۴ ب٫ظ

    سلام
    چجوری میتونم یه فرمولی بنویسم که در همه شیت ها کپی بشه

    • آواتار
      حسنا خاکزاد ۳۰ مهر ۱۳۹۷ / ۱:۵۹ ب٫ظ

      درود بر شما
      اول شیت ها رو انتخاب کنید بعد شروع کنید به نوشتن فرمول

  • shima ۱۶ مهر ۱۳۹۷ / ۱۱:۱۸ ق٫ظ

    سلام
    وقتتون بخیر
    خوشحالم که یک نفر تجربیات و علمش رو به بقیه به اشتراک میزاره .
    من یک مشکل دارم : فرض کنید دو تا شیت داریم که در شیت دوم فرمول خوانده شدن اعداد ستون C شیف اول را تایپ کرده ایم حالا با insert کردن یک ستون به جای ستون C در شیت اول (در واقع اعداد به ستون D منتقل می شود) فرمول شیت دوم که قرار بود از ستون c شیت اول بخواند تغییر کرده و از ستون D می خواند .
    چکار کنیم که باز همان اعداد ستون c شیت اول را بخواند نه ستون D .?
    سپاس

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

      درود بر شما
      باید $ رو از ابتدا درست بذارید تا اینجور مواقع مطابق با خواسته شما عمل کنند

  • علی اکبر ۱۱ مهر ۱۳۹۷ / ۱:۳۳ ب٫ظ

    سلام،و تشکر از آموزش های مفیدتون ،
    در یک شیت دیتای ورودی دارم و در شیت بعدی محاسباتی مربوط به شیت اول، مشکل من در اینجاست که من به ناچار مجبورم در شیت دیتای خودم یک سری سلول جدید insert کنم و داده هایی در اون بنویسم ولی در محاسبات شیت بعدی این ردیف های جدید که اضافه شدند را لحاظ نمی کند و شماره ردیف بعدی را لحاظ می کند ، یعنی فرمول من به طور اتومات به سلول قبلی که تعریف کردم متصل است و شماره ردیف اصلی اکسل را نادیده میگیرد ، از $ و manual هم استفاده کردم نشد

    • آواتار
      حسنا خاکزاد ۱۱ مهر ۱۳۹۷ / ۲:۰۵ ب٫ظ

      درود بر شما
      سوالتون خیلی واضح نیست
      بصورت کلی اگر داده ها ذخیره بشن و پیوت از روی داده ها بگیرید، گزارش اپدیت میشه و مشکلی هم نیست

  • alireza6773 ۲۴ مرداد ۱۳۹۷ / ۱۰:۱۱ ق٫ظ

    سلام وقتتون به خیر ممنون از سایت بسیار عالی و خوبتون . ببخشید من یه اکسل دارم چندین تا شیت داره که اسم شهرستان ها و چند تا شماره حساب و ماه های سال توشه ، یه شیت جدید ایجاد کردم که مثلا هر چی در ماه فروردین در اون شماره حساب مورد نظر در اون شیت ها نوشتم تو این شیت جدیدم به صورت خودکار نوشته بشه اگه بخوام دستی این کار رو بکنم خیلی زمان گیره باید یکی یکی تو شیت ایجادیم مساوی بزنم برم تو اون شیت مورد نظر مثلا ردیف فروردین اون حساب رو انتخاب کنم رو انتخاب کنم (مثلا =احمدآباد!E5) آیا راهی داره فرمولی بزنم به ترتیب خودش تمام شیت ها به همون ترتیب ردیفش فرمول نویسی کنه؟

      • alireza6773 ۱۰ شهریور ۱۳۹۷ / ۸:۴۵ ق٫ظ

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

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

          درود بر شما
          فرمول رو بذارید تا بررسی بشه
          اگر عینا مشابه بالا باشه که قاعدتا نباید خطا داشته باشه

          • alireza6773 ۱۰ شهریور ۱۳۹۷ / ۱:۳۲ ب٫ظ

            این فرمولیه که مینویسم . البته شیت سه به نام ناحیه یک هست ولی خطا میده

            =INDIRECT(ADDRESS(5;4;1;1;sheet3))
          • آواتار
            حسنا خاکزاد ۱۰ شهریور ۱۳۹۷ / ۱:۳۷ ب٫ظ

            اسم شیت رو داخل “” باید بذارید

          • alireza6773 ۱۰ شهریور ۱۳۹۷ / ۱:۴۲ ب٫ظ

            داخل “” گذاشتم ولی مقدار رو صفر میده بهم .

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

            دبل کوتیشن رو درست ثبت کنید حتما
            Shift+گ
            محتوای سلول D5 در Sheet3 اگر خالی باشه، صفر نشون میده

          • alireza6773 ۱۰ شهریور ۱۳۹۷ / ۲:۰۸ ب٫ظ

            ببخشید خیلی اذیت کردم شما رو . فقط یه مطلبی چجوری به پایین درگ کنم تا بجای ردیف سطرهاش زیاد بشه . مثلا بشه D6 , E6 , F6 , و الی آخر

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

            خواهش میکنم
            در آرگومان Column تابع Row استفاده کنید.
            مثلا
            Row(A4) یعنی عدد ۴

          • 6773alirezali ۱۰ شهریور ۱۳۹۷ / ۲:۳۸ ب٫ظ

            خیلی خیلی خیلی شرمنده ام سوال آخرمه. چجوری به افقی درگ کنم که ردیفش زیاد بشه؟؟؟ مثلا بشه e5 . e6 . e7 و الی آخر؟؟؟؟

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

            خواهش میکنم اما اگه دقت میکردین جواب سوالتون و داده بودم.
            وقتی میخواید به سمت راست درگ کنید و ردیف زیاد بشه. باید از تابع column در آرگومان row تابع address استفاده کنید

          • 775alirezay ۱۰ شهریور ۱۳۹۷ / ۳:۰۲ ب٫ظ

            بسیار سپاسگزارم . واقعا کمک کرد بهم . خدا خیرتون بده با این سایت عالیتون.???

          • alireza6773 ۱۱ شهریور ۱۳۹۷ / ۹:۰۳ ق٫ظ

            سلام وقت به خیر خداقوت . ممنون از راهنمایی های عالیتون عذر خواهم من این فرمول رو وارد کردم

            =INDIRECT(ADDRESS(6;ROW(E6);1;1;"sheet 1"))

            ولی به سمت راست یعنی افقی درگ میکنم سطرهاش اضافه میشه مثلا میشه e6 بعدیش f6 , والی آخر ولی من میخوام سطر همون e بمونه ولی ردیفش زیاد بشه e6 . e7 . e8 والی آخر باید چیکار کنم

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

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

            ضمن اینکه سطر و ستون رو اشتباه میفرمایید. وقتی میفرمایید “افقی درگ میکنم سطرهاش اضافه میشه مثلا میشه e6 بعدیش f6 “، اینها ستون هست و سطر ثابته. بیان درست سوال به تفهیم موضوع کمک میکنه

          • alireza6773 ۱۱ شهریور ۱۳۹۷ / ۹:۴۴ ق٫ظ

            سپاس از شما

  • جمیل ۱۶ مرداد ۱۳۹۷ / ۸:۴۹ ق٫ظ

    سلام خانم خاکزاد عزیز _ مطالب ارزنده شما رو مطالعه کردم _ بسیار سپاسگزارم وقت گذاشتید … خدا بهروزی به شما عنایت کنه

ارسال دیدگاه

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

توسط
تومان