PDA

View Full Version : سوال: جدا کردن قسمتی از یک رشته



nazanin_90
شنبه 19 آذر 1390, 11:07 صبح
با سلام
با چه کدی میتوانیم عدد 56 را را که بین دو خط فاصله سمت چپ رشته 1-56-4578- 103 است جدا کنیم ؟
در ضمن تعداد ارقام عدد بین دو خط فاصله سمت چپ متغیر است و ممکن است سه رقمی یا .....رقمی باشد .
با تشکر

Snoopboy
شنبه 19 آذر 1390, 11:10 صبح
اینو بزار توی یک دکمه
Label1.Caption = Split(Text1, "-")(1)

nazanin_90
شنبه 19 آذر 1390, 12:18 عصر
اینو بزار توی یک دکمه
Label1.Caption = Split(Text1, "-")(1)

ضمن تشکر
یک سوال دیگر
در اکسل چگونه از این کد استفاده میشود ؟ ظاهراً عبارت کلیدی split در اکسل وجود ندارد .
با تشکر

محسن واژدی
شنبه 19 آذر 1390, 21:34 عصر
سلام
از آنجایی که تابع split عضوی از کتابخانه VBA است و آفیس هم از VBA استفاده میکند، این تابع نیز در آفیس شناخته شده است
البته برخی مواقع با اینکه کتابخانه VBA بارگذاری شده است خطای "sub or function not defiend" ظاهر میشود، بیشتر در مواقعی که اگر یکی از کامپوننت های اضافه شده به reference برنامه یافت نشده باشند وی بی بدلیل خطای تشخیص در بررسی موجودیت این توابع با شکست مواجه شده و خطای یافت نشدن دستور را نمایش میدهد،
اگر کامپوننت گم شده در reference تعمیر شود خطای وی بی نیز خودبخود برطرف میشود

موفق باشید

nazanin_90
یک شنبه 20 آذر 1390, 11:00 صبح
سلام
از آنجایی که تابع split عضوی از کتابخانه VBA است و آفیس هم از VBA استفاده میکند، این تابع نیز در آفیس شناخته شده است
البته برخی مواقع با اینکه کتابخانه VBA بارگذاری شده است خطای "sub or function not defiend" ظاهر میشود، بیشتر در مواقعی که اگر یکی از کامپوننت های اضافه شده به reference برنامه یافت نشده باشند وی بی بدلیل خطای تشخیص در بررسی موجودیت این توابع با شکست مواجه شده و خطای یافت نشدن دستور را نمایش میدهد،
اگر کامپوننت گم شده در reference تعمیر شود خطای وی بی نیز خودبخود برطرف میشود


موفق باشید
با سلام
جناب واژدی عزیز راهنمائی نفرمودین چگونه از split در اکسل استفاده کنم . مثلاً وقتی در یک سل رشته ای مذکور وارد شده باشد با تایپ چه عبارتی نتیجه در سل دیگر مشخص میشود .
ضمناً اینکه من عرض کردم split در اکسل نیست بدین صورت امتحان کردم که وقتی در یک سل علامت = و حرف اول کلمه split بصورت s= وارد می کنیم کلمه فوق در لیست پائین افتادنی وجود ندارد و این کار را در کامپیوتر های مختلف تست کردم و در همه آنها نتیجه یکسان بود.
با تشکر

محسن واژدی
یک شنبه 20 آذر 1390, 12:46 عصر
سلام
اینکه این دستور در سلول excel شناخته شده نیست طبیعی است
توابع VBA در سلولهای excel قابل استفاده نیستند مگر انکه آنها را در VB-Editor بنویسیم، همانطور که اطلاع دارید تنها توابع داخلی excel در سلولها شناخته شده هستند
برای استفاده از تابع split بایستی آنرا در VB-Editor نوشته و به سلول مورد نظر مرتبط سازید

نمونه زیر را بررسی کنید

در اکسل 2003 اگر ماکروها غیرفعال هستند، سطح امنیتی را از بخش options بر روی Low تنظیم کنید

برای گشودن محیط VB-Editor کلیدهای Alt+F11 را فشار دهید

موفق باشید

nazanin_90
یک شنبه 20 آذر 1390, 14:53 عصر
با سلام
ممنونم از عنایت شما جناب محسن واژدی بزرگوار
اگر بخواهیم این حالت برای سطرهای پائین تر نیز اعمال کنیم چه تغییری باید در کدهای مربوطه داد ؟
ضمناً جناب واژدی ! با عنایت به اینکه در زمینه کد نویسی در اکسل هم اشراف دارید ممکن است از شما خواهش کنم به سوال دیگر بنده که در تاپیک جداگانه و تحت عنوان کد رنگی گردن داده های مشترک در دوستون اکسل مطرح کرده ام پاسخ بدهید ؟
باز هم ممنون

محسن واژدی
یک شنبه 20 آذر 1390, 21:40 عصر
.
.
.
اگر بخواهیم این حالت برای سطرهای پائین تر نیز اعمال کنیم چه تغییری باید در کدهای مربوطه داد ؟
.
.
.

سلام
همانطور که در پست قبل نیز عرض شد کلید های Alt+F11 را فشار دهید تا فرم VB-Editor گشوده شود ، زیر شاخه Sheet1را باز کنید و نام سلول ها را به سلول مورد نظر تغییر دهید

موفق باشید

