Mad*_*ddy 0 excel vba excel-formula
我在 Excel 的单列中有这样的文本
@22-atr$$1 AM**01-May-2015&&
$21-atr@10-Jan-2007*6 PM&
&&56-atr@11 PM$$8-Jan-2016*
**4 PM#68-atr@21-Mar-2022&&
Run Code Online (Sandbox Code Playgroud)
我能够使用提取月份=MID(A1,FIND("-",A1)+1,3)
公式的一种选择是使用新函数,目前可在 BETA 通道中供内部人员使用:
公式为B1:
=LET(A,TEXTSPLIT(A1,{"@","$","&","*","#"},,1),B,SORTBY(A,IFERROR(MATCH(RIGHT(A),{"r","M"},0),3)),C,HSTACK(TAKE(B,,2),TEXTSPLIT(TEXT(--INDEX(B,3),"YYYY-Mmm-D"),"-")),IFERROR(--C,C))
Run Code Online (Sandbox Code Playgroud)
这个想法是:
LET()through来存储变量;TEXTSPLIT()A 列中的值使用所有可用分隔符进入列并跳过结果数组中的空值;SORTBY()使用 得到的三个元素的最右边的字符MATCH()。将IFERROR()捕获数据字符串;HSTACK()第一列和第二列与格式化为第一个元素后分割第三个元素的结果进行比较YYYY-MMM-D;注意事项:
为了好玩,使用正则表达式的 UDF:
Public Function GetPart(inp As String, prt As Long) As Variant
Dim Pat As String
Select Case prt
Case 0
Pat = "(\d+-atr)"
Case 1
Pat = "(\d+\s*[AP]M)"
Case 2
Pat = "-(\d{4})"
Case 3
Pat = "-(\w+)-"
Case 4
Pat = "(\d+)-\w+-"
Case Else
Pat = ""
End Select
With CreateObject("vbscript.regexp")
.Pattern = ".*" & Pat & ".*"
GetPart = .Replace(inp, "$1")
End With
End Function
Run Code Online (Sandbox Code Playgroud)
通过 调用=GetPart(0,A1)。选项为 0-4,并按列标题的顺序排列。
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |