با استفاده از lookup یا ... ، چطوری میشه چند ورودی تو یه سلول داشته باشیم و چند نتیجه تو یه سلول دیگه بدست بیاریم؟
Collapse
X
-
-
از کدهای زیر استفاده کنید ، اعداد فقط با ; از هم جدا بشن
کد PHP:
Option Explicit
Public Function lookupArray(arr As Variant, myrng As Range, mycol As Integer)
Dim intcoun As Integer
Dim arritem As Variant
Dim lookitem As Variant
For intcoun = 1 To (Len(arr) - Len(Application.WorksheetFunction.Substitute(arr, ";", "")) + 1)
arritem = piece(arr, ";", intcoun)
On Error GoTo Errhndler
arritem = Val(arritem)
lookitem = Application.WorksheetFunction.VLookup(arritem, myrng, mycol, 0)
Errhndler:
If Err.Number = 1004 Then
lookitem = ""
lookupArray = lookupArray & lookitem & ";"
Else
lookupArray = lookupArray & lookitem & ";"
End If
Next intcoun
End Function
Public Function piece(Searchstring As Variant, Separator As String, IndexNum As Integer) As String
Dim t
t = Split(Searchstring, Separator)
If UBound(t) > 0 Then piece = t(IndexNum - 1)
End Function
[CENTER]
[SIGPIC][/SIGPIC]
[/CENTER]کامنت
-
با درود
اقا کار جناب وطن پرست که درسته . من حرفی ندارم . یه نمونه فایل برام فرستادی . من یه نمونه کوچیک با فرمول برات نوشتم تا 10 رقم که گفتی . خودت ایده بگیر اگه خواستی استفاده کنفایل های پیوست شدهدر پناه خداوندگار ایران زمین باشید و پیروزکامنت
-
کامنت
-
از کدهای زیر استفاده کنید ، اعداد فقط با ; از هم جدا بشن
کد PHP:
Option Explicit
Public Function lookupArray(arr As Variant, myrng As Range, mycol As Integer)
Dim intcoun As Integer
Dim arritem As Variant
Dim lookitem As Variant
For intcoun = 1 To (Len(arr) - Len(Application.WorksheetFunction.Substitute(arr, ";", "")) + 1)
arritem = piece(arr, ";", intcoun)
On Error GoTo Errhndler
arritem = Val(arritem)
lookitem = Application.WorksheetFunction.VLookup(arritem, myrng, mycol, 0)
Errhndler:
If Err.Number = 1004 Then
lookitem = ""
lookupArray = lookupArray & lookitem & ";"
Else
lookupArray = lookupArray & lookitem & ";"
End If
Next intcoun
End Function
Public Function piece(Searchstring As Variant, Separator As String, IndexNum As Integer) As String
Dim t
t = Split(Searchstring, Separator)
If UBound(t) > 0 Then piece = t(IndexNum - 1)
End Function
روی فایل اصلیم تست کردم عالی عمل کرد
فقط با عرض معذرت یه چیز دیگه هم میخواستم بهش اضافه کنم:
در جلوی هر عددی که به عنوان ورودی انتخاب میکنیم بشه یک یا چند عدد رو درج کرد و با خط تیره از هم جدا بشن
مثلا :
یا
اگه اینم درست بشه عالی میشه
یه مثال دیگه میزنم:
فرض کنیم تو جدول اصلیمون معادل عدد 3 مقدار کفش هست.
طبق برنامه وقتی 3 رو وارد میکنیم معادلشو که کفش هست چاپ میکنه، این درست تا اینجا
حالا اگه بخوایم تو خروجی به جای کفش داشته باشیم : کفش002-001-005
قاعداً باید اینجوری تایپ کنیم: 3-002-001-005
یعنی بیاد معادل عدد 3 رو از جدول اصلی که همون کفش هست بکشه بیرون و اون سه عدد 002-001-005 رو هم بچسبونه به آخر کفش
در واقع ما جایی جدولی برای اون عددهای 002-001-005...... نداریم.:cool:کامنت
-
با درود
اره خوب به من گفتی 10 تا . اونم مشکلی نیست ولی خوب باید اعداد با یه چیز مشخص مثل اسپیس یا کاما از هم جدا بشن وگرنه که نمیشه. اینو به من نگفتیدر پناه خداوندگار ایران زمین باشید و پیروزکامنت
-
مورد رو بررسی کردم
بهتره اون فایلی که گفتم تهیه کنید و از این شیوه استفاده نکنید
چون محدودیت های زیادی به تابع اضافه میشه که با کوچکترین تغییر منجر به بروز خطا میشه
[CENTER]
[SIGPIC][/SIGPIC]
[/CENTER]کامنت
-
فایل زیر رو یه نگاه بنداز. از ترکیب توابع درست شده . تا 10 تا ترکیب عددی . یعنی همون عدد که با اسپیس جداشون کرده باشیم درست شدهفایل های پیوست شدهدر پناه خداوندگار ایران زمین باشید و پیروزکامنت
-
با درود
نمیدونم دوستمون به جواب رسیدن یا نه. اما خوب یکی از دوستای گلم بهم گفت که فرمول خیلی طولانی شده و دیدیم راست میگه . همونو تو فرمول تو حلقه نوشتمش با یه سری کارای دیگه واسه دوستمون. فقط باید یادش باشه که عدد ها رو با یدونه اسپیس از هم جدا کنه. هر چند تا عدد هم باشه مهم نیست اینبار . پویا کردنشم مثلا اگر بیش ازa10 میزارم بر عهده خودش . البته کاری نداره نمونه های زیاد تو سایت هست. فقط کافی عدد رو بنویسی و run کنه.
بازم از اینکه فرمول طولانی بود و غیره معذرت میخوامفایل های پیوست شدهدر پناه خداوندگار ایران زمین باشید و پیروزکامنت
-
با درود
نمیدونم دوستمون به جواب رسیدن یا نه. اما خوب یکی از دوستای گلم بهم گفت که فرمول خیلی طولانی شده و دیدیم راست میگه . همونو تو فرمول تو حلقه نوشتمش با یه سری کارای دیگه واسه دوستمون. فقط باید یادش باشه که عدد ها رو با یدونه اسپیس از هم جدا کنه. هر چند تا عدد هم باشه مهم نیست اینبار . پویا کردنشم مثلا اگر بیش ازa10 میزارم بر عهده خودش . البته کاری نداره نمونه های زیاد تو سایت هست. فقط کافی عدد رو بنویسی و run کنه.
بازم از اینکه فرمول طولانی بود و غیره معذرت میخوام
ممنون از زحماتتون
راستش با توجه به نیازم چون باید یه مقدار تغییرش بدم و آشنایی زیادی با کدها ندارم این روشتون برای من یه مقدار سخته!
ضمن اینکه توضیحات پست 22 هم میخواستم اعمال بشه
به هر صورت مرسی:cool:کامنت
-
ببخشید من یه هفته ای سر کار بودم و به نت دسترسی نداشتم! :22:
اون جدول عددهای سه رقمی رو تو یه شیت جدا قرار دادم:
حالا عملی کردن ِ توضیحاتی که تو پست شماره 22 دادم امکان پذیره؟
مثلا وقتی میزنیم:
2-004
نتیجه بده:
آهن-004
(معادل 2 رو از شیت table بخونه و معادل 004 رو از شیت number بخونه)
یا مثلا وقتی میزنیم:
2-584; 9-657-001
نتیجه بده:
آهن-584; قفل-657-001
(آهن و قفل رو از شیت table بخونه و عددهای 584 و 657 و 001 رو از شیت number بخونه)
مرسی :53::cool:کامنت
-
کد زیر رو امتحان کنید مشکل حل میشه
کد PHP:
Option Explicit
Public Function lookupArray(arr As Variant, myrng As Range, mycol As Integer)
Dim code1, code2
Dim intcoun As Integer
Dim arritem As Variant
Dim lookitem As Variant
For intcoun = 1 To (Len(arr) - Len(Application.WorksheetFunction.Substitute(arr, ";", "")) + 1)
arritem = piece(arr, ";", intcoun)
On Error GoTo Errhndler
If InStr(1, arritem, "-", vbTextCompare) <> 0 Then
code1 = Mid(arritem, 1, Application.WorksheetFunction.Find("-", arritem, 1) - 1)
code2 = Right(arritem, Len(arritem) - Len(code1))
Else
code1 = arritem
code2 = ""
End If
arritem = Val(code1)
lookitem = Application.WorksheetFunction.VLookup(arritem, myrng, mycol, 0)
lookitem = lookitem & code2
Errhndler:
If Err.Number = 1004 Then
lookitem = ""
lookupArray = lookupArray & lookitem & ";"
Else
lookupArray = lookupArray & lookitem & ";"
End If
Next intcoun
End Function
Public Function piece(Searchstring As Variant, Separator As String, IndexNum As Integer) As String
Dim t
t = Split(Searchstring, Separator)
If UBound(t) > 0 Then piece = t(IndexNum - 1)
End Function
[CENTER]
[SIGPIC][/SIGPIC]
[/CENTER]کامنت
-
کامنت
کامنت