Looping through all characters in a cell

%3CLINGO-SUB%20id%3D%22lingo-sub-2055646%22%20slang%3D%22en-US%22%3ELooping%20through%20all%20characters%20in%20a%20cell%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2055646%22%20slang%3D%22en-US%22%3E%3CP%3EHi%2C%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EI%20have%20a%20situation%20where%20I%20want%20to%20loop%20through%20all%20characters%20in%20a%20cell%20and%20wanted%20to%20split%20the%20numeric%20and%20alphabets%20letters%20into%20separate%20column%20as%20given%20below%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CTABLE%20width%3D%22266%22%3E%3CTBODY%3E%3CTR%3E%3CTD%20width%3D%2289%22%3E%26nbsp%3B%3C%2FTD%3E%3CTD%20width%3D%2272%22%3ETEXT%20ONLY%3C%2FTD%3E%3CTD%20width%3D%22105%22%3ENUMBERS%20ONLY%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3EABC1234%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3EDEF2354GH%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3C%2FTR%3E%3CTR%3E%3CTD%3E1234KLM0253%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3CTD%3E%26nbsp%3B%3C%2FTD%3E%3C%2FTR%3E%3C%2FTBODY%3E%3C%2FTABLE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ECould%20you%20please%20help%20me%20to%20understand%20by%20how%20I%20can%20achieve%20the%20result%20by%20using%20loop%20in%20vba.%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThanks%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-2055646%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EMacros%20and%20VBA%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2056014%22%20slang%3D%22en-US%22%3ERe%3A%20Looping%20through%20all%20characters%20in%20a%20cell%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2056014%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F523429%22%20target%3D%22_blank%22%3E%40Roshan_K%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3EFor%20such%20sample%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22image.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F246050i492207B4C072435C%2Fimage-size%2Flarge%3Fv%3D1.0%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22image.png%22%20alt%3D%22image.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3Eit%20could%20be%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-excel%22%3E%3CCODE%3E%3DLET(txt%2C%20C4%2C%20n%2C%20SEQUENCE(LEN(txt))%2C%20sym%2C%20MID(txt%2Cn%2C1)%2C%20k%2C%20CODE(sym)%2C%20TEXTJOIN(%22%22%2C1%2CIF(%20(k%26gt%3B57)%2B(k%26lt%3B48)%2Csym%2C%22%22)%20))%0A%0Aand%0A%0A%3DLET(txt%2C%20C4%2C%20n%2C%20SEQUENCE(LEN(txt))%2C%20sym%2C%20MID(txt%2Cn%2C1)%2C%20k%2C%20CODE(sym)%2C%20TEXTJOIN(%22%22%2C1%2CIF(%20(k%26lt%3B58)*(k%26gt%3B47)%2Csym%2C%22%22)%20))%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2059474%22%20slang%3D%22en-US%22%3ERe%3A%20Looping%20through%20all%20characters%20in%20a%20cell%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2059474%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F521%22%20target%3D%22_blank%22%3E%40Sergei%20Baklan%3C%2FA%3E%26nbsp%3BThanks%20for%20your%20help%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EJust%20to%20let%20you%20know%20that%2C%20I%20was%20looking%20for%20the%20solution%20in%20VBA%20excel%20by%20using%20for%20loop%20function.%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2059589%22%20slang%3D%22en-US%22%3ERe%3A%20Looping%20through%20all%20characters%20in%20a%20cell%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2059589%22%20slang%3D%22en-US%22%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F523429%22%20target%3D%22_blank%22%3E%40Roshan_K%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EIf%20you%20are%20still%20interested%20in%20a%20vba%20approach%2C%20I%20believe%20this%20may%20help%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3EPublic%20Sub%20Macro1()%0A%20%20%20%20%20Dim%20cell%20As%20Range%0A%20%20%20%20%20Dim%20numbers%20As%20String%0A%20%20%20%20%20Dim%20letters%20As%20String%0A%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20On%20Error%20GoTo%20ErrHandler%0A%20%20%20%20%20%0A%20%20%20%20%20For%20Each%20cell%20In%20Selection.Cells%0A%20%20%20%20%20%20%20%20%20%20If%20SplitText(cell.Value%2C%20numbers%2C%20letters)%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cell(1%2C%202).Value%20%3D%20letters%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cell(1%2C%203).Value%20%3D%20numbers%0A%20%20%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20%20Next%20cell%0A%20%20%20%20%20%0AExitProc%3A%0A%20%20%20%20%20Exit%20Sub%0A%20%20%20%20%20%0AErrHandler%3A%0A%20%20%20%20%20MsgBox%20%22Error%20%22%20%26amp%3B%20Err.Number%20%26amp%3B%20%22%3A%20%22%20%26amp%3B%20Err.Description%0A%20%20%20%20%20Resume%20ExitProc%0A%20%20%20%20%20%0AEnd%20Sub%0A%0A%0A%0APrivate%20Function%20SplitText(ByVal%20textIn%20As%20String%2C%20Optional%20ByRef%20retNum%20As%20String%2C%20Optional%20ByRef%20retText%20As%20String)%20As%20Boolean%0A%20%20%20%20%20Dim%20i%20As%20Long%0A%20%20%20%20%20%0A%20%20%20%20%20On%20Error%20GoTo%20ErrHandler%0A%20%20%20%20%20%0A%20%20%20%20%20If%20Not%20IsMissing(retNum)%20Then%20retNum%20%3D%20vbNullString%0A%20%20%20%20%20If%20Not%20IsMissing(retText)%20Then%20retText%20%3D%20vbNullString%0A%20%20%20%20%20%0A%20%20%20%20%20For%20i%20%3D%201%20To%20Len(textIn)%0A%20%20%20%20%20%20%20%20%20%20If%20IsNumeric(Mid(textIn%2C%20i%2C%201))%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20If%20Not%20IsMissing(retNum)%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retNum%20%3D%20retNum%20%26amp%3B%20Mid(textIn%2C%20i%2C%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20%20%20%20%20%20%20Else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20If%20Not%20IsMissing(retText)%20Then%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20retText%20%3D%20retText%20%26amp%3B%20Mid(textIn%2C%20i%2C%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20%20%20%20%20%20%20End%20If%0A%20%20%20%20%20Next%20i%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%0A%20%20%20%20%20SplitText%20%3D%20True%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%0AExitProc%3A%0A%20%20%20%20%20Exit%20Function%0A%20%20%20%20%20%0AErrHandler%3A%0A%20%20%20%20%20SplitText%20%3D%20False%0A%20%20%20%20%20If%20Not%20IsMissing(retNum)%20Then%20retNum%20%3D%20vbNullString%0A%20%20%20%20%20If%20Not%20IsMissing(retText)%20Then%20retText%20%3D%20vbNullString%0A%20%20%20%20%20Resume%20ExitProc%0A%20%20%20%20%20%20%20%20%20%0AEnd%20Function%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E
Occasional Contributor

Hi,

 

I have a situation where I want to loop through all characters in a cell and wanted to split the numeric and alphabets letters into separate column as given below:

 

 TEXT ONLYNUMBERS ONLY
ABC1234  
DEF2354GH  
1234KLM0253  

 

Could you please help me to understand by how I can achieve the result by using loop in vba.

 

Thanks

3 Replies

@Roshan_K 

For such sample

image.png

it could be

=LET(txt, C4, n, SEQUENCE(LEN(txt)), sym, MID(txt,n,1), k, CODE(sym), TEXTJOIN("",1,IF( (k>57)+(k<48),sym,"") ))

and

=LET(txt, C4, n, SEQUENCE(LEN(txt)), sym, MID(txt,n,1), k, CODE(sym), TEXTJOIN("",1,IF( (k<58)*(k>47),sym,"") ))

@Sergei Baklan Thanks for your help

 

Just to let you know that, I was looking for the solution in VBA excel by using for loop function.

@Roshan_K 

 

If you are still interested in a vba approach, I believe this may help:

 

Public Sub Macro1()
     Dim cell As Range
     Dim numbers As String
     Dim letters As String
     
     
     On Error GoTo ErrHandler
     
     For Each cell In Selection.Cells
          If SplitText(cell.Value, numbers, letters) Then
               cell(1, 2).Value = letters
               cell(1, 3).Value = numbers
          End If
     Next cell
     
ExitProc:
     Exit Sub
     
ErrHandler:
     MsgBox "Error " & Err.Number & ": " & Err.Description
     Resume ExitProc
     
End Sub



Private Function SplitText(ByVal textIn As String, Optional ByRef retNum As String, Optional ByRef retText As String) As Boolean
     Dim i As Long
     
     On Error GoTo ErrHandler
     
     If Not IsMissing(retNum) Then retNum = vbNullString
     If Not IsMissing(retText) Then retText = vbNullString
     
     For i = 1 To Len(textIn)
          If IsNumeric(Mid(textIn, i, 1)) Then
               If Not IsMissing(retNum) Then
                    retNum = retNum & Mid(textIn, i, 1)
               End If
          Else
               If Not IsMissing(retText) Then
                    retText = retText & Mid(textIn, i, 1)
               End If
          End If
     Next i
          
     
     SplitText = True
          
     
ExitProc:
     Exit Function
     
ErrHandler:
     SplitText = False
     If Not IsMissing(retNum) Then retNum = vbNullString
     If Not IsMissing(retText) Then retText = vbNullString
     Resume ExitProc
         
End Function