Excel转换包含范围的文本-数字到字母数字

时间:2018-06-26 21:00:57

标签: excel vba excel-vba

我想将一系列数字(和个位数)从仅数字格式转换为字母数字格式。整个语句位于单个excel单元格中,并且希望转换后的版本位于相邻的单元格中。

例如:

Assuming 1-24=B1-B24

Assuming 25-48=C1-C24

输入-

 screen 1-3,5,7-9,11-30,32-37,39-40,41,44-46

期望的输出(全部可接受)

   screen B1-B3,B5,B7-B9,B11-C6,C8-C13,C15-C16,C17,C20-C22

OR

 screen B1-B3,B5,B7-B9,B11-B24,C1-C6,C8-C13,C15-C16,C17,C20-C22

OR

 screen B1-B3,B5,B7-B9,B11-B24

   screen C1-C6,C8-C13,C15-C16,C17,C20-C22

事实证明,使用excel函数非常麻烦,因此excel宏会更好。我在寻找请求转换的示例,但没有找到任何内容。

非常感谢您的帮助。

干杯

鲍勃

1 个答案:

答案 0 :(得分:1)

嘿,这是我测试过的解决方案。不知道“ screen”是否需要在字符串中。让我知道,如果是这种情况,我会进行调整。

它是用户定义的功能。因此,将此vba放到模块中,然后转到工作表并键入“ = AlphaConvert(” +单元格引用。

这里的假设是一次只能引用一个单元格。

最后,可以轻松地将其转换为子例程,并且运行速度可能比该函数快一点。

Public Function AlphaConvert(TargetCell As Range)
    Dim v       As Long
    Dim vArr()  As String
    Dim i       As Long
    Dim iArr()  As String
    Dim a       As String

    vArr = Split(TargetCell.Value, ",")

    For v = LBound(vArr) To UBound(vArr)
        If InStr(vArr(v), "-") > 0 Then
            iArr = Split(vArr(v), "-")

            For i = LBound(iArr) To UBound(iArr)
                If i = LBound(iArr) Then
                    a = AlphaCode(iArr(i))
                Else
                    a = a & "-" & AlphaCode(iArr(i))
                End If
            Next i

            vArr(v) = a
        Else
            vArr(v) = AlphaCode(vArr(v))
        End If

        If v = LBound(vArr) Then
            AlphaConvert = vArr(v)
        Else
            AlphaConvert = AlphaConvert & "," & vArr(v)
        End If
    Next v
End Function

Private Function AlphaCode(Nbr As Variant)
    Select Case Nbr
        Case 1 To 24
            AlphaCode = "B" & Nbr
        Case Else
            AlphaCode = "C" & Nbr - 24
    End Select
End Function