我需要一个公式来查找并返回字符串中的第一个字母。所以如果一个单元格包含:
1234(*&^%$23ADFG54
Run Code Online (Sandbox Code Playgroud)
该公式将返回:
A
Run Code Online (Sandbox Code Playgroud)
编辑#1:
我目前正在使用以下UDF:
Public Function FirstLetter(Sin As String) As String
Dim i As Long, CH As String
FirstLetter = ""
For i = 1 To Len(Sin)
If Mid(Sin, i, 1) Like "[A-Z]" Then
FirstLetter = Mid(Sin, i, 1)
Exit Function
End If
Next i
End Function
Run Code Online (Sandbox Code Playgroud)
但我需要一个非 VBA 解决方案。
小智 7
这可能不是最优雅,但它保持远离Ctrl+ Shift+ Enter。
=MIN(INDEX(ROW(INDIRECT("1:"&LEN(A1)))+((CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))<65)+(CODE(MID(UPPER(A1),ROW(INDIRECT("1:"&LEN(A1))),1))>90))*1E+99,,))
只是Enter正常。根据需要填写。请注意,这UPPER
使其不区分大小写。
这个怎么运作
ROW(1:50)
,如果我们知道字符串长度为 50 个字符,则将数字从 1 递增到 50。无法保证该字符串长度,因此我们必须使用 1 和LEN 函数构造行引用,然后使用INDIRECT 函数将该连接的字符串转换为可用的工作表单元格范围地址。ROW(1:<length-of-string>)
位置返回的数字乘以 1E+99(一个非常大的数字,而不是工作表上任何内容的最小值)。如果是内AZ,位置或ROW(1:<length-of-string>)
保持不变的值。INDEX
正在返回的数字阵列(又名位置),其中一些是在1E + 99范围内。该MIN函数取的最小的这些表示字符串中的第一个字母字符。值得指出的是,使用ROW
这样的方法来为数组处理提供递增的数字系列通常是通过将实际数字锁定为绝对值来关闭的,ROW($1:$50)
这样它们在填充时就不会改变。这在这里是不必要的,因为“1:”是文本,当复制/填充到另一个位置时不会改变。
归档时间: |
|
查看次数: |
21400 次 |
最近记录: |