excel - VBA - 从自由格式文本字符串中解析日期
问题描述
我正在尝试从填充有自由格式文本字符串的单元格中解析出干净的目标日期。
即:文本字符串:“ETA:11/22(春季 4.5)”或“ETA 10/30/2019 EOD”
如您所见,日期在字符串中的位置没有明确的标准,这使得 LEFT 或 RIGHT 公式无效。
我尝试利用我发现的 VBA 函数,它基本上根据字符串中的空格将字符串分解为多个部分;但是它一直没有工作。
Public Function GetDate(ResNotes As String) As Date
Dim TarDate As Variant
Dim part As Variant
TarDate = Split(ResNotes, " ")
For Each part In ResNotes
If IsDate(part) = True Then
GetDate = part
Exit Function
End If
Next
GetDate = "1/1/2001"
End Function
我将带有文本字符串的单元格称为“ResNotes”,是“Resolution Notes”的缩写,它是列的标题
“TarDate”是指我试图解析的“目标日期”
Excel 中自定义 GETDATE 函数的结果给了我一个#NAME?错误。
我希望结果会给我一些类似于“2019 年 10 月 30 日”的内容
解决方案
如果您正在获取,#NAME
则代码不会存储在通用模块中。它不应位于工作表模块或 ThisWorkbook 模块中。
代码中的错误也很少。拆分返回一个String
数组。TRUE/FALSE
并且由于IsDate 返回= True
不需要。
根据@MathieuGuindon,如果找到,我们可以将字符串更改为代码中的日期,否则返回错误。为此,我们需要允许 return 是一个变体。
Public Function GetDate(ResNotes As String)
Dim TarDate() As String
Dim part As Variant
TarDate = Split(ResNotes, " ")
For Each part In TarDate
If IsDate(part) Then
GetDate = CDate(part)
Exit Function
End If
Next
GetDate = "1/1/2001"
'Instead of a hard coded date, one can return an error, just use the next line instead
'GetDate =CVErr(xlErrValue)
End Function
推荐阅读
- php - 如何让 preg_replace 在所有 PHP 环境中工作?
- service-worker - 工作箱不会加载
- javascript - 带有自动完成功能的 jQuery 电子搜索
- python - 如何将我的 .PDF 中生成的二进制文本转换为字符串?
- python-3.x - Python函数 - 为什么它被调用两次?
- java - 如何从 ListView 中显示的 ArrayList 中的对象中获取值?
- php - DataTable 服务器端处理大数据响应失败,超过 2500 条记录
- awk - awk:当有空白列时,如何确保一致的列编号?
- javascript - Angular 4 - 选择用于枚举不工作的选择
- progressive-web-apps - 使用 localhost 在智能手机中安装 pwa