首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel VBA更改列的时间/日期格式

Excel VBA更改列的时间/日期格式
EN

Stack Overflow用户
提问于 2019-05-30 21:33:38
回答 2查看 63关注 0票数 0

我必须更改9000多个提供商记录的日期/时间格式。我是vba的新手,不知道该怎么做,因为有超过100种不同的供应商办公时间。

我想过使用一个按钮来创建一个填充正确信息的新列,但我不确定这是不是正确的路径。我考虑过使用If语句,但我知道由于办公时间的不同,将会有超过100个If语句。

在Excel中生成的当前日期/时间格式为:

代码语言:javascript
复制
M 8:30 AM-5:30 PM 
T 8:30 AM-5:30 PM 
W 8:30 AM-5:30 PM 
R 8:30 AM-5:30 PM 
F 8:30 AM-5:30 PM

我需要将其转换为M-F 8:30 AM-5:30 PM

下面是另一个例子

代码语言:javascript
复制
M 7:30 AM-11:00 PM
T 7:30 AM-11:00 PM
W 7:30 AM-11:00 PM
R 7:30 AM-11:00 PM
F 7:30 AM-11:00 PM
S 8:00 AM-9:00 PM

期望的最终结果:

代码语言:javascript
复制
M-F 7:30 AM - 11:00 PM; SA 8:00 AM - 9:00 PM
EN

回答 2

Stack Overflow用户

发布于 2019-05-30 22:32:20

如果Excel解决方案可能适合您,也许您可以根据自己的需要进行调整:

备注:要使此公式起作用:

  1. 您的数据必须从第2行或更低的行开始,但不能从第1行开始,否则公式将无法正常工作。
  2. 数据的排序方式必须与您提交的数据类似(所有相同的时间组合在一起,否则将不起作用)

公式是:=IF(IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW())="";"";LEFT(INDEX($A:$A;IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW()));1)&"-"&LEFT(INDEX($A:$A;IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW())+COUNTIFS($A$2:$A$12;"*"&TRIM(MID(A2;3;99))&"*")-1);1)&" "&TRIM(MID(A2;3;99)))

正如你可能在图片中注意到的,最后的结果并不符合你的需求(你发布了SA 8:00 AM - 9:00 PM,而我的公式得到了S-S 8:00 AM-9:00 PM,因为老实说,我不知道那个A是从哪里来的。

由于公式的复杂性,我已经将文件上传到我的Gdrive,在文件中你会发现两张表:一张在一个单元格中,另一张在几列中,模拟一步一步的解决方案,以防你有兴趣检查它背后的想法。

https://drive.google.com/open?id=1pmrpPqMWwtFtdzt3-lQoK5npd_JeQs0m

试着让它适应你的需求。

票数 0
EN

Stack Overflow用户

发布于 2019-05-31 00:49:44

步骤

1用空格替换(C列,公式= space (B6,"-",“"))

2提取星期几(列D,公式=TIMEVALUE(TRIM(MID(SUBSTITUTE(C6,“",REPT(”",LEN(C6)),(1)*LEN(C6)+1,LEN(C6)&“"&TRIM(MID(SUBSTITUTE(C6,”",REPT(“",LEN(C6),(2)*LEN(C6)+1,LEN(C6)

3提取时间开始(E列,公式=TIMEVALUE(TRIM(MID(SUBSTITUTE(C25,“",REPT(”",LEN(C25),(1)*LEN(C25)+1,LEN(C25))&“"&TRIM(MID(SUBSTITUTE(C25,”",REPT(“",LEN(C25),(2)*LEN(C25)+1,LEN(C25)

4提取时间结束(具有公式的列f =TIMEVALUE(TRIM(MID(SUBSTITUTE(C25,“",REPT(”",LEN(C25),(3)*LEN(C25)+1,LEN(C25))&“"&TRIM(MID(SUBSTITUTE(C25,”",REPT(“",LEN(C25),(4)*LEN(C25)+1,LEN(C25)

5确定是否包含星期六(D32,公式= if (COUNTIF(D25:D30,"S"),"Yes",“No”)

7获取最大时间结束时间(公式为F32 = Max (F25:F29))

9获取最终结果(B34 with Formula =IF(D32="No",("M-F "&TEXT(E32,"hh:mm AM/PM")&"-"&TEXT(F32,"hh:mm AM/PM")),("M-F "&TEXT(E32,"hh:mm AM/PM")&"-"&TEXT(F32,"hh:mm AM/PM")&(",SA "&TEXT(VLOOKUP("S",D25:F30,2,FALSE) ),"hh:mm AM/PM")&"-"&TEXT(VLOOKUP("S",D25:F30,3,FALSE),"hh:mm AM/PM“))

假设

1所有原始文本的格式都相同

3您正在数组中查找最晚的结束时间

备注

1这些是excel中的步骤。

2“这些公式很复杂,但很灵活,如果原始数据发生变化,可以用作模板。”

3您可以组合不同的公式来创建单个摘录,但它们将变得相当难以阅读

4就我个人而言,我会在excel中这样做,这样我就可以检查结果(并寻找不符合要求的模式),这样我就可以根据需要进行调整。

6这是我第一次在这个论坛上回答问题,所以我希望这是有意义的。

XLSX Example我想附加一个电子表格,但我看不出有什么办法。论坛上可能不允许这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56379382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档