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

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

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

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

מתוזמן נעוץ נעול הועבר תוכנה
22 פוסטים 6 כותבים 633 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    איש פלוני
    כתב ב נערך לאחרונה על ידי
    #1

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

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

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

    A OdedDvirO 2 תגובות תגובה אחרונה
    0
    • A מנותק
      A מנותק
      avi rz
      השיב לאיש פלוני ב נערך לאחרונה על ידי
      #2

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

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

      למה לא שאילתת עדכון? אתה מביא את 2 הטבלאות הנ"ל (1. הטבלה של המספרים והאותיות, 2. הטבלה שבה אתה רוצה להחליף)
      מוסיף קריטריון שהמספר בטבלה שאתה רוצה להחליף = המספר בטבלה של האותיות, ומעדכן את המספר לאותית,
      רק שים לב שכדאי שהכל יהיה בעיצוב של string - או שתשתמש בהחלפה ע"י Cstr() או Clng()

      א תגובה 1 תגובה אחרונה
      4
      • א מנותק
        א מנותק
        איש פלוני
        השיב לavi rz ב נערך לאחרונה על ידי
        #3

        @avi-rz כי עדכון יחליף לי את כל מה שבשדה. אני רוצה שאם בשדה כתוב 1 XXX זה יהפוך לא XXX ולא רק לא.

        OdedDvirO dovidD 2 תגובות תגובה אחרונה
        0
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          השיב לאיש פלוני ב נערך לאחרונה על ידי OdedDvir
          #4

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

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

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

          Replace([SomeField], MyTable.OldValue, MyTable.NewValue)
          
          א 2 תגובות תגובה אחרונה
          3
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            השיב לאיש פלוני ב נערך לאחרונה על ידי
            #5

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

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            א תגובה 1 תגובה אחרונה
            1
            • א מנותק
              א מנותק
              איש פלוני
              השיב לdovid ב נערך לאחרונה על ידי איש פלוני
              #6

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

              תגובה 1 תגובה אחרונה
              0
              • א מנותק
                א מנותק
                איש פלוני
                השיב לOdedDvir ב נערך לאחרונה על ידי
                #7

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

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

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

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

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

                תגובה 1 תגובה אחרונה
                0
                • א מנותק
                  א מנותק
                  איש פלוני
                  השיב לOdedDvir ב נערך לאחרונה על ידי
                  #8

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

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

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

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

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    השיב לאיש פלוני ב נערך לאחרונה על ידי OdedDvir
                    #9

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

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

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

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

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

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

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

                      מלאמ תגובה 1 תגובה אחרונה
                      0
                      • dovidD מנותק
                        dovidD מנותק
                        dovid ניהול
                        השיב לאיש פלוני ב נערך לאחרונה על ידי dovid
                        #11

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

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

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

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        א תגובה 1 תגובה אחרונה
                        1
                        • א מנותק
                          א מנותק
                          איש פלוני
                          השיב לdovid ב נערך לאחרונה על ידי איש פלוני
                          #12

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

                          dovidD תגובה 1 תגובה אחרונה
                          0
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            השיב לאיש פלוני ב נערך לאחרונה על ידי
                            #13

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

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            א תגובה 1 תגובה אחרונה
                            0
                            • מלאמ מנותק
                              מלאמ מנותק
                              מלא
                              השיב לאיש פלוני ב נערך לאחרונה על ידי מלא
                              #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
                              • א מנותק
                                א מנותק
                                איש פלוני
                                השיב לdovid ב נערך לאחרונה על ידי
                                #15

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

                                OdedDvirO תגובה 1 תגובה אחרונה
                                0
                                • OdedDvirO מנותק
                                  OdedDvirO מנותק
                                  OdedDvir
                                  השיב לאיש פלוני ב נערך לאחרונה על ידי OdedDvir
                                  #16

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

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

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

                                  dovidD תגובה 1 תגובה אחרונה
                                  1
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    השיב לOdedDvir ב נערך לאחרונה על ידי
                                    #17

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

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    OdedDvirO תגובה 1 תגובה אחרונה
                                    1
                                    • OdedDvirO מנותק
                                      OdedDvirO מנותק
                                      OdedDvir
                                      השיב לdovid ב נערך לאחרונה על ידי
                                      #18

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

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

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

                                      SELECT Mid([kategHeara],1,InStr(,[kategHeara],".")-1) as מניפולציה, kategHeara
                                      FROM katalogM 
                                      
                                      dovidD תגובה 1 תגובה אחרונה
                                      1
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        השיב לOdedDvir ב נערך לאחרונה על ידי
                                        #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

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

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

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