انجمن اکسل فرساران

انجمن‌های اختصاصی اکسل => انجمن برنامه نویسی Excel => نويسنده: دکتر قاسم زاده در 16 مهر 1391 - 21:16

عنوان: سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 16 مهر 1391 - 21:16
با سلام و کسب اجازه از اساتيد، موضوعي اکابري را مطرح ميکنم که شايد براي دوستان کم تجربه اي مانند من بدرد بخورد و با راهنمايي هاي شما تکميل شود.
گاهي در اکسل ميخواهيم يک ستون بطور خودکار سورت شود. مثلا دو ستون A و B داريم که در B نام و A نام خانوادگي قرار دارد و ميخواهيم با اضافه شدن هر نام جديد، بلافاصله بر اساس نام خانوادگي سورت شود.
براي اين کار بايد يک ماکرو بسازيم. براي دوستان تازه کار مثل خودم ساخت ماکرو را از اول توضيح ميدهم:
1-   Alt+F11
2-   روي نام شيت مورد نظر در سمت چپ دوبار کليک ميکنيم.
3-   در پنجره کد که باز ميشود، در ليست باز شو سمت چپ که نوشته General  انتخاب را به worksheet تغيير ميدهيم.
4-   در ليست باز شو سمت راست change را انتخاب ميکنيم.
5-   اديتور بطور خودکار يک sub اضافه ميکند که بايد بين private sub  و end sub اين خطوط را اضافه نماييد:
''''''''''DO NOTHING IF COLUMN B HASN'T BEEN CHANGED
If Target.Column <> 2 Then
Exit Sub
End If

''''''''''OTHERWISE, SORT BY COLUMN A
Columns("A:B").Select

Selection.Sort Key1:=Range("A1"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

Range("A1").Select
6-   اديتور VBA  را ميبنديم و اگر فايلمان XLSM نيست، آنرا بصورت macro-enabled ذخيره مينماييم.

عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 17 مهر 1391 - 21:46
با تشکر از اظهار لطف علیرضای عزیز
سورت اتوماتيک با دستورهاي مشابه فوق به روشهاي گوناگون انجام شده ولي همه اشکالاتي دارند. قبلاً گفتم راهنمايي اساتيد ميتواند آنرا اصلاح و تکميل نمايد.
اگر محرک ماکرو، تغيير در همان ستون سورت شدني باشد، ماکرو دائماً تکرار ميشود و تمامي ندارد.
از طرفي بايد کاربر روي ستون مبناي شروع ماکرو (ستون B) برود تا ماکرو اجرا شود و بعد از سورت،در A1  پارک ميشود.
نمونه فايل نام و نام خانوادگي پیوست است
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: فرشید میدانی در 27 مهر 1391 - 11:13
برای رفع این مشکل یعنی LOOP شدن هنگام اجرای یک Event مثل همین چیزی که شما اشاره کرده اید راه حل اکسلی آن به شکل زیر است:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
        Range("A1") = "farsaran.ir"
    Application.EnableEvents = True
End Sub

مراقب باشد که حتما به حالت True مجدد برگردد (مثلا Error و ... ندهد و ...)  :)
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 28 مهر 1391 - 23:55
با تشکر از جناب ميداني، يک سئوال داشتم:
اگر ستوني که ميخواهيم سورت شود با فرمول از يک شيت ديگر بيايد، با تغيير در آن شيت خود بخود سورت نخواهد شد، مگر شرط اجراي ماکرو را Private Sub Worksheet_SelectionChange بگذاريم.
راه حلي پيشنهاد ميکنيد؟
نمونه پيوست است.
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: بهرام صمدیان در 29 مهر 1391 - 01:06
با سلام

