通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值
在日常录入EXCEL表格的单元格里 ,我们输入一些一般性的日期内容,如:2017-10-17 或 2017/10/17时,EXCEL会自动识别为日期并按单元格设计格式显示,单元格中存储的值也是日期格式的值。
但我们进行不规范的日期输入时,如在单元格中输入:2017.10.10或2017。10。10或20171010时,EXCEL不会自动识别这些内容为日期,而只会识别为字符串(文本),且在单元格中存储的也只是文本而已。
我们通过编写VBA代码可以轻松解决此问题,让EXCEL完美识别输入的任何日期内容,不管是20171010或2017.10.10还是201711或20170101或2017131都可被正确识别,而且是直接将单元格中存储的值转换为日期值,不仅仅是显示格式的转换。
闲话不说,直接让VBA代码:
(要录入VBA代码,必须通过EXCEL进入VBA编辑器,这部分内容可搜索下)
'以下代码都要放到一个sheet的类模块之中
Dim nDate
Private Sub Worksheet_Activate()'加载sheet的事件
nDate = InputBox("请确定此工作表中第几列为日期型的数据!", "输入数字", "")
If nDate = "" Then
nDate = 2 '--只操作指定的列号的列,目前只操作B列(第2列)
Else
nDate = Val(nDate)
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)'--sheet中任何地方发生数据改变时触发的事件
If nDate = Then Exit Sub
If Target.Cells.Column = nDate Then '--如果是第二列才检验文本为日期
Target.Value = TryChangeDate2(Target.Value)
End If
End Sub
Public Function TryChangeDate2(ByVal strDATEcome As String) As Variant
On Error GoTo TryChangeDate2ERR
Dim strDATE As String
strDATE = Trim(strDATEcome)
Dim myDate As Date
Dim strK As String
strK = mTrim(strDATEcome)
Dim k As Integer, nkkkk As Integer
k = -
k0:
k =
myDate = DateValue(strDATE)
myDate = Format(myDate, "yyyy/m/d")
TryChangeDate2 = myDate
Exit Function
k1:
k =
myDate = DateValue(strDATE)
myDate = Format(myDate, "yyyy/m/d")
TryChangeDate2 = myDate
Exit Function
TryChangeDate2ERR:
Err.Clear
If k = Then
nkkkk = Len(strK)
Select Case nkkkk
Case
If InStr(, strK, ".") = And InStr(, strK, ",") = And InStr(, strK, "/") = And InStr(, strK, "\") = And InStr(, strK, "-") = Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
Case
If InStr(, strK, ".") = And InStr(, strK, ",") = And InStr(, strK, "/") = And InStr(, strK, "\") = And InStr(, strK, "-") = Then
If Val(Mid(strK, , )) >= Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
End If
Case
If InStr(, strK, ".") = And InStr(, strK, ",") = And InStr(, strK, "/") = And InStr(, strK, "\") = And InStr(, strK, "-") = Then
If Left(strK, ) = "" Or Left(strK, ) = "" Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
GoTo theEnd
End If
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Case
If InStr(, strK, ".") = And InStr(, strK, ",") = And InStr(, strK, "/") = And InStr(, strK, "\") = And InStr(, strK, "-") = Then
If Val(Mid(strK, , )) >= Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
Else
If Val(Mid(strK, , )) >= Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
End If
Case
If InStr(, strK, ".") = And InStr(, strK, ",") = And InStr(, strK, "/") = And InStr(, strK, "\") = And InStr(, strK, "-") = Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
Case
If Val(Mid(strK, , )) >= Then
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
Else
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End If
Case
strDATE = Left(strK, ) & "/" & Mid(strK, , ) & "/" & Mid(strK, , )
End Select
theEnd:
GoTo k1
End If
TryChangeDate2 = strDATEcome
End Function Public Function mTrim(ByVal strCome As String) As String
'--此函数的作用是去掉字符串中间的空格
On Error GoTo mTrimErr
Dim i As Integer, j As Integer
Dim strLS As String, k As String * , strResult As String
strLS = Trim(strCome)
strResult = ""
j = Len(strLS)
For i = To j
k = Mid(strLS, i, )
If k <> " " And k <> " " And VarType(k) <> vbNull And k <> vbNullString Then
strResult = strResult & k
End If
Next
mTrim = strResult
Exit Function
mTrimErr:
Err.Clear
mTrim = strCome
End Function '---以上代码可实现在EXCEL指定列(上面指定为B列)中录入日期内容时,任意可识别的日期都会被自动转换成标准日期值,并以日期值存储在单元格中
'---欢迎大家批评指正,如果发现错误,欢迎指正,如有不明子的地方,欢迎交流
'--QQ: 578652607
通过VBA,当在EXCEL单元格中输入任意的日期格式时,都能自动转换为指定的标准格式的日期值的更多相关文章
- 在一个Excel单元格内输入多行内容
有时候,我们想在一个Excel单元格中输入多行内容,可以根据不同情况选择下面的方法来实现: 方法一:如果有大量的单元格需要这样做,采取此种设置格式的方法,选中需要这种格式的单元格,执行“格式→单元格” ...
- 如何在excel单元格中插入图片批注
在excel单元格中插入图片批注的方法: 1.选定要插入图片的单元格,然后右键选择插入批注. 2.然后会插入一个批注框,为了不影响图片效果,可以将批注文字都删除.然后鼠标移动到批注框边角再右键. 3. ...
- excel单元格中批量加入固定字符
excel单元格前怎么批量加字母 现在我要在联系人这列,每个姓名前加入衡阳的首字母简写(HY). 3 在同行上面随便找列,我找D列.输入公式:="HY"&A2. 5 输入后 ...
- POI如何自动调整Excel单元格中字体的大小
问题 目的是要将Excel中的文字全部显示出来,可以设置对齐格式为[缩小字体填充],但是这样的话只能展示出一行数据,字体会变得很小.还有一种办法,设置对齐格式为[自动换行],然后让单元格中的字体自动调 ...
- Java 在Excel单元格中应用一种/多种字体样式
在Excel表格中,设置单元格字体样式时,可以对单元格内的所有字符应用同一样式,即获取指定单元,应用样式即可:另外也可以对单元格内的不同字符内容应用不同字体样式,即获取单元格中的字符位置,应用样式:本 ...
- C#/VB.NET 在Excel单元格中应用多种字体格式
在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符.如果需要对单元格中某些字符设置样式,则可以参考本文中的方法. ...
- 在excel单元格中提取信息
平时在excel中处理数据的时候,肯定会遇到在单元格提取信息的情况,比如在地址中提取省.市.地区等,如果数据源内容规整的话,可以直接使用left().right().mid()等函数直接提取,但是大多 ...
- 实现Excel单元格中的下拉选项
目的:控制数据录入的类型和具体数据的限制,避免数据错误输入 操作步骤: 1.选中需要设置下拉菜单的单元格 2.单击数据选项卡---数据有效性---设置选项卡---允许功能中选择序列---在来源编辑框中 ...
- python实现处理excel单元格中的数据
实现代码如下: # 将数据单元格(格式为:参数名=值)里的数据以键值对的形式放入字典中,返回该字典 class get_string: def cut_string(self,string): # 将 ...
随机推荐
- JavaScript 中运算优先级问题
优先级引发的问题 这篇文章对 JavaScript 中的运算符进行小结,很多人对运算符优先级这一知识点都是一带而过.这就导致在写一些比较奇葩的 js 代码,你并不知道它的输出是啥,下面举一个例子,这也 ...
- 团队作业4——第一次项目冲刺 SiStH DaY
项目冲刺--??? 你以为penta kill以后就没事了嘛,就没得写了吗?你还期待我会给你一个六杀?七杀?别逗了,你以为你玩三国杀呢,做项目这么严肃的事情,怎么能玩笑. 那么我就在这里明明白白地告诉 ...
- 【Beta阶段】第五次scrum meeting
Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 查阅换肤功能相关资料 100% 着手联网功能 100 DEV 完成分享邀请 ...
- 201521123068 《java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 泛型,即参数化类型,不考虑类型参数的继承关系,getClass方法的返 ...
- 201521123110 《JAVA程序设计》第3周学习总结
1.本章学习总结 ` ` 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123093 java 第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...
- 201521123017 《Java程序设计》第14周学习总结
1. 本周学习总结 2. 书面作业 Q1.MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...
- Java课程设计 猜数游戏个人博客
1.团队课程设计博客链接 http://www.cnblogs.com/tt1104/p/7064349.html 2.个人负责模块或任务说明 1.成绩排行榜算法的设计: 2.排行榜存放到文件中, 3 ...
- php数据库连接及简单操作
数据库改密码:mysql的控制台mysql console 中文乱码解决方法:原因编码格式不一致1.建立数据库的时候,字符集选择utf-82.修改mysql的配置:在[mysqld]模块下面添加cha ...
- 软件测试的cookie测试
1.什么是cooike测试 Cookie是指网站用于辨别身份,进行会话(session)跟踪而存储在客户端的数据.它是有服务器产生并发送给客户端的.其用途是提供一个方便的功能以简化用户输入,节省访问页 ...