我无法从CSV中提取此文本,就像它看起来一样。在SO上发布了类似的问题,但它们不符合我的要求:
我想提取" 2017年1月31日"从这一行:
4,'31 January 2017','Funds Received/Credits',56,,401.45,
目前,VBA认为" 1月31日"没有一年。我尝试将.NumberFormat应用于单元格(一般,文本,日期)。
解决方案要求:
感谢您的想法
答案 0 :(得分:0)
您可以使用split函数,使用逗号作为分隔符,如下所示:
sResult = Split("4,'31 January 2017','Funds Received/Credits',56,,401.45, ", ",")(1)
如果你不想要单引号,那么添加如下的替换函数:
sResult = Replace(Split("4,'31 January 2017','Funds Received/Credits',56,,401.45, ", ",")(1), "'", "")
答案 1 :(得分:0)
如果包含“Microsoft VBScript Regular Expressions 5.5”参考,则可以设置一个模式,如果找到它,将提取整个日期。例如:
Dim tstring As String
Dim myregexp As RegExp
Dim StrMatch As Object
tstring = 'Line from the CSV, or entire CSV as one string
Set myregexp = New RegExp
myregexp.Pattern = "\d{1,2} [A-Z]{3,9} \d{4}"
Set StrMatch = myregexp.Execute(tstring)
您可以从此方法中获益,CSV中的所有日期将立即被拉出,比逐行拆分要快得多。此外,可以使用
访问日期DateStr = StrMatch.Item(index)
对于整个字符串行,或者可以设置子字符串以获取字符串的特定部分(例如月,日,年)。
myregexp.Pattern = "\(d{1,2}) ([A-Z]{3,9}) (\d{4})"
Set StrMatch = myregexp.Execute(tstring)
DateStr = StrMatch.Item(index1).SubMatches(index2)
它是一个非常强大的工具,带有一组简单的符号用于开发模式。我强烈建议你熟悉它来操纵大字符串。