求助开发可实现英文与莫尔斯码互转的VB Excel宏
可直接部署的Excel VBA双向莫尔斯转换宏
核心实现逻辑
- 内置完整的标准莫尔斯码映射字典,覆盖26个英文字母、10个阿拉伯数字、常见标点符号,支持双向查找
- 内置方向选择交互,无需单独编写两个独立转换宏
- 自动处理输入内容的大小写兼容、无效字符识别、间隔规则匹配
- 转换完成后通过MsgBox直接返回结果,匹配失败的字符会单独标注提示
完整可运行代码
Sub MorseConverter() ' 初始化莫尔斯码映射字典 Dim morseDict As Object Set morseDict = CreateObject("Scripting.Dictionary") morseDict.CompareMode = vbTextCompare ' 不区分大小写匹配 ' 填充英文字母映射 morseDict("A") = ".-" morseDict("B") = "-..." morseDict("C") = "-.-." morseDict("D") = "-.." morseDict("E") = "." morseDict("F") = "..-." morseDict("G") = "--." morseDict("H") = "...." morseDict("I") = ".." morseDict("J") = ".---" morseDict("K") = "-.-" morseDict("L") = ".-.." morseDict("M") = "--" morseDict("N") = "-." morseDict("O") = "---" morseDict("P") = ".--." morseDict("Q") = "--.-" morseDict("R") = ".-." morseDict("S") = "..." morseDict("T") = "-" morseDict("U") = "..-" morseDict("V") = "...-" morseDict("W") = ".--" morseDict("X") = "-..-" morseDict("Y") = "-.--" morseDict("Z") = "--.." ' 填充数字映射 morseDict("0") = "-----" morseDict("1") = ".----" morseDict("2") = "..---" morseDict("3") = "...--" morseDict("4") = "....-" morseDict("5") = "....." morseDict("6") = "-...." morseDict("7") = "--..." morseDict("8") = "---.." morseDict("9") = "----." ' 选择转换方向 Dim convertDir As VbMsgBoxResult convertDir = MsgBox("点击【是】:英文/数字 转 莫尔斯码" & vbCrLf & "点击【否】:莫尔斯码 转 英文/数字", vbYesNoCancel + vbQuestion, "选择转换方向") If convertDir = vbCancel Then Exit Sub ' 获取输入内容 Dim userInput As String If convertDir = vbYes Then userInput = InputBox("请输入需要转换为莫尔斯码的英文/数字内容:", "英文转莫尔斯输入") Else userInput = InputBox("请输入需要转换为英文的莫尔斯码,规则:" & vbCrLf & "1. 单个字符间用单个空格分隔" & vbCrLf & "2. 单词间用 / 分隔", "莫尔斯转英文输入") End If If Trim(userInput) = "" Then Exit Sub Dim resultStr As String resultStr = "" ' 执行英文转莫尔斯逻辑 If convertDir = vbYes Then Dim i As Long, curChar As String For i = 1 To Len(userInput) curChar = Mid(userInput, i, 1) If curChar = " " Then resultStr = resultStr & " / " ' 单词间隔转成斜杠标识 ElseIf morseDict.Exists(curChar) Then resultStr = resultStr & morseDict(curChar) & " " Else resultStr = resultStr & "[无效字符:" & curChar & "] " End If Next i resultStr = Trim(resultStr) Else ' 执行莫尔斯转英文逻辑 Dim wordArr As Variant, charArr As Variant, j As Long Dim matchFlag As Boolean wordArr = Split(userInput, "/") ' 先拆分单词 For i = 0 To UBound(wordArr) charArr = Split(Trim(wordArr(i)), " ") ' 拆分单词内的单个莫尔斯字符 For j = 0 To UBound(charArr) If charArr(j) <> "" Then matchFlag = False ' 反向查找字典匹配 Dim dictKey As Variant For Each dictKey In morseDict.Keys If morseDict(dictKey) = charArr(j) Then resultStr = resultStr & dictKey matchFlag = True Exit For End If Next dictKey ' 没匹配到就标无效 If Not matchFlag Then resultStr = resultStr & "[无效码:" & charArr(j) & "]" End If End If Next j resultStr = resultStr & " " Next i resultStr = Trim(resultStr) End If ' 弹出结果 MsgBox "转换结果:" & vbCrLf & vbCrLf & resultStr, vbInformation, "转换完成" End Sub
快速使用步骤
- 打开目标Excel文件,按下
Alt+F11调出VBA编辑器 - 在左侧工程栏右键点击当前工作簿,依次选择「插入」→「模块」
- 将上述代码完整粘贴到右侧模块编辑区
- 按下
F5即可运行宏,按照弹窗指引完成转换操作
内容的提问来源于stack exchange,提问作者Saša Bugarin
相关产品推荐
相关产品推荐

