به دست آوردن نزدیكترین تاریخ (كمتر) به یك تاریخ از بین مجموعه*ای از تواریخ

Collapse
این تاپیک قفل است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ظهور 313

    • 2017/01/20
    • 244

    [حل شده] به دست آوردن نزدیكترین تاریخ (كمتر) به یك تاریخ از بین مجموعه*ای از تواریخ

    سلام به همه دوستان
    یك ستون پر از تاریخ دارم، می*خوام نزدیكترین تاریخ (كه كمتر از تاریخ مورد جستجو هست) را در یك ستون تاریخ پیدا كنم تا از اون در تابع vlookup استفاده كنم.
    لطفا یه نفر راهنمایی كنه
    فایل مثال هم قرار دادم
    فایل های پیوست شده
  • generalsamad
    مدير تالار توابع

    • 2014/06/22
    • 1496

    #2
    با سلام
    ببینید این فرمول درست جواب میده؟
    کد PHP:
    =index(b10:b15;match(b4;c10:c15;1)) 
    [CENTER]
    [SIGPIC][/SIGPIC]
    [/CENTER]

    کامنت

    • ظهور 313

      • 2017/01/20
      • 244

      #3
      نه، متاسفانه در برخی حالت*ها جواب نمیده،
      توی فایل قرارش دادم لطفا ببینید استاد
      فایل های پیوست شده

      کامنت

      • generalsamad
        مدير تالار توابع

        • 2014/06/22
        • 1496

        #4
        با سلام
        فایل ضمیمه رو نگاه کنید
        از دو ستون کمکی استفاده شده
        یکی برای اختلاف بین تاریخ ها
        یکی هم کمترین اختلافها رو رتبه بندی میکنه
        در نهایت با استفاده از تابع جستجو خروجی مورد نظر رو پیدا میکنه
        فایل ضمیمه گردید
        فایل های پیوست شده
        [CENTER]
        [SIGPIC][/SIGPIC]
        [/CENTER]

        کامنت

        • ظهور 313

          • 2017/01/20
          • 244

          #5
          نوشته اصلی توسط generalsamad
          با سلام
          فایل ضمیمه رو نگاه کنید
          از دو ستون کمکی استفاده شده
          یکی برای اختلاف بین تاریخ ها
          یکی هم کمترین اختلافها رو رتبه بندی میکنه
          در نهایت با استفاده از تابع جستجو خروجی مورد نظر رو پیدا میکنه
          فایل ضمیمه گردید

          متاسفانه باز هم اشتباه جواب میده
          توی همین فایلی كه جواب دادید، مقدار درست، 965 است، در حالی كه عدد نزدیك بزرگتر وارد شده.
          تازه، دو تا ستون كمكی، كار رو خیلی سخت میكنه، این فرمول رو میخوام توی ستون*های زیادی استفاده كنم و این كار رو خیلی سنگین می*كنه. فرمول ساده*تری نداره؟

          کامنت

          • rasools13

            • 2017/01/20
            • 360
            • 80.00

            #6
            نوشته اصلی توسط ظهور 313
            سلام به همه دوستان
            یك ستون پر از تاریخ دارم، می*خوام نزدیكترین تاریخ (كه كمتر از تاریخ مورد جستجو هست) را در یك ستون تاریخ پیدا كنم تا از اون در تابع vlookup استفاده كنم.
            لطفا یه نفر راهنمایی كنه
            فایل مثال هم قرار دادم
            سلام با تعریف تابع ذیل میتوانید نزدیک ترین تاریخ قبل از یک تاریخ مشخص رو در یک محدوده بدست بیارین یا در Vlookup استفاده کنید
            کد PHP:
            Function NearDate(DateTarget As DateRange As Range) As Variant
                    Dim Result 
            As Date
                    
            For Each Rng In Range
                        
            If Rng DateTarget Then
                             Result 
            Application.WorksheetFunction.Max(ResultRng)
                        
            End If
                    
            Next
                    NearDate 
            Result
            End 
            Function 
            [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
            [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
            [/CENTER]

            کامنت

            • ظهور 313

              • 2017/01/20
              • 244

              #7
              نوشته اصلی توسط rasools13
              سلام با تعریف تابع ذیل میتوانید نزدیک ترین تاریخ قبل از یک تاریخ مشخص رو در یک محدوده بدست بیارین یا در Vlookup استفاده کنید
              کد PHP:
              Function NearDate(DateTarget As DateRange As Range) As Variant
                      Dim Result 
              As Date
                      
              For Each Rng In Range
                          
              If Rng DateTarget Then
                               Result 
              Application.WorksheetFunction.Max(ResultRng)
                          
              End If
                      
              Next
                      NearDate 
              Result
              End 
              Function 
              سلام
              بله از لطف شما ممنونم. اما یه مشكل داره (البته در مورد كار بنده). من میخوام اگه توی محدوده، تاریخ مساوی با تاریخ مورد جستجو در آرگومان اول تابع شما وجود داشت، خود همون تاریخ برگرده و سراغ پایین تر از اون نره، تابع شما، به این صورتی كه عرض كردم، قابل اصلاح هست استاد؟

              کامنت

              • rasools13

                • 2017/01/20
                • 360
                • 80.00

                #8
                نوشته اصلی توسط ظهور 313
                سلام
                بله از لطف شما ممنونم. اما یه مشكل داره (البته در مورد كار بنده). من میخوام اگه توی محدوده، تاریخ مساوی با تاریخ مورد جستجو در آرگومان اول تابع شما وجود داشت، خود همون تاریخ برگرده و سراغ پایین تر از اون نره، تابع شما، به این صورتی كه عرض كردم، قابل اصلاح هست استاد؟
                سلام بله ه صورت ذیل
                کد PHP:
                Function NearDate(DateTarget As DateRange As Range) As Variant
                        Dim Result 
                As Date
                        
                For Each Rng In Range
                          
                If Rng DateTarget Then
                      Result 
                DateTarget
                                 
                Exit For
                            Else If 
                Rng DateTarget Then
                                 Result 
                Application.WorksheetFunction.Max(ResultRng)
                            
                End If
                        
                Next
                        NearDate 
                Result
                End 
                Function 
                [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                [/CENTER]

                کامنت

                • ظهور 313

                  • 2017/01/20
                  • 244

                  #9
                  نوشته اصلی توسط rasools13
                  سلام بله ه صورت ذیل
                  کد PHP:
                  Function NearDate(DateTarget As DateRange As Range) As Variant
                          Dim Result 
                  As Date
                          
                  For Each Rng In Range
                            
                  If Rng DateTarget Then
                        Result 
                  DateTarget
                                   
                  Exit For
                              Else If 
                  Rng DateTarget Then
                                   Result 
                  Application.WorksheetFunction.Max(ResultRng)
                              
                  End If
                          
                  Next
                          NearDate 
                  Result
                  End 
                  Function 
                  خطا داد
                  فایل های پیوست شده

                  کامنت

                  • rahi_feri

                    • 2014/08/08
                    • 524
                    • 94.67

                    #10
                    سلام
                    چک کنید....!
                    فایل های پیوست شده
                    [B][SIZE=1]بخش امضاء :
                    [/SIZE][/B][LEFT]
                    [CODE]
                    Sub Macro()
                    ActiveCell = "IY" & Right(Application.Name, 5)
                    With ActiveCell.Characters(Start:=2, Length:=1).Font
                    .Name = "Webdings"
                    .Color = 255
                    End With
                    End Sub
                    [/CODE]
                    [/LEFT]

                    کامنت

                    • rasools13

                      • 2017/01/20
                      • 360
                      • 80.00

                      #11
                      نوشته اصلی توسط ظهور 313
                      خطا داد
                      ببخشید عبارت ElseIF میبایست بدون فاصله نوشته شود که اصلاح کردم .. کد ذیل... در ضمن برای نمایش صحیح تاریخ فرمت سلولی که فرمول را مینویسید Date باشد
                      کد PHP:
                      Function NearDate(DateTarget As DateRange As Range) As Date
                              Dim Result 
                      As Date
                              
                      For Each Rng In Range
                                  
                      If Rng DateTarget Then
                                      Result 
                      DateTarget
                                      
                      Exit For
                                  ElseIf 
                      Rng DateTarget Then
                                       Result 
                      Application.WorksheetFunction.Max(ResultRng)
                                  
                      End If
                              
                      Next
                              NearDate 
                      Result
                      End 
                      Function 
                      [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                      [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                      [/CENTER]

                      کامنت

                      • ظهور 313

                        • 2017/01/20
                        • 244

                        #12
                        نوشته اصلی توسط rasools13
                        ببخشید عبارت ElseIF میبایست بدون فاصله نوشته شود که اصلاح کردم .. کد ذیل... در ضمن برای نمایش صحیح تاریخ فرمت سلولی که فرمول را مینویسید Date باشد
                        کد PHP:
                        Function NearDate(DateTarget As DateRange As Range) As Date
                                Dim Result 
                        As Date
                                
                        For Each Rng In Range
                                    
                        If Rng DateTarget Then
                                        Result 
                        DateTarget
                                        
                        Exit For
                                    ElseIf 
                        Rng DateTarget Then
                                         Result 
                        Application.WorksheetFunction.Max(ResultRng)
                                    
                        End If
                                
                        Next
                                NearDate 
                        Result
                        End 
                        Function 
                        از لطف شما و دوست دیگرمون خیلی خیلی ممنونم

                        کامنت

                        • ظهور 313

                          • 2017/01/20
                          • 244

                          #13
                          نوشته اصلی توسط rasools13
                          ببخشید عبارت ElseIF میبایست بدون فاصله نوشته شود که اصلاح کردم .. کد ذیل... در ضمن برای نمایش صحیح تاریخ فرمت سلولی که فرمول را مینویسید Date باشد
                          کد PHP:
                          Function NearDate(DateTarget As DateRange As Range) As Date
                                  Dim Result 
                          As Date
                                  
                          For Each Rng In Range
                                      
                          If Rng DateTarget Then
                                          Result 
                          DateTarget
                                          
                          Exit For
                                      ElseIf 
                          Rng DateTarget Then
                                           Result 
                          Application.WorksheetFunction.Max(ResultRng)
                                      
                          End If
                                  
                          Next
                                  NearDate 
                          Result
                          End 
                          Function 
                          استاد ببخشید یه سوال دیگه هم داشتم.
                          گفتید كه میشه این تابع رو در تابع vlookup استفاده كنم. یعنی اگر بخوام آخرین تاریخ (در ستون b) مربوط به یك مقدار خاص (در ستون a) را به دست بیارم، باید چه جوری بنویسمش؟

                          کامنت

                          • rasools13

                            • 2017/01/20
                            • 360
                            • 80.00

                            #14
                            نوشته اصلی توسط ظهور 313
                            استاد ببخشید یه سوال دیگه هم داشتم.
                            گفتید كه میشه این تابع رو در تابع vlookup استفاده كنم. یعنی اگر بخوام آخرین تاریخ (در ستون b) مربوط به یك مقدار خاص (در ستون a) را به دست بیارم، باید چه جوری بنویسمش؟
                            فرمول vlookup محدودیت زیادی داره و زیاد هم منعطف نیست.. از ترکیب توابع Index و Match میتوانید همان کار vlookup را با انعطاف بیشتری انجام دهید .. بصورت ذیل
                            فایل پیوست رو هم ببینید
                            کد PHP:
                            =INDEX(D8:D13;MATCH(NearDate(C5;C8:C13);C8:C13;0)) 
                            فایل های پیوست شده
                            [CENTER][B]بهترین راه ذخیره زمان(یادگیری)،،حل مشکلات دیگران است
                            [COLOR=#0000ff]مشکلات دیگران، روزی مشکلات ما هم خواهد شد[/COLOR][/B][COLOR=#ff0000][B][FONT=arial][/FONT][/B][/COLOR]
                            [/CENTER]

                            کامنت

                            • ظهور 313

                              • 2017/01/20
                              • 244

                              #15
                              نوشته اصلی توسط rasools13
                              فرمول vlookup محدودیت زیادی داره و زیاد هم منعطف نیست.. از ترکیب توابع Index و Match میتوانید همان کار vlookup را با انعطاف بیشتری انجام دهید .. بصورت ذیل
                              فایل پیوست رو هم ببینید
                              کد PHP:
                              =INDEX(D8:D13;MATCH(NearDate(C5;C8:C13);C8:C13;0)) 
                              فرمول فایلتون به یه فایل دیگه ارجاع میده ؟!
                              و ظاهرا منظور بنده كاملا روشن نشده، روی همون فایل، منظورم رو بهتر توضیح دادم لطفا یه نگاه بندازید
                              ممنونم
                              فایل های پیوست شده

                              کامنت

                              چند لحظه..