הפיכת טקסט בעברית ללא הפיכת מספרים

יחיאב

New member
הפיכת טקסט בעברית ללא הפיכת מספרים

אני מכיר את הפונקציה המובנית StrReverse שבאמצעותה אני יכול להפוך את הטקסט שנמצא בשדה מ"םולש" ל"לשלום", למשל.
Function RVRS(str)
RVRS = StrReverse(str)
End Function
האם אני יכול לעשות שימוש בפונקציה זו או בדרך אחרת כך שההיפוך של הטקסט שבשדה יבוצע רק על אותיות בעברית?
כך למשל שאם בשדה שלי יש שם ומספר טלפון, ההיפוך יבוצע רק על השם:
"השמ 123456" יהפוך ל"משה 123456" ולא ל"משה 654321".
 

u333

New member
אפשרות אחת - להשתמש ב-UDF המצורף

UDF - פונקציה מותאמת אישית. פועלת רק על אותיות עבריות.
הכנס את הקוד למודול רגיל.
הערה: ניתן, על אותו עיקרון, להכין מקרו שיתן את התוצאה באותה עמודה. אפשר גם להרחיב את המקרו שיפעל על טווח שלם שנבחר מראש.
קוד:
Public Function HebStrRev(rng As Range)
 On Error Resume Next
     mystr = Application.Trim(rng.Value)
     For n = Len(mystr) To 1 Step -1
       MidStr = Mid(mystr, n, 1)
       i = 0
      If Asc(MidStr) <= 122 And Asc(MidStr) >= 47 Then
        While Asc(Mid(mystr, n - i, 1)) <= 122 And Asc(Mid(mystr, n - i, 1)) >= 47
           i = i + 1
           If i = n Then GoTo NN
        Wend
NN:     n = n - i + 1
         Tmp = Tmp + Mid(Application.Trim(rng), n, i)
      ElseIf Asc(MidStr) <= 122 And Asc(MidStr) >= 65 Then
          Else: Tmp = Tmp + MidStr
      End If
     Next
   HebStrRev = Tmp
End Function
 

יחיאב

New member
תודה, אבל זה לא פועל רק על אותיות בעברית.

כך למשל כשכתוב:
[email protected] 03-123456 :סקפלט
זה הופך את הטקסט כך:
טלפקס: 123456-03 il.co.domain@abc

כלומר, הוא לא נוגע רק בעברית.
 

u333

New member
נסה לתקן בקוד את התיקון הבא

בשורה הבאה:
While Asc(Mid(mystr, n - i, 1)) <= 122 And Asc(Mid(mystr, n - i, 1)) >= 47
החלף את ה- 47 שבסופה ב- 41 כך שהשורה תראה ככה:
While Asc(Mid(mystr, n - i, 1)) <= 122 And Asc(Mid(mystr, n - i, 1)) >= 41
האם כעת עונה על הדרישה ?
 

יחיאב

New member
תודה רבה!

עשה את העבודה. תודה רבה.
יצוין שיש עוד בעיה קטנה:
':לט
הופך ל:
טל:'
במקום ל:
טל':
גם בזה אפשר לטפל מן הסתם, אבל הטרחה לא שווה אז זה. זה מסוג הדברים הנסבלים.
אני מודה לך מאוד שוב.
 
למעלה