[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 393
  • Last Modified:

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

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 :)
0
Kevin
Asked:
Kevin
  • 3
2 Solutions
 
krishnakrkcCommented:
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
0
 
Rgonzo1971Commented:
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
0
 
krishnakrkcCommented:
I would still keep the ModifierIndex as application.caller  restricts the user to enter the formula beyond the row 5 (in this case).

Kris
0
 
KevinAuthor 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.
0
 
krishnakrkcCommented:
The code is originally written by me, not Rgonzo.

Kris
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now