البحث عن الأصناف في Excel باستخدام VBA: دليل شامل لإنشاء واجهة بحث متقدمة
في عالم إدارة البيانات والمخازن، تبرز الحاجة
إلى أدوات فعالة للبحث السريع عن الأصناف. يقدم هذا المقال دليلاً شاملاً لإنشاء
نظام بحث متكامل في Excel
باستخدام VBA، حيث يمكن للمستخدمين
إدخال اسم الصنف في صندوق نصي (TextBox)
ورؤية جميع النتائج المطابقة معروضة في قائمة (ListBox)
بشكل منظم.
لماذا نستخدم هذا النظام؟
1. توفير الوقت: البحث الفوري عبر آلاف الأصناف
في ثوانٍ
2. الدقة: تقليل الأخطاء
البشرية في البحث اليدوي
3. المرونة: البحث بأجزاء
من الاسم (مثل "20*30") دون الحاجة للمطابقة التامة
4. التكامل: العمل مباشرة
مع قاعدة البيانات الموجودة في Excel
المتطلبات الأساسية
( Microsoft Excel (2010
أو أحدث
تمكين وحدات الماكرو (Macros)
معرفة أساسية بواجهة VBA
(ستقدم الخطوات التفصيلية)
الخطوة
1: إنشاء واجهة المستخدم (UserForm)
1. افتح محرر VBA
بالضغط على `Alt+F11`
2. من القائمة اختر `Insert` > `UserForm`
3. سمِّ الفورم باسم
مناسب مثل `frmSearchProducts`
إضافة عناصر التحكم:
1. TextBox
(لإدخال نص البحث):
Name: `txtSearch`
PlaceholderText: "اكتب اسم الصنف
هنا..."
2. ListBox
(لعرض النتائج):
Name: `lstResults`
ColumnCount: 6 (أو حسب عدد أعمدة
بياناتك)
3. CommandButton
(زر البحث):
Name: `btnSearch`
Caption: "بحث"
الخطوة
2: كتابة كود VBA
الكود
الكامل للفورم:
()Private Sub UserForm_Initialize
' تهيئة الفورم عند التحميل
Me.Caption = "نظام البحث عن الأصناف"
txtSearch.SetFocus
' تهيئة ListBox
With lstResults
.ColumnCount = 6
.ColumnHeads = True
.ColumnWidths =
"50;150;80;60;80;80" ' اضبط حسب
احتياجاتك
End With
' تعيين حدث عند الضغط على Enter في TextBox
txtSearch.OnKeyPress = "[Event
Procedure]"
End Sub
()Private Sub btnSearch_Click
Call PerformSearch
End Sub
Private Sub
txtSearch_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' البحث عند الضغط على Enter
If KeyAscii = 13 Then
Call PerformSearch
End If
End Sub
()Private Sub PerformSearch
Dim ws As Worksheet
Dim searchTerm As String
Dim lastRow As Long, i As Long, j As Long
Dim resultCollection As Collection
Dim startTime As Double
' بدء حساب وقت التنفيذ
startTime = Timer
' تعيين ورقة البيانات (غير الاسم حسب حاجتك)
Set ws = ThisWorkbook.Sheets("بيانات الأصناف")
' الحصول على نص البحث
searchTerm = Trim(txtSearch.Text)
' التحقق من إدخال نص البحث
If searchTerm = "" Then
MsgBox "الرجاء إدخال اسم الصنف للبحث", vbExclamation,
"بيانات ناقصة"
Exit Sub
End If
' إعداد Collection لتخزين النتائج
Set resultCollection = New Collection
' العثور على آخر صف في العمود A
lastRow = ws.Cells(ws.Rows.Count,
"A").End(xlUp).Row
' مسح ListBox الحالي
lstResults.Clear
' إضافة عناوين الأعمدة
With ws
Dim headers As Variant
headers = Array(.Cells(1, 1).Value,
.Cells(1, 2).Value, .Cells(1, 3).Value, _
.Cells(1, 4).Value,
.Cells(1, 5).Value, .Cells(1, 6).Value)
lstResults.Column = headers
End With
' البحث في البيانات
For i = 2 To lastRow
If InStr(1, ws.Cells(i, 2).Value,
searchTerm, vbTextCompare) > 0 Then
Dim itemData(1 To 6) As Variant
For j = 1 To 6
itemData(j) = ws.Cells(i,
j).Value
Next j
resultCollection.Add itemData
End If
Next i
' عرض النتائج
If resultCollection.Count > 0 Then
Dim finalArray() As Variant
ReDim finalArray(1 To
resultCollection.Count, 1 To 6)
For i = 1 To resultCollection.Count
For j = 1 To 6
finalArray(i, j) = resultCollection(i)(j)
Next j
Next i
lstResults.List = finalArray
Else
MsgBox "لم يتم العثور على أصناف تطابق: " &
searchTerm, vbInformation, "لا توجد نتائج"
End If
' عرض وقت التنفيذ
Me.Caption = "نظام البحث عن الأصناف - تم العثور على " &
resultCollection.Count & _
" نتيجة في " & Format(Timer - startTime,
"0.00") & " ثانية"
End Sub
الخطوة 4: تشغيل النظام
أضف هذا الكود في وحدة عادية (Module) لتشغيل الفورم:
()Sub OpenSearchForm
frmSearchProducts.Show
End Sub
حل المشكلات الشائعة
1. خطأ "لا توجد
بيانات مطابقة":
تأكد
من تطابق أسماء الأعمدة في الكود مع ورقة العمل
تحقق
من وجود البيانات في الخلايا المستهدفة
2. أداء بطيء:
قلل
عدد الأعمدة المعروضة في ListBox
استخدم `Application.ScreenUpdating
= False` أثناء التنفيذ
3. خطأ في عرض النتائج:
تأكد
من تطابق `ColumnCount`
مع عدد الأعمدة الفعلي
تحقق
من أن `ColumnWidths`
مناسبة لعرض البيانات
وفى النهاية
يوفر هذا النظام حلًا متكاملاً للبحث عن
الأصناف في Excel، مع ميزات متقدمة مثل:
البحث بأجزاء من الاسم
عرض منظم للنتائج
وقت تنفيذ سريع
واجهة مستخدم سهلة
يمكنك تطوير النظام further
بإضافة:
تصفية النتائج حسب المقاس أو السعر
إمكانية تصدير النتائج إلى PDF أو Excel
ربط النظام بقاعدة بيانات خارجية
بهذا تكون قد أنشأت نظام بحث متكاملًا يلبي
احتياجات إدارة المخازن والبيانات بشكل فعال.
كلمات مفتاحية:
- Excel VBA
- نظام البحث عن الأصناف
- TextBox مع ListBox
- واجهة مستخدم VBA
- UserForm في Excel
- ReDim Preserve
- Collection في VBA
- InStr للبحث النصي
- Event Procedures
- تنفيذ الأوامر بالEnter
- بحث متقدم في Excel
- تصفية البيانات
- إدارة المخازن
- قوائم منتجات
- ربط TextBox مع ListBox
- كيفية إنشاء نظام بحث في Excel
- دليل شامل لVBA للمبتدئين
- حل مشكلة البحث عن الأصناف
- أفضل طرق عرض البيانات في VBA
- نظام إدارة مخازن بإكسل
- إصلاح خطأ ReDim Preserve
- تحسين أداء ListBox
- البحث غير الحساس لحروف كبيرة/صغيرة
- عرض نتائج متعددة الأعمدة
- تحديث البيانات تلقائياً
- إضافة أزرار متقدمة
- البحث أثناء الكتابة
- النقر المزدوك للتفاصيل
- تصدير النتائج لPDF
- ربط مع قواعد بيانات