فایل زیر را ببینید امیدوارم منظورتان را برآورده سازد
با احترام
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: فرشید میدانی در 29 مهر 1391 - 10:37
راه حل دیگر آن این است که هر وقت کاربر وارد این شیت می شود اینکار انجام شود پس در  Worksheet_Activate  کدها را می نویسیم.
(ما در Access گزینه ای Order by را در SQL داریم برای همین منظور که مطمئن شویم همواره گزارش اتوماتیک مرتب شده است.)
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: بهرام صمدیان در 29 مهر 1391 - 18:36
البنه من در فایلی که قبلا نیز قرار داده ام هر دو روش ر ابکار برده ام تا اگر شیت فعال شد سورت انجام شود و اگر شیت فعال بود و تغییری در ستون مورد نظر انجام شد باز هم سورت انجام شود
با احترام
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 30 مهر 1391 - 23:53
عليرغم وجود دکمه تشکر، بدينوسيله، تشکر شديداللحن خود را اعلام ميدارم.
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: فرشید میدانی در 13 آبان 1391 - 21:50
دکمه تشکر وجود دارد.  :)همان دو فلشی که زیر اسم پست کننده مطلب (قرمز/ سبز) است برای دادن امتیاز به کاربران استفاده می شود.
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 14 آبان 1391 - 20:49
انجام وظيفه شد ;)
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: naser1357 در 25 تیر 1392 - 21:30
با سلام
من  یک فایل دارم ستونهایش به ترتیب عبارتند از مشتری1-مشتری2- مشتری3 و مشتری 4 بعد قیمت خرید محصول-قیمت فروش-تعداد
و سطرهایس عبارتند از 1-محصول1-محصول2- ومحصول........... و زیر نام مشتری اسامی افراد
حال می خواهم هر وقت برنامه باز کنه برنامه اتوماتک اسامی مشتری را سورت کنه چکار کنم؟
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: دکتر قاسم زاده در 26 تیر 1392 - 01:42
 میتوانید از نمونه فایلهای این پست استفاده نمایید و ماکرو را به فایل خودتان اضافه کنید(بسته به مشخصات فایلتان آنرا اصلاح کنید)
یا فایل خودتان را بگذارید تا سایر دوستان زحمت آنرا بکشند.
البته چون در این انجمن هدف آموزش است نه کار خدماتی، روش اول ارجح است.
 ;)
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: ali_121 در 27 تیر 1392 - 13:50
سلام خدمت آقایان میدانی و Alirezag
اگر بخواهیم 9 تا ستون رو سورت کنیم بر اساس امتیاز
فرمول چه تغییراتی پیدا میکنه
ستونها از b تا j هست و امتیازات در ستون j قرار دارن
نمونه از کارم رو براتون گذاشتم
ممنون میشم راهنماییم کنید
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: ali_121 در 28 تیر 1392 - 13:41
سلام خدمت شما دوستان عزیز
با یخورده تغییر در فرمولها و آزمون و خطا تونستم فایل رو سورت کنم
خیلی خیلی ممنون از تایپک شما
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: m.gh12 در 31 تیر 1392 - 07:47
با سلام خدمت دوستان
من یه فایل دارم که چند ستون باید بر طبق یه ستون مرتب بشه لطفا راهنمایی فرمایید
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: سعید سرخانی در 12 آذر 1392 - 12:41
با سلام
میتوانید از تابع Large یا Small استفاده کنید
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: ali_121 در 14 آذر 1392 - 17:53
سلام به دوستان
میشه فرمولی رو بگید که بر اساس دو ستون و یا بیشتر سورت کنه
اگه امکانش هست ممنون میشم
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: pishraw در 14 آذر 1392 - 18:59
دوست عزیز لطفآً فایل ضمیمه را بررسی کنید
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: ali_121 در 22 آذر 1392 - 22:01
سلام دوست عزیز
خیلی ممنون از راهنماییت ولی فکر کنم من بد عنوان کردم
ستونها تغریبا مانند جدول مسابقات (بر فرض فوتبال) مثلا اگه یه ستون با هم مساوی بود با یه ستون دیگه مقایسه کنه
متشکر میشم راهنمایی کنید
عنوان: پاسخ : سورت اتوماتيک در اکسل
رسال شده توسط: naser1357 در 11 اسفند 1393 - 16:32
عليرغم وجود دکمه تشکر، بدينوسيله، تشکر شديداللحن خود را اعلام ميدارم.

سلام
محبت می کنید فایل مربوط به سورت را برایم ارسال نمایید گمشون کردم باز لازم شده
سورت هوشمند