如何将第一列中的内容拆分为以下 Excel 中的 3 列:
.plnt201218P52.5 PLNT 201218 P52.5
.cyh201106P8 CYH 201106 P8
.w201106P225 W 201106 P225
.w201106C226 W 201106 C226
Run Code Online (Sandbox Code Playgroud)
将其他人的建议结合成一个更完整的答案:
如果您的数据从 开始A1,您可以使用以下公式
B1: =UPPER(MID(A1,2,MIN(IFERROR(SEARCH({0,1,2,3,4,5,6,7,8,9},A1),LEN(A1)))-2))
C1:: =MID(A1,2+LEN(B1),6)
D1: =MID(A1,LEN(B1)+8,LEN(A1))
这假设以下都是正确的:
.选择要解析的单元格并运行这个简短的 VBA 宏:
Sub ParseWeirdData()
Dim cell As Range, v As String
Dim L As Long, i As Long, CH As String
For Each cell In Selection
v = Mid(cell.Value, 2)
L = Len(v)
For i = 1 To L
CH = Mid(v, i, 1)
If IsNumeric(CH) Then
Exit For
End If
Next i
cell.Offset(0, 1).Value = Mid(v, 1, i - 1)
cell.Offset(0, 2).Value = Mid(v, i, 6)
cell.Offset(0, 3).Value = Mid(v, i + 6, 99)
Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)
此代码假定解析中的第二项是六位数字。
这个怎么运作:
该代码查找第一个数字字符。
编辑#1:
避免 VBA 非常简单。关键思想是获取第一个数字的位置。. 在E1 中输入:
=MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1 & "0123456789",1))
Run Code Online (Sandbox Code Playgroud)
并向下复制(此“帮助器”列给出了第一个数字字符的位置)。
在B1 中输入:
=MID(A1,2,E1-2)
Run Code Online (Sandbox Code Playgroud)
并向下复制。在C1 中输入:
=MID(A1,E1,6)
Run Code Online (Sandbox Code Playgroud)
并向下复制。在D1 中输入:
=MID(A1,E1+6,99)
Run Code Online (Sandbox Code Playgroud)
并向下复制:
拥有E列数据使所有其他公式变得非常简单!
小智 0
您应该找到数字第一次出现的位置。然后使用 LEFT 获取第一部分,使用 MID 获取接下来的六位数字,使用 RIGHT 获取字符串的其余部分。您可能还需要 LEN 函数。
要获取 LibreOffice Calc 上第一个数字的位置,您需要在公式中启用正则表达式,然后使用=SEARCH("[0-9]";A1)
在 Excel 上使用类似=MIN(SEARCH({0,1,2,3,4,5,6,7,8,9},A1))
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |