我可以将一个字母视为一个整数,以获得一个单元格的转换总和吗?

时间:2015-06-18 05:49:52

标签: excel vba excel-vba

我正在处理电子表格,我希望能够按转换的单元格总和进行过滤。例如,我的手机有" 5B"我希望它评估为6.对于" 2GG"同样如此。评估为4和" RR"评估为2.任何字母等于1,除了" X"。如果单元格中有X,则应评估为" X"。我已经搜索了所有可以想到的方法,看看这是否可行,但我提出的大多数方法都是将格式化为文本的数字转换为格式化为数字的数字,这不是我的意思。寻找。我发现LOOKUP有一些很有前途的线索,但它们最终并不符合我的需求。任何帮助表示赞赏。我在Excel和VBA都缺乏经验。

2 个答案:

答案 0 :(得分:0)

试试这个。
注意:如果你有像“ab2fdd5”这样的字符串,结果将是不正确的。

以下是我的解决方案 我有以下屏幕截图的样本数据:
enter image description here
满足您的要求。创建以下宏。

Option Explicit
Dim MyWorkbook As Workbook
Dim MyWorksheet As Worksheet
Dim MyOutputWorksheet As Worksheet
Dim currentRow As Long
Dim SearchString As String
Dim SearchChar As String
Dim TestPos As Integer
Dim myStr As String

Sub StrNum()

Set MyWorkbook = Workbooks(ActiveWorkbook.Name)
Set MyWorksheet = MyWorkbook.Sheets("Sheet3")

myStr = onlyDigits("3d1fgd4g1dg5d9gdg")
SearchChar = "X"

For currentRow = 1 To MyWorksheet.Cells(Rows.Count, "A").End(xlUp).Row
    SearchString = MyWorksheet.Cells(currentRow, 1).Value
    TestPos = InStr(1, UCase(SearchString), "X")
    If TestPos > 0 Then
        MyWorksheet.Cells(currentRow, 2).Value = "X"
    Else
        myStr = onlyDigits(SearchString)
        If myStr = "" Then
        myStr = 0
        MyWorksheet.Cells(currentRow, 2).Value = CLng(myStr) + Len(SearchString)
        Else
        MyWorksheet.Cells(currentRow, 2).Value = CLng(myStr) + Len(SearchString) - 1
        End If

    End If
Next
End Sub

Function onlyDigits(s As String) As String
    ' Variables needed (remember to use "option explicit").   '
    Dim retval As String    ' This is the return string.      '
    Dim i As Integer        ' Counter for character position. '

    ' Initialise return string to empty                       '
    retval = ""

    ' For every character in input string, copy digits to     '
    '   return string.                                        '
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next

    ' Then return the return string.                          '
    onlyDigits = retval
End Function

输出屏幕:
Output

答案 1 :(得分:0)

这应该做你想做的事情,改变rng以查看你所关注的范围。

Sub Test()
Dim rng As Range
Dim c

With ActiveSheet
    Set rng = .Range(.Cells(1, 1), .Cells(5, 1))
End With

For Each c In rng.Cells
    c.Offset(0, 1) = CalculateValue(c.Value)
Next c
End Sub
Function CalculateValue(s As String)
Dim l: Dim tmp
Dim i As Integer

If InStr(1, s, "x", vbTextCompare) Then
    tmp = "x"
Else

    For i = 1 To Len(s)
        l = Mid(s, i, 1)
        If IsNumeric(l) = True Then
            tmp = tmp + l
        Else
            tmp = tmp + 1
        End If
    Next i
End If

CalculateValue = tmp
End Function