استفاده از شزط در تابع rank

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • moslemi

    • 2011/03/04
    • 110

    استفاده از شزط در تابع rank

    وقت بخیر دوستان
    یه سوال در خصوص تابع rank دارم
    یه فایل اکسل با 4 ستون شامل ک ناحیه - ناحیه - منطقه- و نمره می باشه
    با تابع rank رتبه هر منطقه را در ناحیه خودش محاسیه کردم
    سوال اینکه در تابع rank قسمت ref سلولها را دستی انتخاب کردم . امکان داره با فرمول این قسمت تکمیل بشه تا در صورتی که تعداد مناطق کم یا زیاد شد دوباره نخواهیم دستی انتخاب کنیم.
    مثلا ناحیه یک از سلول d211 می باشد امکان داره که تعداد مناطق تغییر کنه.
    البته نواحی هر کدام یک کد دارند.
    مثلا ناحیه یک کدش 31
    با تشکر
    فایل های پیوست شده
  • abootorab

    • 2014/10/17
    • 351

    #2
    نوشته اصلی توسط moslemi
    وقت بخیر دوستان
    یه سوال در خصوص تابع rank دارم
    یه فایل اکسل با 4 ستون شامل ک ناحیه - ناحیه - منطقه- و نمره می باشه
    با تابع rank رتبه هر منطقه را در ناحیه خودش محاسیه کردم
    سوال اینکه در تابع rank قسمت ref سلولها را دستی انتخاب کردم . امکان داره با فرمول این قسمت تکمیل بشه تا در صورتی که تعداد مناطق کم یا زیاد شد دوباره نخواهیم دستی انتخاب کنیم.
    مثلا ناحیه یک از سلول d211 می باشد امکان داره که تعداد مناطق تغییر کنه.
    البته نواحی هر کدام یک کد دارند.
    مثلا ناحیه یک کدش 31
    با تشکر
    با درود
    اگر کد ناحیه ها ثابت باشه، مثلا 31 برای ناحیه 1 ، 32 برای ناحیه 2 ، 33 برای ناحیه 3 و الی آخر..... کافیست برای اولین سطر هر ناحیه فرمول سلول مورد نظر را بصورت زیر وارد کنید. ( این فرمول مثلا برای ناحیه 1 می باشد)
    کد:
     rank(d2;offset($d$1;1;0;countif($a:$a;31);1))

    کامنت

    • Amir Ghasemiyan

      • 2013/09/20
      • 4598
      • 100.00

      #3
      سلام دوست عزيز
      پيشنهاد ميكنم از جدول (table) استفاده كنيد
      من فايل شما رو يكم تغيير دادم. ببينين اينطوري به كارتون مياد يا نه
      فایل های پیوست شده

      کامنت

      • امين اسماعيلي
        مدير تالار ويژوال بيسيك

        • 2013/01/17
        • 1198
        • 84.00

        #4
        با درود

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

        کد:
        =RANK(D2,INDEX(D:D,MATCH($B2,$B:$B,0)):INDEX(D:D,MATCH($B2,$B:$B,1)))
        یا اصلا بیایم یه تابع جدید بنویسیم مثل زیر

        کد:
        Function RIM(RankCell As Range, MatchCell As Range) As Long
        
        'Rank-Index-Match routine, equivalent in functionality to worksheet
        '=RANK(D2,INDEX(D:D,MATCH($B2,$B:$B,0)):INDEX(D:D,MATCH($B2,$B:$B,1)))
        
        Dim RankCol As Range
        Dim MatchCol As Range
        Set RankCol = RankCell.EntireColumn
        Set MatchCol = MatchCell.EntireColumn
        With WorksheetFunction
        RIM = .Rank(RankCell, _
        Range(.Index(RankCol, .Match(MatchCell, MatchCol, 0)), _
        .Index(RankCol, .Match(MatchCell, MatchCol, 1))))
        End With
        
        End Function
        تابع بالا رو توی یه ماژول کپی کنین و بعد مثلا به این صورت به سادگی به کار ببرین :
        کد:
        =RIM(D2,B2)
        که جواب هشت میشه.
        شکل زیر هم دو روش رو نشون میده که جواب ها یکسان بدست اومده
        Click image for larger version

Name:	nemone.JPG
Views:	1
Size:	66.6 کیلو بایت
ID:	125161
        در پناه خداوندگار ایران زمین باشید و پیروز

        کامنت

        • moslemi

          • 2011/03/04
          • 110

          #5
          با تشکر فراوان

          کامنت

          چند لحظه..