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

پت متعجب است که آیا راه سریعی برای حروف الفبا کردن کاربرگ ها در ورک بوک او وجود دارد. هیچ روش داخلی برای انجام این کار وجود ندارد، اما می توان از یک ماکرو برای انجام مرتب سازی برای شما استفاده کرد. دو رویکرد را در این نکته ارائه می کنم. اولی یک راه ساده برای انجام مرتب سازی ارائه می دهد.

Sub SortSheets1()
    Dim I As Integer
    Dim J As Integer

    For I = 1 To Sheets.Count - 1
        For J = I + 1 To Sheets.Count
            If UCase(Sheets(I).Name) > UCase(Sheets(J).Name) Then
                Sheets(J).Move Before:=Sheets(I)
            End If
        Next J
    Next I
End Sub

این ماکرو برگه های کاربرگ را بر اساس نام به ترتیب صعودی مرتب می کند. اگر می خواهید آنها را به ترتیب نزولی مرتب کنید، تنها کاری که باید انجام دهید این است که > را در خط مرکزی به < تغییر دهید.

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

Sub SortSheets2()
    Dim I As Integer
    Dim sMySheets() As String
    Dim iNumSheets As Integer

    iNumSheets = Sheets.Count
    Redim sMySheets(1 To iNumSheets)

    For I = 1 To iNumSheets
        sMySheets(I) = Sheets(I).Name
    Next I

    BubbleSort sMySheets

    For I = 1 To iNumSheets
        Sheets(sMySheets(I)).Move Before:=Sheets(I)
    Next I
End Sub
Sub BubbleSort(sToSort() As String)
    Dim Lower As Integer
    Dim Upper As Integer
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
    Dim Temp As String

    Lower = LBound(sToSort)
    Upper = UBound(sToSort)
    For I = Lower To Upper - 1
        K = I
        For J = I + 1 To Upper
            If sToSort(K) > sToSort(J) Then
                K = J
            End If
        Next J
        If I <> K Then
            Temp = sToSort(I)
            sToSort(I) = sToSort(K)
            sToSort(K) = Temp
        End If
    Next I
End Sub

هر کسی که برای مدتی برنامه نویسی کرده باشد، می داند که BubbleSort یک روال مرتب سازی همه منظوره خوب است، اما موارد سریع تری نیز وجود دارد. به عنوان مثال، اگر تعداد کمی کاربرگ دارید، و آنها بسیار نامرتب شروع به کار می کنند، ممکن است متوجه شوید که الگوریتم QuickSort سودمندتر است. تنها کاری که برای تغییر موارد فوق برای استفاده از QuickSort باید انجام دهید این است که الگوریتم QuickSort را به عنوان یک برنامه فرعی اضافه کنید (الگوریتم را می توانید در هر کتاب برنامه نویسی خوب ویژوال بیسیک پیدا کنید) و سپس رویه را از داخل ماکرو اصلی SortSheets فراخوانی کنید. (این به معنای تغییر خطی است که اکنون BubbleSort نامیده می شود.)

تفاوت دیگری بین این ماکرو دوم و اولی وجود دارد. ماکرو اول به حروف متنی که برای نام گذاری کاربرگ های شما استفاده می شود توجهی نمی کند. بنابراین، MyWorksheet مانند MYWORKsheet مشاهده می شود. ماکرو دوم به حروف متن توجه می کند و بر اساس آن مرتب می کند. البته، این مسئله چندان مهمی نیست، زیرا اکسل به حروف کوچک و بزرگ در نام کاربرگ ها نیز توجه نمی کند.

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

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

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

125 نفر آنلاین
0 عضو و 125 مهمان در سایت حاضرند
بازدید امروز: 6004
بازدید دیروز: 12311
بازدید کل: 15376340
...