بارك الله فيكم جميعا
ولإثراء الموضوع وترتيب الكود وتنظيمه يمكننا استعمال هذه الدالة بعد التحسين
تم جعل الأسماء المركبة بدلالة الكلمة الأولى في مصفوفة منفصلة عن الأسماء المركبة بدلالة الكلمة الثانية
يمكن احضار الاسم الأول بتمرير رقم 1 في المعامل الثاني للدالة
ويمكن احضار اسم الاب برقم 2 أو بدون المعامل الثاني
Function SplitName(Name As String, Optional part As Integer = 2) As String
Dim K As String, S As String, N As Integer, M As Integer, FirstName As String
Dim startsNames As Variant, endsNames As Variant, sName As Variant
K = Trim(Name): M = Len(K): S = " "
' مصفوفة الأسماء المركبة التي تبدأ بكلمات معينة
startsNames = Array("عبد", "أبو", "ابو", "ام", "أم", "ذو", "امرؤ", "سيف", "زين", "روح", "عين")
' مصفوفة الأسماء المركبة التي تنتهي بكلمات معينة
endsNames = Array("الله", "الدين", "بالله", "الزهراء", "الهدى")
If InStr(1, K, S, 1) = 0 Then
SplitName = Name
Exit Function
End If
' التحقق من الأسماء المركبة التي تبدأ بكلمات معينة
For Each sName In startsNames
If Left(K, Len(sName) + 1) = sName & " " Then
FirstName = Left(K, InStr(Len(sName) + 2, K, S, 1) - 1)
SplitName = IIf(part = 1, FirstName, Mid(K, Len(FirstName) + 1, Len(K)))
Exit Function
End If
Next
' التحقق من الأسماء المركبة التي تنتهي بكلمات معينة
For Each sName In endsNames
If InStr(1, K, sName, vbTextCompare) > 0 Then
FirstName = Left(K, InStr(1, K, sName, vbTextCompare) + Len(sName) - 1)
SplitName = IIf(part = 1, FirstName, Mid(K, Len(FirstName) + 1, Len(K)))
Exit Function
End If
Next
' إذا لم يكن الاسم مركبًا، عرض الاسم الأول فقط
FirstName = Left(K, InStr(1, K, S, 1) - 1)
SplitName = IIf(part = 1, FirstName, Mid(K, Len(FirstName) + 1, Len(K)))
End Function
بالتوفيق