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

Pam دو ستون داده دارد. در ستون A شناسه های ساده مانند A، B، C و غیره وجود دارد. در ستون B یک سری مقادیر صحیح وجود دارد. او می تواند داده ها را بر اساس شناسه و ثانیاً بر اساس مقادیر صحیح مرتب کند. حالا او می‌خواهد در ستون C فرمولی داشته باشد که تمام مقادیر صحیح را برای یک شناسه خاص به هم متصل کند. بنابراین، اگر A1:A4 همه حاوی شناسه A باشند، در سلول C1 او می‌خواهد تمام مقادیر B1:B4 به هم پیوسته و با کاما تقسیم شود، مانند "11، 17، 19، 25". از آنجایی که تعداد ردیف‌ها برای هر شناسه می‌تواند متفاوت باشد، Pam مطمئن نیست که چگونه الحاق را انجام دهد.

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

Function CatSame(c As Range) As String
    Application.Volatile
    sTemp = ""
    iCurCol = c.Column
    If iCurCol = 3 Then
        If c.Row = 1 Then
            sLast = ""
        Else
            sLast = c.Offset(-1, -2)
        End If
        If c.Offset(0, -2) <> sLast Then
            J = 0
            Do
                sTemp = sTemp & ", " & c.Offset(J, -1)
                J = J + 1
            Loop While c.Offset(J, -2) = c.Offset(J - 1, -2)
            sTemp = Right(sTemp, Len(sTemp) - 2)
        End If
    End If
    CatSame = sTemp
End Function

این تابع اساساً مقداری را می گیرد که به آن ارسال می شود (یک مرجع سلول) و تأیید می کند که مرجع سلول برای ستون C است. اگر اینطور باشد، سپس شروع به الحاق مقادیر از ستون B بر اساس مقادیر ستون A می کند. اگر مقدار در ستون A با مقدار ردیف بالای آن متفاوت باشد، رشته مقادیر به هم پیوسته را برمی گرداند. با فرض اینکه شناسه های شما در ستون A هستند و مقادیری که باید به هم متصل شوند در ستون B هستند، می توانید موارد زیر را در ستون C قرار دهید:

=CatSame(C1)

این را تا جایی که لازم است در ستون C کپی کنید و در نهایت دقیقاً همان چیزی را خواهید داشت که پم می خواست.

یک تابع همه کاره تر، عملکردی است که تا حدودی مانند VLOOKUP عمل می کند، اما فهرستی به هم پیوسته از مقادیر را باز می گرداند که با هر چیزی که به دنبال آن هستید مطابقت دارد. تابع زیر را در نظر بگیرید:

Function VLookupAll(vValue, rngAll As Range, _
  iCol As Integer, Optional sSep As String = ", ")
    Dim rCell As Range
    Dim rng As Range
    On Error GoTo ErrHandler

    Application.Volatile
    Set rng = Intersect(rngAll, rngAll.Columns(1))
    For Each rCell In rng
        If rCell.Value = vValue Then _
          VLookupAll = VLookupAll & sSep & _
          rCell.Offset(0, iCol).Value
    Next rCell

    If VLookupAll = "" Then
        VLookupAll = CVErr(xlErrNA)
    Else
        VLookupAll = Right(VLookupAll, Len(VLookupAll) - Len(sSep))
    End If
ErrHandler:
    If Err.Number <> 0 Then VLookupAll = CVErr(xlErrValue)
End Function

این تابع تا چهار آرگومان می گیرد. اولین مورد مقداری است که می خواهید در جستجوی خود مطابقت دهید. در مثال Pams، این شناسه‌ای است که شما می‌خواهید، مانند A، B یا C. آرگومان دوم محدوده سلول‌هایی است که در آن به دنبال موارد منطبق می‌گردید (ستون A در این مورد). آرگومان سوم یک افست (از محدوده در آرگومان دوم) است که مقادیری را که می‌خواهید به هم متصل شوند را نشان می‌دهد. شما می توانید تابع را به این صورت استفاده کنید:

=VLookupAll("B",A1:A99,1)

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

=VLookupAll("B",A1:A99,1,"-")

راه حل ها تا کنون بر استفاده از ماکروها متمرکز بوده اند. دلیل این امر نسبتاً ساده است: راه حلی مبتنی بر فرمول وجود ندارد که بتواند آنچه را که Pam به آن نیاز دارد انجام دهد. استفاده از دستورات IF تو در تو برای ارزیابی آنچه در ستون A وجود دارد به خوبی کار نمی کند زیرا شما در عمق اینکه عبارات IF می توانند تودرتو شوند محدود هستید.

اگر اشکالی ندارید که مقادیر به هم پیوسته در آخرین نمونه از یک شناسه در ستون A باشد، می توانید از یک فرمول و یک نتیجه میانی استفاده کنید. با قرار دادن این فرمول در سلول C1 شروع کنید:

=B1

این فرمول باید وارد سلول C2 شود:

=IF(A2=A1,C1 & ", " & B2, B2)

این فرمول را به تعداد ردیف های مورد نیاز کپی کنید. چیزی که در نهایت به آن می‌رسید یک سری طولانی‌تر از مقادیر به هم پیوسته در ستون C است که طولانی‌ترین آنها در هر اجرا در همان ردیف با آخرین شناسه متوالی در ستون A است. سپس می‌توانید موارد زیر را در تمام سلول‌های کاربردی ستون قرار دهید. د:

=IF(LEN(C2)>LEN(C1),"",C1)

این فرمول تنها طولانی‌ترین رشته‌ها را از ستون C نشان می‌دهد، چیزی که Pam برای شروع به آن نیاز داشت.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

سوالات مشابه

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 30 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 26 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 37 visibility
0 دوستدار 0 امتیاز منفی
0 پاسخ 76 visibility

24.3k سوال

9.6k پاسخ

614 دیدگاه

11.2k کاربر

166 نفر آنلاین
0 عضو و 166 مهمان در سایت حاضرند
بازدید امروز: 22870
بازدید دیروز: 17853
بازدید کل: 20335049
...