ExcelVBA实战:轻松批量获取日期数据

数据我来大话侃 2024-10-08 21:48:33

Excel VBA绝对算得上是数据清洗领域的超级工具箱,无论是错误的数据格式、缺失值、重复记录……此类问题不但消耗了我们弥足珍贵的时间,且极有可能误导我们的决策,得出错误的结论,令数据分析之途荆棘丛生,从而产生各种各样的问题。

但是,有了Excel VBA能够灵动应对各类自定义的数据清洗需求,使你的数据脱胎换骨,重获生机,比如下面有一组数据,需要提取每一行的日期数据,对于没有规律的文本数据提取日期数据,用Excel是比较难的,需要写自定义的函数方式去提取,VBA正好可以写代码,用代码满足自定义的需求。

下面我使用VBA语言来提取这一组文本数据中的日期数据,在Excel选项栏中点击Visual Basic选项,Excel默认是没有开发工具这个功能选项的,需要在自定义功能区中勾选,详细步骤见我之前写的内容。

打开Visual Basic编辑器,右键VBAProject选项,插入一个模块。

在代码编辑区域写好VBA,用于提取日期数据。

这里使用VBA提取日期数据,使用的是正则表达式的方法,用于解析文本数据中的日期数据,代码部分有难度的话,可以直接复制粘贴使用,重要的是掌握这种方法。

Function ExtractAndFormatDate(inputText As String) As String Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") With regEx .Pattern = "(\d{4}-\d{2}-\d{2})" ' 匹配YYYY-MM-DD格式的日期 .Global = False ' 不需要全局匹配 End With Dim matches As Object ' 使用Object类型来接收匹配结果 Set matches = regEx.Execute(inputText) If matches.Count > 0 Then ' 提取第一个匹配项 Dim datePart As String datePart = matches(0).Value ' 创建一个仅包含日期的Date类型变量 Dim newDate As Date newDate = DateValue(datePart) ' 使用DateValue来确保只解析日期部分 ' 格式化日期为仅包含年月日的字符串 ExtractAndFormatDate = Format(newDate, "yyyy-mm-dd") Else ExtractAndFormatDate = "日期格式无法识别" End If Set regEx = Nothing Set matches = Nothing ' 释放对象End Function Sub ExtractDatesToNewColumn() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' 设置为你的工作表名称 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 假设日期在A列 Dim i As Long For i = 1 To lastRow Dim inputText As String inputText = ws.Cells(i, 1).Value ' 从A列读取数据 Dim formattedDate As String formattedDate = ExtractAndFormatDate(inputText) ws.Cells(i, 2).Value = formattedDate ' 将格式化后的日期放在B列 Next iEnd Sub

VBA代码写好之后,点击运行按钮,即可一键运行出结果。

如下标记的地方即为提取后的日期数据,可以看到使用VBA可以很便捷地提取对应数据。

如果要保存VBA,可以将文件保存为宏文件,具体做法是在文件选项里面点击另存为,保存类型这里选择Excel启用宏的工作簿(*.xlsm),这样可以方便VBA的保存。

在实际数据清洗时,存在脏数据,或者是自定义的数据清洗需求,这个时候使用VBA再适合不过。VBA凭借其强大的灵活性和自定义能力,成为了数据清洗领域的佼佼者。它不仅能够高效地处理各种脏数据,还能根据我们的实际需求进行个性化的数据清洗操作,让数据质量得到显著提升。

通过学习VBA,你将不再被繁琐的数据清洗工作所束缚,而是能够轻松驾驭数据,挖掘出更深层次的洞察。无论你是数据分析新手还是资深专家,掌握VBA都将为你的职业发展增添一份不可多得的竞争力。

0 阅读:33