مزاحم نمی شوم در پایان چند سوال اکسل دارم که خدمتتان می فرستم :
چطور میشود لیست های بر پا کرد که بمحض ورود اطلاعات جدید در آن و افزایش رکورد ها دامنه protection نیز بطور اتوماتیک گسترده شود و تا آخرین ردیف پیش رود ؟
هدف از این کار اینست که اطلاعات ورودی دستخوش تغییرات خواسته یا ناخواسته نشود .
سلولهای این sheet در صورتیکه پر شده باشند در مقابل تغییرات حفاظت می شوند .
بدین ترتیب که اگر checkbox بالا را در حالت انتخاب قرار دهیم در صورتیکه بخواهیم در خانه ای که پر است مقداری را وارد کنیم، از اینکار جلوگیری بعمل خواهد آمد.
(توسط جعبه ابزار فرم یک CheckBox به sheet اضافه کنید)
کد برنامه ویژوال بیسیک :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
cellval = ActiveCell.Value
sheetprotect = Range("a1").Value
If cellval <> "" And sheetprotect Then
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
End If
End
من یک مشکلی دارم در یک سلول میخواهم همیشه مقدار آخرین سلول پر شده یک محدوده از یک ستون را داشته باشم چگونه می توانم اینکار را انجام دهم لطفا هرچه سریعتر من را راهنمایی کنید.
اگر برایتان مقدور است
اردشیر
با سلام خدمت دوست عزیز
جواب سوال شما بدین ترتیب است که اگر محدوده شما پیوسته و تمامی سلولهای آن پر شده باشد ، می توانید از توابع زیر برای اینکار به سادگی استفاده کنید .
کار با این توابع را با ذکر مثالی نشان داده ام.
فرمول خانه D1 و D2 در شکل نشان داده شده است ،
|
A |
B |
C |
D |
E |
F |
1 |
Day |
Num |
|
Mon |
< - - - - |
=INDEX(A:B,COUNTA(A:A),1) |
2 |
Sun |
2 |
|
14 |
< - - - - |
=INDEX(A:B,COUNTA(B:B),2) |
3 |
Mon |
4 |
|
|
|
|
4 |
Tue |
6 |
|
|
|
|
5 |
Wed |
8 |
|
|
|
|
6 |
Thu |
10 |
|
|
|
|
7 |
Fri |
12 |
|
|
|
|
8 |
Sat |
14 |
|
|
|
|
9 |
Sun |
|
|
|
|
|
10 |
Mon |
|
|
|
|
|
اما اگر ! محدوه شما غیر پیوسته باشد حالت خاصی پیش میآید و فرمول نویسی آن با مراجع دورانی به سختی میسر است و میدانیم که مراجع دورانی حداکثر Iterations = 32767 خواهد بود و این درحالی است که شما 32536 خانه در اکسل دارید، پس اینهم نا کارآمد است. (البته اینکار انجام شدنی است).
اما راه حل اصولی اینگونه موارد نوشتن یک تابع ساده است و من این تابع را برای شما مینویسم ، برای استفاده از این تابع مراحل زیر را برای ایجاد آن طی کنید .
Function FINDLASTVALUE(CellRange As Range)
' THIS FUNCTION FIND FINAL VALUE IN A SPECIFIC RANGE
For Each C In CellRange
If C.Value <> "" Then
FINDLASTVALUE = C.Value
End If
Next C
End Function
حال در اکسل تابعی به نام FINDLASTVALUE دارید که توسط آن میتوانید مقدار آخرین خانه هر محدوده را پیدا کنید .
بعنوان مثال در اکسل مینویسیم :
=FINDLASTVALUE(A:A)
که آخرین مقدار را در محدوده ستون A برای ما پیدا میکند
در کلاس برای شروع این مبحث اینچنین شروع میکنم که خانههای اکسل مثل آدمها و سکه اند، یعنی دو رو دارند . یک ظاهر و و یک باطن .
مانند خانهای که تاریخ 7/27/2006 را نشان میدهد اما باطن آن عدد 38925 است.
در کار با رقم های اعشار اعداد نیز ما همین حالت را داریم ، بدین ترتیب که اگر از Toolbar گزینههای Decrase Decimal و Incrase Decimal را انتخاب کنیم ، در واقع فقط ظاهر آن خانه تغییر کرده است و در صورتیکه روی این خانه عملیات ریاضی انجام دهیم ، باطن خانه در آن محاسبات شرکت خواهد کرد.
در مثال زیر این امر به وضوح مشخص است که در خانه عدد 123.1 نشان داده میشود اما در نوار فرمول مقدار واقعی این خانه که 123.1233 است را میبینیم.
منظور از روند کردن یک عدد، یعنی تغییر دائمی در رقمهای آن عدد.
روند کردن قسمت اعشار یک عدد
روند کردن قسمت صحیح یک عدد
تابع Round
برای گرد کردن تا تعداد رقم دلخواه اعشار بکار میرود ، بدین صورت که :
ROUNDUP(Number,Num_digits)
Number : عددی که میخواهیم آنرا روند کنیم.
Num_digits : دقت اعشار
اگر پارامتر دوم عدد مثبت باشد، رقم داده شده را با آن دقت اعشار داده شده گرد میکند (عدد 5 بستگی به رقم بعدش دارد ، اگر عدد بعد از 5 از 5 بیشتر باشد 5 به 6 گرد میشود)
· اگر صفر باشد فقط قسمت صحیح عدد را میدهد
· اگر عدد منفی باشد از سمت چپ ممیز شروع به گرد کردن میکند.
=ROUND(2.15, 1) |
عدد 2.15 را تا یک رقم اعشار گرد میکند که میشود 2.1 |
=ROUND(2.149, 1) |
Rounds 2.149 to one decimal place (2.1) |
=ROUND(-1.475, 2) |
Rounds -1.475 to two decimal places (-1.48) |
=ROUND(21.5, -1) |
Rounds 21.5 to one decimal place to the left of the decimal point (20) |
ROUNDDOWN |
گرد کردن اعداد به سمت صفر |
=ROUNDDOWN(2.578;2)à2.57 |
ROUNDUP |
گرد کردن اعداد دور از صفر |
=ROUNDUP(2.578;2)à2.58 |
CEILING |
عدد 2.4 را به نزدیکترین مضرب 2 که از خودش بیشتر است گرد میکند . |
=CEILING(2.4;2) à 4 |
FLOOR |
عدد 24 را به نزدیکترین مضرب صحیح 7 که از 24 کمتر است گرد میکند |
=FLOOR(24;7) à 21 |
EVEN |
عددی را به نزدیکترین عدد زوج بعداز خودش گرد می کند. |
=EVEN(2.5) à 4 |
ODD |
عددی را به نزدیکترین عدد فرد بعد از خودش گرد میکند. |
=ODD(1.5) à 3 |
TRUNC |
قسمت اعشاری را حذف میکند. |
=TRUNC(8.9) à 8 |
MROUND |
عددی را به مضربی دلخواه از عدد دیگر، گرد میکند. |
=MROUND(10;3) à9 |
INR |
جزء صحیح یک عدد را میدهد. |
=INT(5.4) à 5 |
کاربرد ROUNDUP : فرض کنید که قرار است امتیاز افرادی را پس از یک سری محاسبات بدست آورید، اگر شما از تابع ROUND استفاده کنید ، چون اعداد 12.44 را تا یک رقم اعشار میکند 12.4 ، ممکن است فردی اعتراض کند که امتیاز او نادیده گرفته شده است ! آنهم در حد یکصدم ! بنابراین بهتر است از ROUNDUP استفاده کنیم که در هر حال امتیازی بیشتر را محاسبه میکند.
کاربرد CEILING : این تابع کار مثل راننده تاکسیها عمل میکند، یعنی اگر کرایه شما 118 تومان شده باشد ، میگویند 125 تومان یا مثلا اگر کرایه شما شده باشد 233 تومان میگویند 250 تومان . البته این به این دلیل نیست که میخواهند پول بیشتری بگیرند ! بلکه به خاطر این است که در سیستم پولی ما 25 تومانی داریم اما 33 تومان نه. در واقع آنها عدد را به اولیل مضرب 25 بالاتر از کرایه گرد میکنند و ما در اکس مینویسیم :
=CEILING(کرایه , 25 ) J
-------------------------------