דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תוכנה
  3. אקסס - קוד VBA לחיפוש והחלפה

אקסס - קוד VBA לחיפוש והחלפה

מתוזמן נעוץ נעול הועבר תוכנה
22 פוסטים 6 כותבים 647 צפיות 5 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD dovid

    @איש-פלוני בשאילתת עדכון אתה יכול לכתוב Replace. בקיצור זה פתרון מצויין,
    אבל כדאי שתביא דוגמת נתונים קטנה כדי שיהיה קל להסביר.

    א מנותק
    א מנותק
    איש פלוני
    כתב ב נערך לאחרונה על ידי איש פלוני
    #6

    @dovid
    יש לי טבלה בשם kategoryot בה יש IDkategoria (קוד קטגוריה), ו- name
    ככה: 2bc16079-40bf-47d6-a69e-b3d584c949ba-image.png
    יש לי טבלה נפרדת בשם katalogM שבה יוצא בשדה kategHeara ככה:
    54317581-43aa-4b80-b7bc-6aec4a6b0aa5-image.png
    אני רוצה שיחליף לי רק את המספרים, כל מספר לפי הקטגוריה השייכת אליו.
    תודה רבה!

    תגובה 1 תגובה אחרונה
    0
    • OdedDvirO OdedDvir

      @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

      Replace([SomeField],'1','א')
      

      או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:

      Replace([SomeField], MyTable.OldValue, MyTable.NewValue)
      
      א מנותק
      א מנותק
      איש פלוני
      כתב ב נערך לאחרונה על ידי
      #7

      @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

      או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:
      Replace([SomeField], MyTable.OldValue, MyTable.NewValue)

      יש אפשרות להגדיר לו לפי איזה סדר הוא יחליף?
      אחרת חוזרת הבעיה שכתבתי:

      @איש-פלוני אמר באקסס - קוד VBA לחיפוש והחלפה:

      אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יירד כלפי מטה.

      תגובה 1 תגובה אחרונה
      0
      • OdedDvirO OdedDvir

        @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

        Replace([SomeField],'1','א')
        

        או בשימוש עם טבלת עזר MyTable כמו שציין @avi-rz, ותשלוף את הערכים משם:

        Replace([SomeField], MyTable.OldValue, MyTable.NewValue)
        
        א מנותק
        א מנותק
        איש פלוני
        כתב ב נערך לאחרונה על ידי
        #8

        @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

        @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

        Replace([SomeField],'1','א')
        

        אני יכול להגדיר לו כמה נתונים להחלפה (דהיינו, Replace([SomeField],'1','א'), ו Replace([SomeField],'2','ב')) ? כשניסיתי לעשות שאילתה שבכל אחד מהשדות אותה פונקציה עם נתונים שונים זה מעלה לי הודעת שגיאה על כפילות ביעד הפלט.
        תודה רבה!

        dovidD תגובה 1 תגובה אחרונה
        0
        • א איש פלוני

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

          1. שהוא יעבוד דווקא על שדה מסויים בטבלה מסויימת.
          2. שהוא לא יעבוד אוטומטית אלא שאני אצטרך להריץ אותו. (עדיף שיהיה לי לחצן באיזשהו טופס, אבל אפשר גם דרך עורך הVBA)
          3. שהוא יחליף לפי סדר מסויים. (דהיינו אני רוצה שאת סדרת המספרים 1-20 הוא יחליף כל מספר לאות, 1-א, 2-ב וכן הלאה. אם הוא יתחיל מ-1 הוא יחליף לי את 11 ל-אא, לכן אני צריך שהוא יתחיל מ20 וירד כלפי מטה).
          4. אם יש אפשרות (לא חובה): שאת הנתונים מה להחליף הוא יקבל מטבלה אחרת בקובץ. דהיינו, אם יש לי טבלה כזו: 17cc1e7c-24e4-4f1d-bba6-5c937bb8833a-image.png שהקוד ידע שאת מה שבשדה הראשון להחליף במה שבשדה השני.

          אשמח לדעת אם יש אופציה כזו, ואיך.
          תודה רבה מאוד!

          OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          כתב ב נערך לאחרונה על ידי OdedDvir
          #9

          @איש-פלוני אני מציע לך דרך פשוטה יותר:
          א. צור טבלה להחלפה עם עמודות כדלקמן:

          OldValue NewValue
          1 א
          2 ב
          ...
          19 יט
          20 כ

          ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
          ג. קשר את הטבלאות על ידי השדות X-OldValue
          ד. תריץ שאילתת עדכון שתחליף בין הערך המספרי בשדה המקורי לערך NewValue:

          Replace([SomeField],OldValue, NewValue)
          
          א תגובה 1 תגובה אחרונה
          1
          • OdedDvirO OdedDvir

            @איש-פלוני אני מציע לך דרך פשוטה יותר:
            א. צור טבלה להחלפה עם עמודות כדלקמן:

            OldValue NewValue
            1 א
            2 ב
            ...
            19 יט
            20 כ

            ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
            ג. קשר את הטבלאות על ידי השדות X-OldValue
            ד. תריץ שאילתת עדכון שתחליף בין הערך המספרי בשדה המקורי לערך NewValue:

            Replace([SomeField],OldValue, NewValue)
            
            א מנותק
            א מנותק
            איש פלוני
            כתב ב נערך לאחרונה על ידי
            #10

            @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

            ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
            ג. קשר את הטבלאות על ידי השדות X-OldValue

            לא הבנתי מה אני צריך לעשות ואיך...
            השדה הנפרד הוא בטבלה נוספת? "השדה המקורי" הכוונה לטבלה החדשה שיצרתי עכשיו? איך עושים מניפולציה על המחרוזת?

            מלאמ תגובה 1 תגובה אחרונה
            0
            • א איש פלוני

              @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

              @איש-פלוני תוכל להשתמש בשאילתת עדכון ולשמור את הערך הקיים, פשוט תבצע Replace על הערך הקיים, כלומר למשל על השדה SomeField תעדכן ל:

              Replace([SomeField],'1','א')
              

              אני יכול להגדיר לו כמה נתונים להחלפה (דהיינו, Replace([SomeField],'1','א'), ו Replace([SomeField],'2','ב')) ? כשניסיתי לעשות שאילתה שבכל אחד מהשדות אותה פונקציה עם נתונים שונים זה מעלה לי הודעת שגיאה על כפילות ביעד הפלט.
              תודה רבה!

              dovidD מחובר
              dovidD מחובר
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #11

              @איש-פלוני ראשית כל אתה צריך להצליח לתשאל את הkatalogM באופן שמחלץ את המספר:

               SELECT Mid([kategHeara],1,InStr([kategHeara],".")-1) as מניפולציה, kategHeara
               FROM katalogM 
              

              תראה אם זה מוציא לך טוב את המספר.
              שלב שני זה לעשות מה ש@OdedDvir הציע.

              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              א תגובה 1 תגובה אחרונה
              1
              • dovidD dovid

                @איש-פלוני ראשית כל אתה צריך להצליח לתשאל את הkatalogM באופן שמחלץ את המספר:

                 SELECT Mid([kategHeara],1,InStr([kategHeara],".")-1) as מניפולציה, kategHeara
                 FROM katalogM 
                

                תראה אם זה מוציא לך טוב את המספר.
                שלב שני זה לעשות מה ש@OdedDvir הציע.

                א מנותק
                א מנותק
                איש פלוני
                כתב ב נערך לאחרונה על ידי איש פלוני
                #12

                @dovid לא עובד. (שגיאת תחביר אופרטור חסר בביטוי השאילתה).
                המילה מניפולציה באמצע? ככה?

                dovidD תגובה 1 תגובה אחרונה
                0
                • א איש פלוני

                  @dovid לא עובד. (שגיאת תחביר אופרטור חסר בביטוי השאילתה).
                  המילה מניפולציה באמצע? ככה?

                  dovidD מחובר
                  dovidD מחובר
                  dovid
                  ניהול
                  כתב ב נערך לאחרונה על ידי
                  #13

                  @איש-פלוני תואיל להדביק פה את לשון השאילתה אחרי השינויים שעשית.

                  • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                  • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                  א תגובה 1 תגובה אחרונה
                  0
                  • א איש פלוני

                    @odeddvir אמר באקסס - קוד VBA לחיפוש והחלפה:

                    ב. תבודד את המספר מהשדה המקורי אל שדה נפרד X על ידי מניפולציה על המחרוזת.
                    ג. קשר את הטבלאות על ידי השדות X-OldValue

                    לא הבנתי מה אני צריך לעשות ואיך...
                    השדה הנפרד הוא בטבלה נוספת? "השדה המקורי" הכוונה לטבלה החדשה שיצרתי עכשיו? איך עושים מניפולציה על המחרוזת?

                    מלאמ מנותק
                    מלאמ מנותק
                    מלא
                    כתב ב נערך לאחרונה על ידי מלא
                    #14

                    @איש-פלוני
                    או שתחלץ את המספר עם הפונקציה הזאת. (בהנחה שאין עוד מספרים בשדה)

                    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
                    תגובה 1 תגובה אחרונה
                    1
                    • dovidD dovid

                      @איש-פלוני תואיל להדביק פה את לשון השאילתה אחרי השינויים שעשית.

                      א מנותק
                      א מנותק
                      איש פלוני
                      כתב ב נערך לאחרונה על ידי
                      #15

                      @dovid העתקתי את מה שכתבת לתוך שאילתה בתצוגה של SQL וזהו...

                      OdedDvirO תגובה 1 תגובה אחרונה
                      0
                      • א איש פלוני

                        @dovid העתקתי את מה שכתבת לתוך שאילתה בתצוגה של SQL וזהו...

                        OdedDvirO מנותק
                        OdedDvirO מנותק
                        OdedDvir
                        כתב ב נערך לאחרונה על ידי OdedDvir
                        #16

                        @איש-פלוני חסר פרמטר אחד בקוד של @dovid , צ"ל:

                         SELECT Mid([kategHeara],1,InStr(1,[kategHeara],".")-1) as מניפולציה, kategHeara
                         FROM katalogM 
                        

                        (עריכה: מה שכתבתי לעיל שגוי, עיין בהערת @dovid לקמן)

                        dovidD תגובה 1 תגובה אחרונה
                        1
                        • OdedDvirO OdedDvir

                          @איש-פלוני חסר פרמטר אחד בקוד של @dovid , צ"ל:

                           SELECT Mid([kategHeara],1,InStr(1,[kategHeara],".")-1) as מניפולציה, kategHeara
                           FROM katalogM 
                          

                          (עריכה: מה שכתבתי לעיל שגוי, עיין בהערת @dovid לקמן)

                          dovidD מחובר
                          dovidD מחובר
                          dovid
                          ניהול
                          כתב ב נערך לאחרונה על ידי
                          #17

                          @odeddvir זה אופציונלי.

                          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                          OdedDvirO תגובה 1 תגובה אחרונה
                          1
                          • dovidD dovid

                            @odeddvir זה אופציונלי.

                            OdedDvirO מנותק
                            OdedDvirO מנותק
                            OdedDvir
                            כתב ב נערך לאחרונה על ידי
                            #18

                            @dovid אמר באקסס - קוד VBA לחיפוש והחלפה:

                            זה אופציונלי.

                            נכון, אבל צריך לכל הפחות להשמיט ולהשאיר מקום ריק, כך:

                            SELECT Mid([kategHeara],1,InStr(,[kategHeara],".")-1) as מניפולציה, kategHeara
                            FROM katalogM 
                            
                            dovidD תגובה 1 תגובה אחרונה
                            1
                            • OdedDvirO OdedDvir

                              @dovid אמר באקסס - קוד VBA לחיפוש והחלפה:

                              זה אופציונלי.

                              נכון, אבל צריך לכל הפחות להשמיט ולהשאיר מקום ריק, כך:

                              SELECT Mid([kategHeara],1,InStr(,[kategHeara],".")-1) as מניפולציה, kategHeara
                              FROM katalogM 
                              
                              dovidD מחובר
                              dovidD מחובר
                              dovid
                              ניהול
                              כתב ב נערך לאחרונה על ידי
                              #19

                              @odeddvir לא צריך, אופציונלי זה אומר שניתן פשוט לדלג עליו לגמרי.
                              הוא מזהה את הארגומנט נכון לפי מספר הארגומנטים (2).

                              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                              OdedDvirO תגובה 1 תגובה אחרונה
                              1
                              • A מנותק
                                A מנותק
                                avi rz
                                כתב ב נערך לאחרונה על ידי
                                #20

                                בס"ד
                                אולי יעזור לך:
                                הקוד להלן הוא ממיר מחזיר גימטריה ממספר לאותיות - ומאותיות למספר, זה נכון עד למספר 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)
                                
                                הללוהוה תגובה 1 תגובה אחרונה
                                1
                                • dovidD dovid

                                  @odeddvir לא צריך, אופציונלי זה אומר שניתן פשוט לדלג עליו לגמרי.
                                  הוא מזהה את הארגומנט נכון לפי מספר הארגומנטים (2).

                                  OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  כתב ב נערך לאחרונה על ידי OdedDvir
                                  #21

                                  @dovid אמר באקסס - קוד VBA לחיפוש והחלפה:

                                  לא צריך, אופציונלי זה אומר שניתן פשוט לדלג עליו לגמרי.
                                  הוא מזהה את הארגומנט נכון לפי מספר הארגומנטים (2).

                                  וואו, קודם כל אני מתפעל כי זה חידוש בשבילי!
                                  אני מניח שזה מתפרש נכון בגלל ששני הפרמטרים (השני והשלישי) הם נדרשים.
                                  אבל זה עדיין מרגיש לי כאילו יש כאן מקום לדו משמעות (Ambiguity). אני מנסה למצוא איזשהו תרחיש שבו הקומפיילר לא יפרש נכון את הארגומנטים לפי המספר שלהם.
                                  אולי אפתח פוסט חדש בשביל זה...

                                  תגובה 1 תגובה אחרונה
                                  2
                                  • A avi rz

                                    בס"ד
                                    אולי יעזור לך:
                                    הקוד להלן הוא ממיר מחזיר גימטריה ממספר לאותיות - ומאותיות למספר, זה נכון עד למספר 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)
                                    
                                    הללוהוה מנותק
                                    הללוהוה מנותק
                                    הללוהו
                                    כתב ב נערך לאחרונה על ידי
                                    #22
                                    פוסט זה נמחק!
                                    תגובה 1 תגובה אחרונה
                                    0
                                    תגובה
                                    • תגובה כנושא
                                    התחברו כדי לפרסם תגובה
                                    • מהישן לחדש
                                    • מהחדש לישן
                                    • הכי הרבה הצבעות


                                    • 1
                                    • 2
                                    בא תתחבר לדף היומי!
                                    • התחברות

                                    • אין לך חשבון עדיין? הרשמה

                                    • התחברו או הירשמו כדי לחפש.
                                    • פוסט ראשון
                                      פוסט אחרון
                                    0
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום