我正在处理电子表格,我希望能够按转换的单元格总和进行过滤。例如,我的手机有" 5B"我希望它评估为6.对于" 2GG"同样如此。评估为4和" RR"评估为2.任何字母等于1,除了" X"。如果单元格中有X,则应评估为" X"。我已经搜索了所有可以想到的方法,看看这是否可行,但我提出的大多数方法都是将格式化为文本的数字转换为格式化为数字的数字,这不是我的意思。寻找。我发现LOOKUP有一些很有前途的线索,但它们最终并不符合我的需求。任何帮助表示赞赏。我在Excel和VBA都缺乏经验。
答案 0 :(得分:0)
试试这个。
注意:如果你有像“ab2fdd5”这样的字符串,结果将是不正确的。
以下是我的解决方案
我有以下屏幕截图的样本数据:
满足您的要求。创建以下宏。
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
输出屏幕:
答案 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