nazanin_90
یک شنبه 20 آذر 1390, 22:41 عصر
سلام
همانطور که در پست قبل نیز عرض شد کلید های Alt+F11 را فشار دهید تا فرم VB-Editor گشوده شود ، زیر شاخه Sheet1را باز کنید و نام سلول ها را به سلول مورد نظر تغییر دهید

موفق باشید
سلام
منظورم از اعمال كد فوق براي سطرهاي پائين تر از سطر 2 اين است كه اگر مثلاً خانه A2تا A10 داراي همين رشته باشد و بطور همزمان عمل اسپليت رشته ها را براي تمام خانه ها اعمال كنيم در كد فوق چه تغييري بايد بدهيم ؟
با تشكر

محسن واژدی
یک شنبه 20 آذر 1390, 23:51 عصر
سلام
کد زیر را در ماژول Sheet1 جایگزین کنید، پس از آن محتویات ردیف های سه به بعد را همانند ردیف دو پر کنید تا نتیجه در مقابل آنها ظاهر شود:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo hEr
Dim txt$, sep$, aNum%
If Target.Row = 1 Then Exit Sub
iNum% = Target.Row
txt$ = Worksheets(1).Range("B" & iNum%).Value
sep$ = Worksheets(1).Range("C2").Value
aNum% = Val(Worksheets(1).Range("D" & iNum%).Value)
Worksheets(1).Range("C" & iNum%).Value = "---"
Worksheets(1).Range("E" & iNum%).Value = Split(txt$, sep$)(aNum%)
Worksheets(1).Range("E" & iNum%).Font.Bold = True
Worksheets(1).Range("E" & iNum%).Font.Color = RGB(108, 180, 48)
Exit Sub
hEr:

Worksheets(1).Range("E" & iNum%).Value = "#" & Err.Description & "#"
Worksheets(1).Range("E" & iNum%).Font.Bold = False
Worksheets(1).Range("E" & iNum%).Font.Color = vbRed
End Sub



موفق باشید

nazanin_90
دوشنبه 21 آذر 1390, 12:37 عصر
سلام
کد زیر را در ماژول Sheet1 جایگزین کنید، پس از آن محتویات ردیف های سه به بعد را همانند ردیف دو پر کنید تا نتیجه در مقابل آنها ظاهر شود:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo hEr
Dim txt$, sep$, aNum%
If Target.Row = 1 Then Exit Sub
iNum% = Target.Row
txt$ = Worksheets(1).Range("B" & iNum%).Value
sep$ = Worksheets(1).Range("C2").Value
aNum% = Val(Worksheets(1).Range("D" & iNum%).Value)
Worksheets(1).Range("C" & iNum%).Value = "---"
Worksheets(1).Range("E" & iNum%).Value = Split(txt$, sep$)(aNum%)
Worksheets(1).Range("E" & iNum%).Font.Bold = True
Worksheets(1).Range("E" & iNum%).Font.Color = RGB(108, 180, 48)
Exit Sub
hEr:

Worksheets(1).Range("E" & iNum%).Value = "#" & Err.Description & "#"
Worksheets(1).Range("E" & iNum%).Font.Bold = False
Worksheets(1).Range("E" & iNum%).Font.Color = vbRed
End Sub



موفق باشید
با سلام و تشکر فراوان
نمیدانم چرا از کد زیر خطای شماره 9 با مضمون subcript out of rangeمیگیرد


Worksheets(1).Range("E" & iNum%).Value = Split(txt$, sep$)(aNum%)

محسن واژدی
دوشنبه 21 آذر 1390, 12:57 عصر
سلام
اگر شماره index آرایه وارد شده بیشتر از طول آرایه موجود باشد این خطا ظاهر میشود، به عنوان مثال در نمونه زیر:

A$="A+B+C"

اگر بخواهیم آرایه ایی با ایندکس 4 را بدست آوریم با این خطا مواجه میشویم چون آرایه ای با این شماره وجود ندارد

موفق باشید

nazanin_90
سه شنبه 22 آذر 1390, 12:16 عصر
سلام
اگر شماره index آرایه وارد شده بیشتر از طول آرایه موجود باشد این خطا ظاهر میشود، به عنوان مثال در نمونه زیر:

A$="A+B+C"

اگر بخواهیم آرایه ایی با ایندکس 4 را بدست آوریم با این خطا مواجه میشویم چون آرایه ای با این شماره وجود ندارد

موفق باشید
با سلام
راهكار چيست كه خطاي فوق صادر نشود
ممنون

M.T.P
سه شنبه 22 آذر 1390, 14:41 عصر
با سلام
راهكار چيست كه خطاي فوق صادر نشود
ممنون

با UBound طول آرایه رو بدست بیارید. بیشتر از طولش بهش ایندکس ندید.

abch59
شنبه 17 دی 1390, 15:16 عصر
با سلام
با چه کدی میتوانیم عدد 56 را را که بین دو خط فاصله سمت چپ رشته 1-56-4578- 103 است جدا کنیم ؟
در ضمن تعداد ارقام عدد بین دو خط فاصله سمت چپ متغیر است و ممکن است سه رقمی یا .....رقمی باشد .
با تشکر

با سلام
یک دستور وجود داره که توی خود سلول اکسل نوشته میشه و شما میتونید توش بگید از یه سلول دیگه از مثلا 10 همین خونه بطول 3 خونه جدا کنه براتون دستور MID این هم نمونه دستورش (تابع)


80340