Excel日期格式问题 - 字符串

时间:2016-04-21 13:13:29

标签: excel excel-formula

我在excel中有以下格式的日期格式,字符串格式为:

fuseki:serviceReadWriteGraphStore "data" ;

我尝试将其从一般转换为日期,但excel仍然不会将其识别为日期格式。需要你的建议,我可以尝试更多来解决这个问题。

谢谢你!

3 个答案:

答案 0 :(得分:1)

尝试=DATEVALUE("date string")

希望这会有所帮助

这是它的工作原理

enter image description here

如果仍然无效,那么它与Windows日期时间设置有关。

从“控制面板”中打开区域和语言设置。将长日期格式更改为" MMMM dd,yyyy"。因为这是格式化日期字符串的格式。你必须这样做才能让excel中的DATEVALUE()工作。现在回到你的公式,看看它是否有效。

之后,复制粘贴公式作为值。然后,您可以再次更改为首选的长日期格式(或者只是保留)。

enter image description here

答案 1 :(得分:0)

为您提供多种选择:

选项1

文本到excel功能中构建的列

Text to Columns

为初学者选择所有日期。他们需要在一个专栏中。在“数据”功能区上,选择“文本到列”。上图中的浅绿色背景。

在随后弹出的窗口中选择Fixed Width。然后选择Next。

Fixed Width

调整列,以便获得单个列或一列中的日期,另一列中的时间。然后选择NEXT。

Column adjustment

在底部预览窗口中选择第一列。然后在顶部选择日期单选按钮,然后从下拉菜单中选择MDY格式。准备好后点击完成按钮

Format Column

选项2

公式

从字符串中删除文本并使用一些丑陋的长公式重建日期。因此,我们将在部分内容中执行此操作,以便您可以看到大丑是如何制作的。当我们完成后,我们会将较小的公式复制到一个公式中,这个公式很难看,难以阅读。

令人烦恼的一件事是你将月份作为缩写。在某个地方,您需要构建一个表,并将所有缩写放在一列中,并将相应的月号放在右侧的列中。可能还有其他方法可以做到这一点,但这就是我现在要做的事情。

(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个字符长。因此,我们可以直接使用excel公式并对其进行硬编码。另一种方法是找到空间。所以找到月份的第一个公式是

=Left(A1,3)

由于我们需要知道那个月的数量,我们可以用VLOOKUP函数转换它(INDEX / MATCH是另一种选择)。让我们暂时把它放在F栏。

=VLOOKUP(Left(A1,3),$AA$1:$AB$12,2,0)

那应该为我们返回3号。你将不得不调整AA1:AB12以适应放桌子的位置。

接下来我们将拉开这一天。我们知道第一个逗号左边的1或2个字符。我们将使用FIND来确定它在哪里,因为它不在固定的位置。

=FIND(",",A1)

因此我们知道日期将从左侧开始1或2个字符。服用两个没有害处,因为它将是一个空格或数字。所以现在让我们将这些知识用于MID公式,并将以下内容放在G列中:

=--MID(A1,FIND(",",A1)-2,2)

- 将文本更改为数字(在这种情况下实际上不需要它们)。所以下一个有点棘手,但仍然可行。我们需要找到年份。你不知道它,它是一个固定的4个字符长,并在相同的第一个昏迷之后开始。因此,让我们重复使用我们之前的公式,但稍微调整一下,现在将以下内容放在H列中:

=--MID(A1,FIND(",",A1)+2,4)

现在,我们将月,日和年作为数字,我们可以使用DATE公式建立我们的日期,我们可以在第I栏中输入:

=DATE(H1,F1,G1)

现在,如果你准备开始大丑,我们可以将我们之前的每个方程式替换为我们的日期等式,所以它全部在一个单元格中完成。这个大公式看起来如下:

=DATE(MID($A1,FIND(",",$A1)+2,4),VLOOKUP(LEFT($A1,3),$AA$1:$AB$12,2,0),MID($A1,FIND(",",$A1)-2,2))

现在,当我在一个单元格中说出所有内容时,我应该添加一个警告,即您确实需要几个月列表的帮助信息......尽管还有一种解决方法。这样就可以处理日期过程。现在做的时间非常相似。

我们有两个选项第一个选项可能不适合您,因为datevalue公式不适合您。

选项A - TimeValue

关于你的时间设置的好处是,从开始到结束的时间长度为10或11个字符,如果我们将11个字符全部只用10个,那么我们再次只是在抓住一个空格。因此,我们抓住正确的时间并将此公式放在K列中:

=TIMEVALUE(RIGHT($A1,11))

现在,如果该选项对您不起作用,那么我们将其分解为与日期相同的方式。

选项B - 剥离时间

让我们看一下模式,看看我们能算出什么......第一个":"看起来像一个伟大的标识符,所以让我们找到它与我们为日期做的相同。让我们在N列中构建我们的时间公式:

=FIND(":",A1)

让子直接进入MID公式来拉动小时

=MID($A1,FIND(":",$A1)-2,2)

在O列中,我们将在几分钟内做同样的事情并再次进行一些调整

=MID($A1,FIND(":",$A1)+1,2)

由于我们知道会议记录在单位数分钟内保持领先零,我们也确切知道秒数将从何处开始。让我们把这个公式放在P列中:

=MID($A1,FIND(":",$A1)+4,2)

所以你可能想知道如何处理AM / PM让我们抓住它并把它放在Q列中

=RIGHT($A1,2)

现在我们掌握了所有这些信息,我们将如何构建时间。首先,你需要知道Excel就像24小时制。然而,它确实将时间节省为一天的小数。所以中午12点实际存储为0.5或半天。另一个重要的事情是,官方支持的Excel时间范围是00:00到23:59。没有24:00。现在已经说过24小时会让VBA崩溃,除非你在一些特殊代码中专门处理它。然而,你可以在excel公式中提供24小时的时间,并且有时会侥幸逃脱。对于时间课程已经足够了,让我们在R列中构建这个最终公式:

=TIME(N1+IF(AND(Q1="PM",N1<>"12"),12,IF(AND(Q1="AM",N1="12"),-12,0)),O1,P1)

你会注意到那里有一个处理AM PM的IF公式以及12小时的特殊情况。 12是引号,因为N1是一个字符串,我没有把它转换为数字。

现在因为背面的丑陋而取代我们的公式,所以这一切都在一个单元格中。

=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(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))

现在这只是关于如何使用公式细分的一种解决方案。我可以通过几个步骤获得其他选项或路线,但无论您的系统设置如何,它都应该适用于您。这是我系统上结果的屏幕截图。注意我隐藏了未使用的空列,以使图像更窄。列T具有

的自定义格式
mmm, d, yyyy h:mm:ss AM/PM

适用于它。

Final product

选项3

VBA

我相信有人会在某个时候供应。看看它发生在我能够进入那个阶段之前!我不知道为什么8)

答案 2 :(得分:0)

对于VBA解决方案,您可以打开VBA编辑器,添加新模块并粘贴此代码:

Function STRTODATE(ByVal dcell As Range)
    Dim datecon As Date
    datecon = dcell
    STRTODATE = datecon
End Function

然后您可以使用STRTODATE作为公式。只有真的有用,如果是一次性的。如果你经常在不同的文件上做这些事情,那么将这段代码粘贴到每个工作簿上都会很烦人。