Need an Excel VBA fomula to modify string by adding number to each ASCII character.

Kevin
Kevin used Ask the Experts™
on
I need some VBA code to modify strings based on using a character from a modifying word.  My source strings would be in column A and I would put the formula in each cell to the right of each string, in column B.

What I would like the formula to do is:
1.  Modify every ASCII character in the source string by
2. Using a "modifier" word inside the formula (let's say HELLO for now), change each character in the source word by converting it to a number (using CODE function), adding the CODE number of the letter in the "modifier" word that corresponds to the ROW of the source word.
3. Taking that new number and converting back to a character using CHAR.

For example if the word in Row 1 was "pasta", then I would use the code for "H", since "H" is the number 1 letter in my modifier word.  So...

p would convert to the number 112,
formula would add 72 to that (CODE FOR "H") to get 184
CHAR would convert 184 to ,

then
a would convert to the number 97,
formula would once again add 72 to that (CODE FOR "H") to get 169
CHAR would convert 169 to ©

and so forth, so that the formula that I place in Cell B1 would convert

pasta  (in cell A1) to

¸©»¼©

similarly (in this example) the word in cell A2 would be converted by using the letter "E" which is the second letter (cause it is in row 2)

so if the same word pasta were in row 2, (and I did it right) it would convert to

µ¦¸¹¦

My modifier word will have 13 letters and my list of strings will go up to row 13.

This is not for a practical application, other than a fun project that I am working on.  Fairly urgent and many thanks if someone can put this together :)
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Hi

Try this UDF

Option Explicit

Const MODIFIERSTRING    As String = "HELLO"

Function MODIFIER(InputValue, ByVal ModifierIndex As Long) As String
    
    If TypeOf InputValue Is Range Then InputValue = InputValue.Value2
    
    Dim i   As Long, b() As Byte, m() As Byte, v As Long
    
    b = StrConv(InputValue, vbFromUnicode)
    m = StrConv(MODIFIERSTRING, vbFromUnicode)
    v = m(ModifierIndex - 1)
    
    For i = LBound(b) To UBound(b)
        MODIFIER = MODIFIER & Chr(b(i) + v)
    Next
    
End Function

Open in new window


And try in B1 and copied down,

=MODIFIER(A1,ROWS(B$1:B1))

Kris
Top Expert 2016
Commented:
HI,

with Application.Caller you do not need ModifierIndex

Const MODIFIERSTRING As String = "Hello"

Function MODIFIER(InputValue As String) As String
 
   
    Dim i As Long, b() As Byte, v As Long
    
    b = StrConv(InputValue, vbFromUnicode)
    v = Asc(Mid(MODIFIERSTRING, Application.Caller.Row, 1))
    
    For i = LBound(b) To UBound(b)
        MODIFIER = MODIFIER & Chr(b(i) + v)
    Next
    
End Function

Open in new window

Regards
I would still keep the ModifierIndex as application.caller  restricts the user to enter the formula beyond the row 5 (in this case).

Kris

Author

Commented:
Thanks to both.  I preferred Rgonzo's solution, and also appreciate the fact that krishnkrkc added the ModifierIndex as a restriction (which is something new that I learned).

I am very excited to "code" my list and tempt someone to decode it.  Should be fun.
The code is originally written by me, not Rgonzo.

Kris

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial