我有兴趣从列中出现的单元格中删除前导字母(alpha)字符。我只希望删除前导字母字符(包括UPPER和LOWER情况):如果字母字符出现在数字后面,则应保留它们。列中的某些单元格可能没有前导字母字符。
以下是我的例子:
36173
PIL51014
4UNV22001
ZEB54010
BICMPAFG11BK
BICMPF11
请注意,前导字母字符的数量并不总是相同。我不能简单地在Excel中使用左或右功能,因为我希望保留和删除的字符数会有所不同。
我正在寻找的正确输出如下:
36173
51014
4UNV22001
54010
11BK
11
注意第二行到最后一行如何保留字符“BK”,第三行保留“UNV”。我不能简单地删除所有字母字符。
我是Visual Basic的初学者,无法弄清楚如何使用excel函数来解决我的问题。我该怎么做?
答案 0 :(得分:3)
这是一个Excel公式,它将删除前导字母字符"实际上,它会查找第一个数字字符,然后返回所有内容:
select t1.function, avg(t1.salary)
from (select
rank() over(order by avg(salary) desc) rnk_high
,rank() over(order by avg(salary)) rnk_low
,function
from tablename
group by function) t
join tablename t1 on t.function = t1.function
where rnk_high = 1 or rnk_low = 1
group by t1.function
最后的=MID(A1,MIN(FIND({0;1;2;3;4;5;6;7;8;9},A1&"0123456789")),99)
需要比您可能正在处理的最长字符串长一些值。 99
通常有效。
答案 1 :(得分:3)
这是一个基于公式的解决方案,包含测试结果:
reduce(lambda (c,s), a: (c + [{'value':s+a['value'], 'date':a['date']}], s+a['value']), some_data,([],0))[0]
>>> [{'date': '2016-02-06', 'value': 2},
{'date': '2016-02-07', 'value': 3},
{'date': '2016-02-08', 'value': 8},
{'date': '2016-02-09', 'value': 11},
{'date': '2016-02-10', 'value': 12}]
如果任何字符串长度超过100个字符,请更改末尾的=MID(A1,MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"),255),100)
。另外255不需要,但它不会受到伤害。
答案 2 :(得分:2)
这个简短的UDF应该删除前导字母字符。
Function noLeadAlpha(str As String)
If Not IsNumeric(str) Then
Do While Asc(str) < 48 Or Asc(str) > 57
str = Mid(str, 2)
If Not CBool(Len(str)) Then Exit Do
Loop
End If
noLeadAlpha = str
End Function
答案 3 :(得分:0)
Koodos Jeeped,你打败了我。
但无论如何,这是另一种选择:
Function RemoveAlpha(aString As String) As String
For i = 1 To Len(aString)
Select Case Mid(aString, i, 1)
Case "0" To "9"
RemoveAlpha = Right(aString, Len(aString) - i + 1): Exit For
End Select
Next i
End Function