Results 1 to 10 of 112

Thread: Notes tests, string, manipulation of text files and string manipulations

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #21
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    10,457
    Rep Power
    10
    Code:
    '  https://eileenslounge.com/viewtopic.php?f=30&t=39654
    Sub EvaluateVBAStringConversionConfusions()
    Rem 0 some initial  investigating into what we can and we cannot get away with in terms of having the final Excel spreadsheet form slightly different to the actual required one. Specifically we are looking at the effects of extra spaces in the Excel spreadsheet form. This is because the VBA string code line differs in some places to the Excel spreadsheet form in that it has some extra spaces.
    Dim EsVBA As String, EsExcel As String
     Let EsVBA = "((7 > 5) And (10 < 15)) Or (Not (20 = 30))"
     Let EsExcel = "OR(AND(7>5,10<15),NOT(20=30))"
    Dim Res As Variant: Let Res = Evaluate(EsExcel)   '   Wahr  - OK
     Let EsExcel = "OR(AND(  7 >  5,10<15)  ,NOT(  20 =  30))"
     Let Res = Evaluate(EsExcel)                      '   Wahr  - OK
     Let EsExcel = "OR(AND(  7 >  5,10<15)  ,AND(NOT(  20 =  30)))"
     Let Res = Evaluate(EsExcel)                      '   Wahr  - OK
     
     Let EsExcel = "OR(AND (7>5,10<15),NOT(20=30))"
     Let Res = Evaluate(EsExcel)                      '  Error    .....   we need to get rid of spacers after expressions as Excel does not like those
    
    Rem 1 we need to get rid of spacers after expressions as Excel does not seem to like those
    Dim EsVBAinExcel As String
     Let EsVBAinExcel = Replace(EsVBA, "Or ", "OR", 1, -1, vbTextCompare) ' Note - TextCompare is important to make it not case sensitive
     Let EsVBAinExcel = Replace(EsVBAinExcel, "NOT ", "NOT", 1, -1, vbTextCompare)
     Let EsVBAinExcel = Replace(EsVBAinExcel, "and ", "AND", , , vbTextCompare)
    ' Or
     Let EsVBAinExcel = Replace(Replace(Replace(EsVBA, "Or ", "OR", , , vbTextCompare), "NOT ", "NOT", , , vbTextCompare), "and ", "AND", , , vbTextCompare)
    
    Rem 2 Do the  Or   conversion
    Dim SptOr() As String
     Let SptOr() = Split(EsVBAinExcel, "OR", -1, vbBinaryCompare)
    ' Or
     Let SptOr() = Split(EsVBAinExcel, "OR")  '    Binary compare is excact and it is default
    
    '2a) Convert  And s  in each  Or
    Dim OrbIt As Variant, CntOr As Long: Let CntOr = -1                              '  -1  allows us to tart at the indicie of zero when we increase by 1 at the start of each loop
        For Each OrbIt In SptOr()
         Let CntOr = CntOr + 1
        Dim SptAnd() As String
         Let SptAnd() = Split(OrbIt, "AND")
        Dim AndIt As Variant, strAnds As String, CntAnd As Long: Let CntAnd = -1     '  -1  allows us to tart at the indicie of zero when we increase by 1 at the start of each loop
             For Each AndIt In SptAnd()
              Let strAnds = strAnds & AndIt & ","
             Next AndIt
         Let strAnds = Left(strAnds, (Len(strAnds) - 1)) '  take off last comma
         Let strAnds = "AND" & strAnds
         Let SptOr(CntOr) = strAnds ' Change the OrbIt to the form that will work in Excel spreadsheet
         Let strAnds = "" '   Empty  strAnds  so that I can use the variable again in the next loop
        Next OrbIt
    '    '2b) ' build up the final or
     Let EsVBAinExcel = Join(SptOr(), ",")
     Let EsVBAinExcel = "OR(" & EsVBAinExcel & ")"
    ' At this point we have                       OR(AND((7 > 5) ,(10 < 15)) ,AND(NOT(20 = 30)))
    ' , which is close enought to what we want      OR(AND (7>5,10<15),NOT(20=30))
    Rem 3
     Debug.Print EsVBAinExcel
     Let Res = Evaluate(EsVBAinExcel)
    End Sub
    
    
    Sub FuncIt()
    Dim Es As String: Let Es = "((7 > 5) And (10 < 15)) Or (Not (20 = 30))"   '    Yasser's example
    Debug.Print VBAMathStringToSpreadsheetString(Es)                          '    OR(AND((7 > 5) ,(10 < 15)) ,AND(NOT(20 = 30)))
    Debug.Print Evaluate(VBAMathStringToSpreadsheetString(Es))                '    True
    End Sub
    
    '  https://eileenslounge.com/viewtopic.php?f=30&t=39654
    Function VBAMathStringToSpreadsheetString(ByVal EsVBA As String) As String
     Let EsVBA = Replace(Replace(Replace(EsVBA, "Or ", "OR", , , vbTextCompare), "NOT ", "NOT", , , vbTextCompare), "and ", "AND", , , vbTextCompare)
    Dim SptOr() As String
     Let SptOr() = Split(EsVBA, "OR")
    Dim OrbIt As Variant, CntOr As Long: Let CntOr = -1
        For Each OrbIt In SptOr()
         Let CntOr = CntOr + 1
        Dim AndIt As Variant, strAnds As String, CntAnd As Long: Let CntAnd = -1
             For Each AndIt In Split(OrbIt, "AND")
              Let strAnds = strAnds & AndIt & ","
             Next AndIt
         Let SptOr(CntOr) = "AND" & Left(strAnds, (Len(strAnds) - 1))
         Let strAnds = "" '
        Next OrbIt
     Let VBAMathStringToSpreadsheetString = "OR(" & Join(SptOr(), ",") & ")"
    End Function

    https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA
    https://www.youtube.com/watch?v=jTmVtPHtiTg&lc=Ugy_RiNN_kAqUvZ8W994AaABAg
    https://www.youtube.com/watch?v=QjEWAJ3d-jw&lc=UgxJLVpwY8fIla7G-pN4AaABAg.9BLeCWVhxdG9wgNsaS3Lp1
    https://www.youtube.com/watch?v=QjEWAJ3d-jw&lc=UgxJLVpwY8fIla7G-pN4AaABAg.9BLeCWVhxdG9wgR1EPUkhw
    https://www.youtube.com/watch?v=QjEWAJ3d-jw&lc=UgxJLVpwY8fIla7G-pN4AaABAg.9BLeCWVhxdG9wgNe_XC-jK
    https://www.youtube.com/watch?v=QjEWAJ3d-jw&lc=UgxJLVpwY8fIla7G-pN4AaABAg.9BLeCWVhxdG9wgNPOdiDuv
    https://www.youtube.com/watch?v=QjEWAJ3d-jw&lc=UgxJLVpwY8fIla7G-pN4AaABAg.9BLeCWVhxdG9wgN7AC7wAc
    https://www.youtube.com/watch?v=bs-urI_o8jo&lc=UgyBACXgNY4j_cHgH5J4AaABAg.9oTkVdzfqfm9wlhQrYJP 3M
    https://www.youtube.com/watch?v=bs-urI_o8jo&lc=UgxYgiEZuS9I3xkjJv54AaABAg
    https://www.youtube.com/watch?v=DVFFApHzYVk&lc=Ugyi578yhj9zShmhuPl4AaABAg
    https://www.youtube.com/watch?v=GqzeFYWjTxI&lc=UgxvxlnuTRWiV6MUZB14AaABAg
    https://www.youtube.com/watch?v=_8i1fVEi5WY&lc=Ugz0ptwE5J-2CpX4Lzh4AaABAg
    https://www.youtube.com/watch?v=0ltJS7uHfK4&lc=UgxoHAw8RwR7VmyVBUt4AaABAg.9C-br0lEl8V9xI0_6pCaR9
    https://www.youtube.com/watch?v=0ltJS7uHfK4&lc=Ugz5DDCMqmHLeEjUU8t4AaABAg.9bl7m03Onql9xI-ar3Z0ME
    https://www.youtube.com/watch?v=0ltJS7uHfK4&lc=UgxYnpd9leriPmc8rPd4AaABAg.9gdrYDocLIm9xI-2ZpVF-q
    https://www.youtube.com/watch?v=0ltJS7uHfK4&lc=UgyjoPLjNeIAOMVH_u94AaABAg.9id_Q3FO8Lp9xHyeYSuv 1I
    https://www.reddit.com/r/windowsxp/comments/pexq9q/comment/k81ybvj/?utm_source=reddit&utm_medium=web2x&context=3
    https://www.youtube.com/watch?v=bs-urI_o8jo&lc=UgxYgiEZuS9I3xkjJv54AaABAg
    https://www.youtube.com/watch?v=bs-urI_o8jo&lc=UgyBACXgNY4j_cHgH5J4AaABAg.9oTkVdzfqfm9wlhQrYJP 3M
    ttps://www.youtube.com/watch?v=LP9fz2DCMBE
    https://www.youtube.com/watch?v=LP9fz2DCMBE&lc=UgzbPgJUMCztIOQDym14AaABAg
    https://www.youtube.com/watch?v=LP9fz2DCMBE&lc=UgzbPgJUMCztIOQDym14AaABAg.9wdo_rWgxSH9wdpcYqrv p8
    ttps://www.youtube.com/watch?v=bFxnXH4-L1A
    https://www.youtube.com/watch?v=bFxnXH4-L1A&lc=UgxuODisjo6cvom7O-B4AaABAg.9w_AeS3JiK09wdi2XviwLG
    https://www.youtube.com/watch?v=bFxnXH4-L1A&lc=UgxBU39bTptFznDC1PJ4AaABAg
    ttps://www.youtube.com/watch?v=GqzeFYWjTxI
    https://www.youtube.com/watch?v=GqzeFYWjTxI&lc=UgwJnJDJ5JT8hFvibt14AaABAg
    https://www.youtube.com/channel/UCnxwq2aGJRbjOo_MO54oaHA
    Last edited by DocAElstein; 11-30-2023 at 03:07 PM.

Similar Threads

  1. Replies: 116
    Last Post: 02-23-2025, 12:13 AM
  2. Replies: 4
    Last Post: 10-02-2022, 09:18 PM
  3. Replies: 4
    Last Post: 01-30-2022, 04:05 PM
  4. Replies: 0
    Last Post: 07-08-2020, 04:29 PM
  5. string manipulation
    By kylefoley76 in forum Excel Help
    Replies: 5
    Last Post: 02-20-2014, 12:10 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •