Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

How to use m code with (Left(Right(.Range to extract data from a cell?

Hi All, 

I have a named range, that I would like to pull a partial text string from. 

The Cell A4 is:

Current Weeks : 'From: 2020 PD 09 WK 1 (33) to 2020 PD 09 WK 4 (36)`

 

I currently have:

let
    Source = Excel.CurrentWorkbook(){[Name="cellA4"]}[Content],
    #"Added Custom" = Table.AddColumn(Source, "Custom", each Text.Middle([Column1],29)),

 

But I've been Googling for 2 days.  I've tried to add 

text.length
text.end

and can't figure out how to take off the the apostrophe at the end.

 

Any advise?

  • Hi Anonymous 

    Please try this, I've tested it and it works on the string you provided.  What makes this tricky is that the last character in the string is not an apostrophe,it's a back tick `  The character under the tilde key which is at the top left of my keyboard.

     

     

    let
        Source = Excel.CurrentWorkbook(){[Name="cellA4"]}[Content],
        Substr = Table.AddColumn(Source, "Substring", each Text.Middle([Column1] ,  Text.PositionOf([Column1], ":", 1) + 1 , Text.PositionOf([Column1], "`")  - Text.PositionOf([Column1], ":", 1) - 1))
    in
        Substr

     

     

     Phil


    If I answered your question please mark my post as the solution.
    If my answer helped solve your problem, give it a kudos by clicking on the Thumbs Up.

10 Replies

  • Hi Anonymous 

    Please try this, I've tested it and it works on the string you provided.  What makes this tricky is that the last character in the string is not an apostrophe,it's a back tick `  The character under the tilde key which is at the top left of my keyboard.

     

     

    let
        Source = Excel.CurrentWorkbook(){[Name="cellA4"]}[Content],
        Substr = Table.AddColumn(Source, "Substring", each Text.Middle([Column1] ,  Text.PositionOf([Column1], ":", 1) + 1 , Text.PositionOf([Column1], "`")  - Text.PositionOf([Column1], ":", 1) - 1))
    in
        Substr

     

     

     Phil


    If I answered your question please mark my post as the solution.
    If my answer helped solve your problem, give it a kudos by clicking on the Thumbs Up.

  • camargos88's avatar
    camargos88
    Icon for Community Champion rankCommunity Champion

    Anonymous ,

     

    Try this code on Power Query with new column:

     

    Text.Middle([Column1], 1, Text.Length([Column1]) -2 )

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      camargos88 Unfortunately, The apostrophe is still there

       

      • camargos88's avatar
        camargos88
        Icon for Community Champion rankCommunity Champion

        Anonymous ,

         

        Can you show me the code for this new column ?

  • CNENFRNL's avatar
    CNENFRNL
    Icon for Community Champion rankCommunity Champion

    Anonymous , you may extract the substring this way,

    let
        Source = Excel.CurrentWorkbook(){[Name="cellA4"]}[Content],
        Added = Table.AddColumn(Source, "SubStr",
            each [
                    positions = Text.PositionOfAny([Column1], {"'", "`"}, Occurrence.All),
                    substr = Text.Range([Column1], positions{0}+1, positions{1}-positions{0}-1)
            ][substr]
        )
    in
        Added

    • Anonymous's avatar
      Anonymous
      Not applicable

      CNENFRNL 

      I copy and pasted your code, and the SubStr came almost perfect. However I don't want the "From:", Just the Date string.

      Should I replace the:

      positions = Text.PositionOfAny([Column1], {"'", "`"}, Occurrence.All),

      With

      positions = Text.PositionOfAny([Column1], {":", "`"}, Occurrence.All),

       

      Also, the results in the Custom Column, just say Table..?

    • CNENFRNL's avatar
      CNENFRNL
      Icon for Community Champion rankCommunity Champion

      Anonymous , based on your mockup data, it's easier to change

      substr = Text.Range([Column1], positions{0}+1, positions{1}-positions{0}-1)

      to

      substr = Text.Range([Column1], positions{0}+7, positions{1}-positions{0}-1)

      to get the desired substring.