Exceldate格式问题 – string
我有以下格式的date格式在string格式的Excel中:
Apr 1, 2016 12:37:06 PM Apr 2, 2016 12:00:00 AM Apr 1, 2016 9:50:22 AM Apr 1, 2016 12:09:38 PM Apr 1, 2016 6:53:03 PM Apr 1, 2016 1:02:10 PM
我曾尝试将其从一般转换为date,但Excel仍然不会将其识别为date格式。 需要您的build议,我可以尝试更多的解决这个问题。
多谢!
几个选项适合你:
选项1
文本到Excel中build立的列function
select所有初学者的date。 他们需要在一列。 在数据function区上,select文本到列。 上图中淡绿色的背景。
在随后popup的窗口中select固定宽度。 然后select下一步。
调整列,让你得到一个列或一列中的date与另一列中的时间。 然后selectNEXT。
在底部预览窗口中select第一列。 然后向上selectDate单选button,然后从下拉菜单中selectMDY格式。 当准备点击完成button
选项2
公式
从string中删除文本,并使用一些丑陋的长公式重builddate。 所以我们要这样做,所以你可以看到这个丑陋的东西是如何制造的。 当我们完成的时候,我们会把较小的公式复制成一个很难看,很难看的公式。
令人讨厌的事情之一是你有一个月的缩写。 在某处,您需要build立一个表格,并将所有缩写放在一列中,并将相应的月份编号放在右侧。 可能还有其他方法可以做到这一点,但这是我现在要做的。
(AA) | (AB) Jan | 1 Feb | 2 Mar | 3 Apr | 4 May | 5 Jun | 6 Jul | 7 Aug | 8 Sep | 9 Oct | 10 Nov | 11 Dec | 12
所以我们可以从最大(年)到最小(秒)或从左到右工作。 让我们从左边开始解决这个问题。
首先,我们需要把这个月抽出来。 幸好它在左边,我们知道它只有3个字符长。 所以我们可以直接findexcel公式,然后用硬编码。另一种方法是find空间。 所以find月份的第一个公式是
=Left(A1,3)
既然我们需要知道那个月份的数字,我们可以用一个VLOOKUP函数来进行转换(INDEX / MATCH是另一种select)。 现在让我们把它放在F列中。
=VLOOKUP(Left(A1,3),$AA$1:$AB$12,2,0)
这应该返回数字3为我们。 您将不得不调整AA1:AB12以适合您放置桌子的位置。
接下来我们要拉一天。 我们知道第一个逗号左边的一个或两个字符。 我们将使用FIND来确定它在哪里,因为它没有固定的位置。
=FIND(",",A1)
所以我们知道date会在左边开始1或2个字符。 没有伤害,因为这将是一个空间或一个数字。 所以,现在让我们使用MID公式中的知识,并将以下内容放在G列中:
=--MID(A1,FIND(",",A1)-2,2)
– 将文本更改为一个数字(在这种情况下,实际上并不需要)。 所以下一个是有点棘手,但仍然可行。 我们需要find年。 你不知道吗,它是一个固定的4个字符长,并开始后,相同的第一次昏迷。 因此,让我们重复我们以前的公式,但稍微调整一下,现在把H列为:
=--MID(A1,FIND(",",A1)+2,4)
那么现在我们有我们的月份,date和年份作为数字,我们可以使用DATE公式来build立我们的date,
=DATE(H1,F1,G1)
现在,如果你准备好开始一个丑陋的大事,我们可以用我们以前的每个方程代入我们的date方程,所有这些都在一个单元格中完成。 那个大公式将会看起来如下:
=DATE(MID($A1,FIND(",",$A1)+2,4),VLOOKUP(LEFT($A1,3),$AA$1:$AB$12,2,0),MID($A1,FIND(",",$A1)-2,2))
现在当我在一个单元格中说全部的时候,我应该补充说明,你确实需要那些月份列表的帮助信息,尽pipe也有一些解决办法。 所以照顾date过程。 现在做的时间非常非常相似。
我们有两个选项第一个选项可能不适合你,因为datevalue公式不适合你。
选项A – TimeValue
你创build时间的好处是,从开始到结束,时间长度为10或11个字符,如果我们全部11个时间,只有10个时间,我们再次只是抓住一个空间。 所以让我们抓住正确的时间,并把这个公式放在K列:
=TIMEVALUE(RIGHT($A1,11))
现在,如果这个选项对你不起作用,那么我们按照我们为该date做的那样分解它。
选项B – 剥离时间
因此,让我们看看模式,看看我们可以找出什么…首先“:”看起来像一个伟大的标识符,所以让我们find与date相同的方式。 让我们在N列中构build我们的时间公式:
=FIND(":",A1)
让我们直接进入MID公式来拉小时
=MID($A1,FIND(":",$A1)-2,2)
而在O栏中,我们也会用几分钟的时间做同样的调整
=MID($A1,FIND(":",$A1)+1,2)
而且由于我们知道分钟在单位数分钟内保持领先的零,所以我们也确切地知道秒钟将要开始的位置。 让我们把这个公式放在P列中:
=MID($A1,FIND(":",$A1)+4,2)
所以你可能想知道如何处理上午/下午让我们抓住这一点,并把它放在Q栏
=RIGHT($A1,2)
所以,现在我们掌握了所有这些信息,我们要做什么来构build时间。 首先,首先你需要知道Excel像24小时钟。 但是它确实可以节省一天的小数。 所以中午12点实际上是存放了0.5天或半天。 另一个重要的事情要知道,官方支持Excel的时间范围是00:00至23:59。 没有24:00。 现在已经说过,24小时以内,VBA崩溃,除非你专门处理它在一些特殊的代码。 然而,你可以在excel公式中以24小时的速度提供服务,并且有时候可以逃脱。 用课时足够好让我们在列R中构build这个最终公式:
=TIME(N1+IF(AND(Q1="PM",N1<>"12"),12,IF(AND(Q1="AM",N1="12"),-12,0)),O1,P1)
你会注意到有一个中频公式在那里处理AM上午以及12小时的特殊情况。 12是引号,因为N1是一个string,我没有把它转换成一个数字。
现在由于我们的公式所以这一切都在一个单元格的丑陋。
=TIME(MID($A1,FIND(":",$A1)-2,2)+IF(AND(RIGHT($A1,2)="PM",MID($A1,FIND(":",$A1)-2,2)<>"12"),12,IF(AND(RIGHT($A1,2)="AM",MID($A1,FIND(":",$A1)-2,2)="12"),-12,0)),MID($A1,FIND(":",$A1)+1,2),MID($A1,FIND(":",$A1)+4,2))
是的,这是很容易阅读! 我问你是否需要一列或两列。 那么你有完整的date在其上的公式和时间的完整公式。 所以,如果你们需要他们在一起,这是一个有趣的信息。 由于时间存储为十进制date,这意味着小数点右边的所有内容都是时间。 这也意味着左边(或整数部分)的所有内容都是天。 所以要把date时间放在一列中,你只需要把这两个公式加在一起……或者我把它称为一个真正的丑陋的等式……或者至less是属于这个范畴的许多等式中的一个:
=DATE(MID($A1,FIND(",",$A1)+2,4),VLOOKUP(LEFT($A1,3),$AA$1:$AB$12,2,0),MID($A1,FIND(",",$A1)-2,2))+TIMEVALUE(RIGHT($A1,11)) or if time value did not work for you =DATE(MID($A1,FIND(",",$A1)+2,4),VLOOKUP(LEFT($A1,3),$AA$1:$AB$12,2,0),MID($A1,FIND(",",$A1)-2,2))+TIME(MID($A1,FIND(":",$A1)-2,2)+IF(AND(RIGHT($A1,2)="PM",MID($A1,FIND(":",$A1)-2,2)<>"12"),12,IF(AND(RIGHT($A1,2)="AM",MID($A1,FIND(":",$A1)-2,2)="12"),-12,0)),MID($A1,FIND(":",$A1)+1,2),MID($A1,FIND(":",$A1)+4,2))
现在这只是一个解决scheme,如何使用公式来分解它。 还有其他的select或路线我可以在几个步骤,但它应该为你工作,不pipe你的系统设置是什么。 这是我的系统上的结果的屏幕截图。 注意我隐藏了未使用的空列以使图像变窄。 列T具有自定义格式
mmm, d, yyyy h:mm:ss AM/PM
适用于它。
选项3
VBA
我相信有人会在某个时候提供。 看看它发生之前,我可以到那个阶段! 我不知道为什么8)
尝试=DATEVALUE("date string")
。
希望这可以帮助
下面是它的工作原理
如果仍然没有工作,那么它必须与Windowsdate时间设置。
从控制面板打开区域和语言设置。 将长date格式更改为“MMMM dd,yyyy”。 因为这是您的datestring格式化的格式。 您必须这样做才能使Excel中的DATEVALUE()工作。 现在回到你的公式,看看是否有效。
之后,复制粘贴公式作为值。 然后,您可以再次更改为您的首选长date格式(或放弃)。
至于VBA解决scheme,您可以打开VBA编辑器,添加一个新模块并粘贴下面的代码:
Function STRTODATE(ByVal dcell As Range) Dim datecon As Date datecon = dcell STRTODATE = datecon End Function
那么你可以使用STRTODATE作为公式。 只有真正有用,如果它是一个closures。 如果这是你经常在不同的文件上做的事情,那么把这些代码粘贴到每个工作簿上都会很麻烦。