אקסס - קוד VBA לחיפוש והחלפה
-
שלום וברכה,
אני צריך קוד VBA שיוכל לעשות באופן אוטומטי את הפעולה שעושה הלחצן של חיפוש והחלפה המובנה באופיס.
אבל, אני צריך:- שהוא יעבוד דווקא על שדה מסויים בטבלה מסויימת.
- שהוא לא יעבוד אוטומטית אלא שאני אצטרך להריץ אותו. (עדיף שיהיה לי לחצן באיזשהו טופס, אבל אפשר גם דרך עורך הVBA)
- שהוא יחליף לפי סדר מסויים. (דהיינו אני רוצה שאת סדרת המספרים 1-20 הוא יחליף כל מספר לאות, 1-א, 2-ב וכן הלאה. אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יתחיל מ20 וירד כלפי מטה).
- אם יש אפשרות (לא חובה): שאת הנתונים מה להחליף הוא יקבל מטבלה אחרת בקובץ. דהיינו, אם יש לי טבלה כזו: שהקוד ידע שאת מה שבשדה הראשון להחליף במה שבשדה השני.
אשמח לדעת אם יש אופציה כזו, ואיך.
תודה רבה מאוד! -
@איש-פלוני אמר באקסס - קוד VBA לחיפוש והחלפה:
הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יתחיל מ20 וירד כלפי מטה).
למה לא שאילתת עדכון? אתה מביא את 2 הטבלאות הנ"ל (1. הטבלה של המספרים והאותיות, 2. הטבלה שבה אתה רוצה להחליף)
מוסיף קריטריון שהמספר בטבלה שאתה רוצה להחליף = המספר בטבלה של האותיות, ומעדכן את המספר לאותית,
רק שים לב שכדאי שהכל יהיה בעיצוב של string - או שתשתמש בהחלפה ע"י Cstr() או Clng() -
@איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:
Replace([SomeField],'1','א')
או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:
Replace([SomeField], MyTable.OldValue, MyTable.NewValue)
-
@odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:
או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:
Replace([SomeField], MyTable.OldValue, MyTable.NewValue)יש אפשרות להגדיר לו לפי איזה סדר הוא יחליף?
אחרת חוזרת הבעיה שכתבתי:@איש-פלוני אמר באקסס - קוד VBA לחיפוש והחלפה:
אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יירד כלפי מטה.
-
@odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:
@איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:
Replace([SomeField],'1','א')
אני יכול להגדיר לו כמה נתונים להחלפה (דהיינו,
Replace([SomeField],'1','א')
, וReplace([SomeField],'2','ב')
) ? כשניסיתי לעשות שאילתה שבכל אחד מהשדות אותה פונקציה עם נתונים שונים זה מעלה לי הודעת שגיאה על כפילות ביעד הפלט.
תודה רבה! -
@איש-פלוני אני מציע לך דרך פשוטה יותר:
א. צור טבלה להחלפה עם עמודות כדלקמן:OldValue NewValue 1 א 2 ב ... 19 יט 20 כ ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
ג. קשר את הטבלאות על ידי השדות X-OldValue
ד. תריץ שאילתת עדכון שתחליף בין הערך המספרי בשדה המקורי לערך NewValue:Replace([SomeField],OldValue, NewValue)
-
@odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:
ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
ג. קשר את הטבלאות על ידי השדות X-OldValueלא הבנתי מה אני צריך לעשות ואיך...
השדה הנפרד הוא בטבלה נוספת? "השדה המקורי" הכוונה לטבלה החדשה שיצרתי עכשיו? איך עושים מניפולציה על המחרוזת? -
@איש-פלוני ראשית כל אתה צריך להצליח לתשאל את הkatalogM באופן שמחלץ את המספר:
SELECT Mid([kategHeara],1,InStr([kategHeara],".")-1) as מניפולציה, kategHeara FROM katalogM
תראה אם זה מוציא לך טוב את המספר.
שלב שני זה לעשות מה ש@OdedDvir הציע. -
@איש-פלוני
או שתחלץ את המספר עם הפונקציה הזאת. (בהנחה שאין עוד מספרים בשדה)Public Function GetNumerals(str As String) As String Dim i As Integer For i = 1 To Len(str) If IsNumeric(Mid(str, i, 1)) Then GetNumerals = GetNumerals & Mid(str, i, 1) End If Next i End Function
-
בס"ד
אולי יעזור לך:
הקוד להלן הוא ממיר מחזיר גימטריה ממספר לאותיות - ומאותיות למספר, זה נכון עד למספר 499 ו אותיות עד תצט,
אפשר להוסיף - זה פשוט קוד ישן שלי.Public Function GetGimatryya(str_ As Variant) As Long Dim i As Long Dim longht_ As Long Dim Y As Long Dim out As Long Dim str_to_out As String longht_ = Len(Nz(str_, "")) For i = 1 To longht_ str_to_out = Mid(str_, i, 1) Select Case str_to_out Case "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ", "ק", "ר", "ש", "ת", "ך", "ם", "ן", "ף": Y = Asc(str_to_out) - 223 Case Else Y = 0 End Select arr_ = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 20, 30, 40, 40, 50, 50, 60, 70, 80, 80, 90, 90, 100, 200, 300, 400) out = Nz(out, 0) + arr_(Y) Next i GetGimatryya = out End Function Public Function GetGimatryyaStr(str_ As Variant) As String Dim i As Long Dim longht_ As Long Dim Y As Long Dim out As String Dim str_to_out As Long longht_ = Len(Nz(str_, "")) arr_ = Array("", "א", "ב", "ג", "ד", "ה", "ו", "ז", "ח", "ט", "י", "י", "כ", "ל", "מ", "נ", "ס", "ע", "פ", "צ", "ק", "ק", "ר", "ש", "ת") For i = 1 To longht_ Select Case (longht_ + 1) - i Case 1: str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1))) out = Nz(out, 0) + arr_(str_to_out) Case 2: str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1))) out = Nz(out, 0) + arr_(str_to_out + 10) Case Else str_to_out = CLng(IIf(Nz(Mid(str_, i, 1), "") = "", 0, Mid(str_, i, 1))) out = Nz(out, 0) + arr_(str_to_out + 20) End Select Next i GetGimatryyaStr = out End Function
אפשר לנסות
Debug.Print GetGimatryya("רמח") Debug.Print GetGimatryyaStr(499)