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

کوئن یک ورک بوک حاوی 150 کاربرگ دارد که یک برگه برای هر شعبه شرکت است. او باید آن برگه ها را بر اساس منطقه ای که هر شاخه به آن تعلق دارد مرتب کند. (پنج منطقه در شرکت او وجود دارد.) او همچنین خاطرنشان می کند که اگر رنگ برگه برای هر کاربرگ بتواند منطقه را منعکس کند بسیار عالی خواهد بود، و متعجب است که آیا چنین مرتب سازی در اکسل امکان پذیر است.

بله، چنین مرتب سازی ممکن است، اما نیاز به استفاده از یک ماکرو دارد. سخت ترین بخش ایجاد ماکرو این است که چگونه تعیین کنید کدام شاخه ها در کدام منطقه هستند. شاید ساده ترین راه برای انجام این کار این باشد که مطمئن شوید کاربرگ های شما از یک الگوی نام گذاری استفاده می کنند که شامل اطلاعات منطقه و شاخه است. به عنوان مثال، ممکن است کاربرگ ها را چیزی مانند "Reg01-Branch123" نام گذاری کنید. سپس ماکرو شما می تواند از هر کاربرگ عبور کند و رنگ آمیزی و مرتب سازی را انجام دهد.

Sub SortWorksheets()
    Dim iReg As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim ws As Worksheet

    Application.ScreenUpdating = False

     Set tab colors
    For Each ws in Worksheets
        iReg = Val(Mid(ws.Name,4,2))
        Select Case iReg
            Case 1
                ws.Tab.Color = vbRed
            Case 2
                ws.Tab.Color = vbYellow
            Case 3
                ws.Tab.Color = vbBlue
            Case 4
                ws.Tab.Color = vbGreen
            Case 5
                ws.Tab.Color = vbCyan
            Case Else
                ws.Tab.ColorIndex = xlColorIndexNone
        End Select
    Next ws

     Sort the worksheets
    For I = 1 To Sheets.Count - 1
        K = I
        For J = I + 1 To Sheets.Count
            If UCase(Sheets(K).Name) > UCase(Sheets(J).Name) Then K = J
        Next J
        If K <> I Then Sheets(K).Move Before:=Sheets(I)
    Next I

    Application.ScreenUpdating = True
End Sub

ماکرو دو بار از طریق مجموعه Worksheets کار می کند. در اولین عبور، شماره منطقه از نام کاربرگ ها استخراج می شود. سپس از این (در ساختار Select Case) برای تنظیم رنگ برگه استفاده می شود. اگر شماره منطقه خارج از محدوده 1-5 باشد، تغییری در رنگ برگه ایجاد نمی شود.

اگر تعیین اینکه کدام شاخه در کدام منطقه است پیچیده تر است، باید ماکرو را بر این اساس تنظیم کنید. به عنوان مثال، شما ممکن است یک کاربرگ به نام "Region Key" داشته باشید که در ستون A، نام هر یک از شاخه های شما و در ستون B، شماره منطقه مربوط به هر یک از آن شاخه ها وجود دارد. با فرض اینکه داده های واقعی در ردیف 2 شروع می شوند، می توانید ماکرو را به روش زیر تغییر دهید:

Sub SortWorksheets2()
    Dim sTemp As String
    Dim iReg As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim ws As Worksheet
    Dim key As Worksheet

    Application.ScreenUpdating = False

    Set key = Worksheets("Region Key")

     Set tab colors
    For Each ws in Worksheets
        sTemp = UCase(ws.Name)
        I = 2     Beginning row number
        iReg = 0
        While key.Cells(I, 1) > ""
            If UCase(key.Cells(I, 1)) = sTemp Then iReg = key.Cells(I, 2)
            I = I + 1
        Wend
        Select Case iReg
            Case 1
                ws.Tab.Color = vbRed
            Case 2
                ws.Tab.Color = vbYellow
            Case 3
                ws.Tab.Color = vbBlue
            Case 4
                ws.Tab.Color = vbGreen
            Case 5
                ws.Tab.Color = vbCyan
            Case Else
                ws.Tab.ColorIndex = xlColorIndexNone
        End Select
    Next ws

     Sort the worksheets
    For I = 1 To Sheets.Count - 1
        K = I
        For J = I + 1 To Sheets.Count
            If UCase(Sheets(K).Name) > UCase(Sheets(J).Name) Then K = J
        Next J
        If K <> I Then Sheets(K).Move Before:=Sheets(I)
    Next I
    Sheets("Region Key").Move Before:=Sheets(1)

    Application.ScreenUpdating = True
End Sub

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

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

Sub SortWorksheets3()
    Dim sTemp As String
    Dim sSortArray(499) As String
    Dim iReg As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim ws As Worksheet
    Dim key As Worksheet

    Application.ScreenUpdating = False

    Set key = Worksheets("Region Key")

     Set tab colors and build sort array
    J = 0
    For Each ws in Worksheets
        sTemp = UCase(ws.Name)
        I = 2     Beginning row number
        iReg = 0
        While key.Cells(I, 1) > ""
            If UCase(key.Cells(I, 1)) = sTemp Then iReg = key.Cells(I, 2)
            I = I + 1
        Wend

        J = J + 1
        sSortArray(J) = Right("00" & iReg, 2) & " " & ws.Name

        Select Case iReg
            Case 1
                ws.Tab.Color = vbRed
            Case 2
                ws.Tab.Color = vbYellow
            Case 3
                ws.Tab.Color = vbBlue
            Case 4
                ws.Tab.Color = vbGreen
            Case 5
                ws.Tab.Color = vbCyan
            Case Else
                ws.Tab.ColorIndex = xlColorIndexNone
                 Force into incorrect region area for sort
                sSortArray(J) = "00 " & ws.Name
        End Select
    Next ws

     Sort the worksheets
    For I = 1 To Sheets.Count - 1
        K = I
        For J = I + 1 To Sheets.Count
            If UCase(sSortArray(K)) > UCase(sSortArray(J)) Then K = J
        Next J
        If K <> I Then
            Sheets(K).Move Before:=Sheets(I)
            sTemp = sSortArray(K)
            For J = K To I Step -1
                sSortArray(J) = sSortArray(J-1)
            Next J
            sSortArray(I) = sTemp
        End If
    Next I
    Sheets("Region Key").Move Before:=Sheets(1)

    Application.ScreenUpdating = True
End Sub

توجه داشته باشید که این تکرار ماکرو به یک آرایه کمکی (sSortArray) برای پیگیری نحوه مرتب سازی نام ها در کاربرگ ها متکی است.

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

614 دیدگاه

11.1k کاربر

108 نفر آنلاین
0 عضو و 108 مهمان در سایت حاضرند
بازدید امروز: 7262
بازدید دیروز: 16808
بازدید کل: 20170541
...