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

هنگام نوشتن یک ماکرو، می توانید با استفاده از روش WorksheetFunction برای اعمال تابع کاربرگ MIN، کمترین مقدار را در محدوده سلولی پیدا کنید. با این حال، ممکن است نیاز داشته باشید که نه تنها کمترین مقدار را در محدوده، بلکه آدرس اولین سلولی را که حاوی آن مقدار است نیز بیابید.

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

Function FindLowestAddr(pRng As Range) As String
    Dim MinVal As Double
    Dim MinAddr As String
    Dim c As Range

    MinVal = pRng.Cells(1).Value
    MinAddr = pRng.Cells(1).Address
    For Each c in pRng
        If c.Value < MinVal Then
            MinVal = c.Value
            MinAddr = c.Address
        End If
    Next c
    FindLowestAddr = MinAddr
End Function

توجه داشته باشید که این رویکرد به هیچ وجه به تابع کاربرگ MIN متکی نیست. با این حال، یک اشکال در آن وجود دارد - بین سلول هایی که دارای مقادیر عددی هستند و سلول هایی که فاقد مقادیر عددی هستند، تفاوتی قائل نمی شود. به عبارت دیگر، اگر محدوده ارسال شده به تابع حاوی یک سلول خالی باشد، آن سلول حاوی یک مقدار صفر در نظر گرفته می شود که ممکن است به خوبی کمترین مقدار در محدوده باشد.

یکی از راه های حل این مشکل، تکیه بر توابع کاربرگ از داخل ماکرو است. ماکرو زیر از هر دو تابع کاربرگ MIN و MATCH برای تعیین مکان حداقل مقدار و سپس شاخص (offset) آن سلول در محدوده استفاده می کند.

Function GetAddr(rng As Range) As String
    Dim dMin As Double
    Dim lIndex As Long
    Dim sAddress As String

    With Application.WorksheetFunction
        dMin = .Min(rng)
        lIndex = .Match(dMin, rng, 0)
    End With
    GetAddr = rng.Cells(lIndex).Address
End Function

لازم به ذکر است که اگر از ماکرو فقط برای کشف آدرس استفاده می کنید زیرا فکر می کنید هیچ راهی برای استخراج اطلاعات مورد نظر بدون ماکرو وجود ندارد، می توانید با استفاده از فرمول کاربرگ به طور کامل ماکرو را از بین ببرید. به عنوان مثال، اگر می خواهید آدرس سلول با کمترین مقدار را در محدوده نامگذاری شده MyRange تعیین کنید، می توانید از موارد زیر استفاده کنید:

=ADDRESS(ROW(MyRange)+MATCH(MIN(MyRange),MyRange,0)-1,COLUMN(MyRange))
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

110 نفر آنلاین
0 عضو و 110 مهمان در سایت حاضرند
بازدید امروز: 13937
بازدید دیروز: 23384
بازدید کل: 15264835
...