ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1139|回复: 9

[求助] 多种日期格式混杂(含文本),如何整理为统一的日期格式?5楼遇到新问题,再次求教

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-11 12:32 | 显示全部楼层 |阅读模式
本帖最后由 phezzan 于 2019-6-12 14:58 编辑

谢谢大家。我在5楼遇到了新问题,再次求教,请大家不吝赐教
---------------------
收集统计表,回收后发现各种日期格式都有。

最常见的是
文本格式的yyyymmdd  hh:mm:ss
文本格式 yyyy-mm-dd
文本格式 yyyymmdd
文本格式 yyyy-m-d
日期时间格式yyyymmdd  hh:mm:ss  ,yyyymmdd ,yyyy-m-d

目前想把所有格式都统一为 日期时间格式 yyyy-mm-dd 或yyyymmdd

单纯使用 format(cells(1,1)),“0000-00-00”  函数,文本格式的 日期无法正确更改为时间格式。

使用format(left(cells(1,1),8),“0000-00-00”),则部分位数不足8位的文本格式 以及所有的日期格式的日期都会乱。

所以想请教应该如何统一转换日期格式?






日期转换.rar

7.86 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2019-6-11 12:57 | 显示全部楼层
做几个条件判断,分别处理。
最好在下发表格时把数据有效性设好,免得产生这种脏数据。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-11 13:02 | 显示全部楼层
PQ大法不错

日期转换.rar

16.14 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-11 13:34 | 显示全部楼层
本帖最后由 Lonzo丶 于 2019-6-11 13:42 编辑

按空格分列后输出日期格式
Capture2.JPG
Capture.JPG

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-12 07:27 | 显示全部楼层
谢谢楼上几位赐教。
我用isdate 写了个判断

  1. For i = 2 To 26
  2. n = IsDate(Cells(i, 1))          ‘判断是不是日期格式
  3. If n = False Then                       
  4. Cells(i, 7) = Format(Left(Cells(i, 1), 8), "0000-00-00")  ’修改格式为日期格式
  5. Cells(i, 8) = DatePart("q", Cells(i, 7))  ‘这一行是判断季度
  6. Else
  7. Cells(i, 8) = DatePart("q", Cells(i, 1))   
  8. End If

  9. Next
复制代码


遇到几个问题

1、我的format 只能写成“0000-00-00”  这种格式。改成“yyyymmdd”就提示溢出。请问如何写成yyyymmdd的形式?也就是日期格式不要中间的分隔符
2、实际执行中,当n = true  时候,报告 溢出 错误。后续更改过几次,添加了  elseif n = true  或者 else 也不行,依然提示溢出错误。只能添加On Error Resume Next 避免提示。

请问怎么办?


日期转换测试.rar

16.37 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-12 10:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢谢谢。
但是,PQ是什么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-12 14:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-6-12 18:12 | 显示全部楼层
phezzan 发表于 2019-6-12 14:59
再次求教,5楼遇到了新问题。谢谢大家。

这样写,可以转换成yyyymmdd格式
  1. For i = 2 To 26
  2. n = IsDate(Cells(i, 1))          '判断是不是日期格式
  3. If n = False Then
  4. m = Format(Left(Cells(i, 1), 8), "0000-00-00")
  5. Cells(i, 7) = Format(m, "yyyymmdd") '修改格式为日期格式
  6. Cells(i, 8) = DatePart("q", m)  '这一行是判断季度
  7. Else
  8. Cells(i, 8) = DatePart("q", Cells(i, 1))
  9. End If

  10. Next
复制代码

TA的精华主题

TA的得分主题

发表于 2019-6-12 19:14 | 显示全部楼层
Sub test() '针对所提供的格式有效
Dim i&, s$, d As Date
[a1].CurrentRegion.Offset(1, 2).Resize(, 1).Clear
For i = 2 To [a65536].End(xlUp).Row
    If IsDate(Cells(i, 1)) Then
        d = Cells(i, 1)
    Else
        s = Trim(Cells(i, 1))
        d = DateSerial(Left(s, 4), Mid(s, 5, 2), Mid(s, 7, 2))
    End If
    Cells(i, 3) = Format(d, "yyyymmdd")
Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-6-12 21:38 | 显示全部楼层


2019-06-12_213710.png


2019-06-12_213609.png

日期转换.zip (13.84 KB, 下载次数: 13)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 07:29 , Processed in 0.058779 second(s), 17 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表