Search code examples
excelvbadecodeconvertersmorse-code

Can I get help in making Visual Basic Excel macro for converting Morse code to English language and vice versa


I need help in making VB Excel macro that would take input from InputBox and convert it from English to Morse and vice versa, then show result in MessageBox. I've been stuck, and I've got no clue how could I make it. Thanks for help in advance <3


Solution

  • English to Morse Code

    • Although this is almost by default done with a Dictionary object, I stuck with the arrays as an interesting alternative.

    The Code

    Option Explicit
    
    Function getMorseCode( _
        ByVal s As String, _
        Optional ByVal CharDelimiter As String = " ", _
        Optional ByVal WordDelimiter As String = vbLf, _
        Optional ByVal NotFoundReplacement As String = "~") _
    As String
        
        Dim CharsList As String
        CharsList = _
            "a|b|c|d|e|f|g|h|i|j|" _
            & "k|l|m|n|o|p|q|r|s|t|" _
            & "u|v|w|x|y|z|" _
            & "0|1|2|3|4|5|6|7|8|9|" _
            & ".|,|?|:|/|""|'|;|!|" _
            & "(|)|&|=|+|-|_|$|@|" _
            & " "
        Dim CodesList As String
        CodesList = _
            ".-|-...|-.-.|-..|.|..-.|--.|....|..|.---|" _
            & "-.-|.-..|--|-.|---|.--.|--.-|.-.|...|-|" _
            & "..-|...-|.--|-..-|-.--|--..|" _
            & "-----|.----|..---|...--|....-|.....|-....|--...|---..|----.|" _
            & ".-.-.-|--..--|..--..|---...|-..-.|.-..-.|.----.|-.-.-.|-.-.--|" _
            & "-.--.|-.--.-|.-...|-...-|.-.-.|-....-|..--.-|...-..-|.--.-.|" _
            & WordDelimiter
        
        Dim Chars() As String: Chars = Split(CharsList, "|")
        'Debug.Print Join(Chars, vbLf)
        Dim Codes() As String: Codes = Split(CodesList, "|")
        'Debug.Print Join(Codes, vbLf)
    
        Dim CurrentMatch As Variant
        Dim n As Long
        Dim cChar As String
        Dim Result As String
        
        For n = 1 To Len(s)
            cChar = Mid(s, n, 1)
            CurrentMatch = Application.Match(cChar, Chars, 0)
            If IsNumeric(CurrentMatch) Then
                Result = Result & CharDelimiter & Codes(CurrentMatch - 1)
            Else
                Result = Result & CharDelimiter & NotFoundReplacement
            End If
        Next n
        ' Remove leading Char Delimiter.
        Result = Right(Result, Len(Result) - Len(CharDelimiter))
        ' Remove Char Delimiter following a Word Delimiter.
        getMorseCode = Replace(Result, WordDelimiter & CharDelimiter, WordDelimiter)
     
    End Function
    
    Sub TESTgetMorseCode()
        MsgBox getMorseCode("""The character '%' cannot be found!""")
        'Debug.Print getMorseCode("""The character '%' cannot be found!""")
    End Sub