ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
13 visibility
موضوع: آفیس توسط:

راجر پرسید آیا راهی برای محاسبه فاصله بین وقوع مقادیر در یک لیست وجود دارد؟ به عنوان مثال، او چندین هزار عدد در ستون A دارد. با نگاهی به مقدار سلول A351، آخرین باری که این مقدار در لیست رخ داد در سلول A246 بود. او فرمولی می خواهد که بتواند در سلول B351 قرار داده شود و 105، تفاوت بین 351 و 246 را برگرداند.

پیاده سازی این رویکرد در اکسل دشوار است زیرا اکسل در جستجوی رو به عقب-بالا یک ستون خیلی خوب نیست. اگر بتوان فرض را برعکس کرد، کار بسیار ساده تر می شود. به عنوان مثال، اگر فرمولی در سلول B246 بتواند مقدار 105 را برگرداند، به جای محاسبه آخرین رخداد، فاصله زمانی تا وقوع بعدی مقدار در سلول A246 را نشان می دهد. فرمول زیر وقوع بعدی مقدار را در سلول A1 محاسبه می کند:

=MATCH(A1,A2:$A$65536,0)

این فرمول را در سلول B1 قرار دهید و هر تعداد سلول لازم است آن را کپی کنید. اگر مقدار ستون A دوباره در ستون رخ ندهد، فرمول خطای #N/A را برمی گرداند. اگر ترجیح می دهید فرمول 0 را برگرداند، موارد زیر کار می کند:

=IF(ISNA(MATCH(A1,A2:$A$65536,0)),0,MATCH(A1,A2:$A$65536,0))

اگر باید حتماً به سمت بالا بشمارید (بجای رخداد بعدی، رخداد قبلی را بیابید)، ساده ترین راه برای انجام آن استفاده از یک تابع تعریف شده توسط کاربر است. تابع زیر، RowInterval، در محدوده ای که شما مشخص کرده اید به عقب نگاه می کند و بازه مورد نظر را برمی گرداند:

Function RowInterval(TestCell As Range, LookHere As Range) As Long
    Dim varValue As Variant
    Dim lngRow As Long

    Application.Volatile
    varValue = TestCell.Value
    
    Check for occurrences of the test value in the search range
    If WorksheetFunction.CountIf(LookHere, varValue) > 0 Then
        With LookHere
            Get the last row of the search range
            lngRow = .Row + .Rows.Count - 1
            Start with the last cell in the search range and work up
            Do Until .Item(lngRow, 1).Value = varValue
                lngRow = lngRow - 1
            Loop
        End With
        Subtract the number of the row containing the found occurrence
        from the number of the row containing the test value
        RowInterval = TestCell.Row - lngRow
    End If
End Function

برای استفاده از تابع، فرمول زیر را در سلول B2 قرار دهید و سپس فرمول را به تعداد سلول های مورد نظر کپی کنید:

=RowInterval(A2,A$1:A1)
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

88 نفر آنلاین
0 عضو و 88 مهمان در سایت حاضرند
بازدید امروز: 6491
بازدید دیروز: 14408
بازدید کل: 15455411
...