پت تعجب می کند که آیا راهی برای مرتب سازی خودکار هر بار که داده های جدیدی به کاربرگ اضافه می کند وجود دارد یا خیر. به عنوان مثال، پت فکر میکند که خیلی خوب است که وقتی نام جدیدی را به فهرستی از نامها اضافه میکند، نامها بهطور خودکار مرتب شوند تا همیشه مرتب باشند.
تنها راهی که می توان این کار را انجام داد استفاده از یک ماکرو است که هر زمان که چیز جدیدی در کاربرگ وارد می شود فعال می شود. برای مثال میتوانید یک ماکرو به کد یک کاربرگ اضافه کنید که وقتی چیزی در کاربرگ تغییر میکند فعال میشود. (می توانید با کلیک راست روی برگه کاربرگ و انتخاب View Code از منوی Context پنجره کد را مشاهده کنید.) نمونه زیر نمونه ای از این ماکروهای ساده است:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Range("A1").Sort Key1:=Range("A2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
ماکرو فرض می کند که می خواهید داده های ستون A را مرتب کنید و در سلول A1 یک هدر وجود دارد. اگر نام ها در ستون دیگری هستند، فقط مرجع سلول A2 را به ستون دیگری مانند B2، C2 و غیره تغییر دهید.
البته، مرتب کردن هر زمان که هر تغییری ایجاد شود میتواند آزاردهنده باشد. ممکن است بخواهید زمان انجام مرتبسازی را محدود کنید تا فقط زمانی رخ دهد که تغییراتی در بخش خاصی از دادههای شما ایجاد شود. نسخه زیر ماکرو داده ها را فقط زمانی مرتب می کند که تغییری در ستون A ایجاد شود.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Range("A1").Sort Key1:=Range("A2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub
استفاده از ماکرو برای مرتبسازی خودکار دادههای شما دارای اشکالاتی است. اول، از آنجایی که از یک ماکرو برای مرتبسازی استفاده میکنید، این عملیات اساساً «نهایی» است. به عبارت دیگر، پس از مرتب سازی، نمی توانید از Ctrl+Z برای لغو عملیات استفاده کنید.
اشکال دوم این است که ورود داده ها ممکن است کمی نگران کننده باشد. به عنوان مثال، اگر از هر یک از ماکروهای بالا استفاده می کنید و شروع به قرار دادن نام ها در کاربرگ می کنید، به محض اتمام آنچه در ستون A است مرتب می شوند. اگر داده های شما از پنج ستون استفاده می کند و ورودی خود را در ردیف 15 شروع می کنید. ، به محض اینکه وارد کردن نام در ستون A (و قبل از وارد کردن داده ها در ستون های B تا E) انجام شد، داده های شما به ترتیب مناسب مرتب می شوند. این بدان معنی است که شما باید مکان جابجایی آن را در مرتب سازی پیدا کنید، سلول مناسب را در ستون B انتخاب کنید و سپس بقیه داده ها را برای رکورد وارد کنید. البته، راه حل این است که دادههای خود را به ترتیبی غیرطبیعی اضافه کنید - فقط مطمئن شوید که نام در ستون A آخرین چیزی است که برای ثبت وارد میکنید.