Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在excel中将字符串日期(DD.MM.YY)更改为日期格式(YYYY-MM-DD)_String_Excel_Date_Vba - Fatal编程技术网

String 在excel中将字符串日期(DD.MM.YY)更改为日期格式(YYYY-MM-DD)

String 在excel中将字符串日期(DD.MM.YY)更改为日期格式(YYYY-MM-DD),string,excel,date,vba,String,Excel,Date,Vba,我的excel工作表中有将近200000条数据记录,日期列是这样的字符串(dd.mm.yy),我必须将其转换为(YYYY-mm-dd)的日期格式 我试过这个- 对于示例日期字符串1.11.11,我尝试将.11替换为.2011,但它也会将月份更改为1.2011.2011,并且我的工作表从2010年到2016年有大量记录 示例-我的单元格有1.11.11,我想将其转换为2011-01-01(YYYY-MM-DD) 请帮忙! 谢谢。假设值从A1开始,并且如果它们都在DD.MM.YY(带零(04、06等

我的excel工作表中有将近200000条数据记录,日期列是这样的字符串(dd.mm.yy),我必须将其转换为(YYYY-mm-dd)的日期格式

我试过这个-

对于示例日期字符串1.11.11,我尝试将.11替换为.2011,但它也会将月份更改为1.2011.2011,并且我的工作表从2010年到2016年有大量记录

示例-我的单元格有1.11.11,我想将其转换为2011-01-01(YYYY-MM-DD)

请帮忙!
谢谢。

假设值从A1开始,并且如果它们都在DD.MM.YY(带零(04、06等…)


使用此选项将其更改为真实日期:

=DATE(2000+SUBSTITUTE(RIGHT(A1,2),".",""),SUBSTITUTE(MID(A1,FIND(".",A1)+1,2),".",""),SUBSTITUTE(LEFT(A1,2),".",""))
然后将输出格式化为所需格式:
YYYY-MM-DD


要在适当的位置执行此操作,需要vba

选择日期单元格并运行此代码

Sub datechange()
Dim rng As Range
Dim str() As String

For Each rng In Selection
    str = Split(rng.Value, ".")
    rng.Value = DateSerial(2000 + str(2), str(1), str(0))
Next rng
Selection.NumberFormat = "yyyy-mm-dd"

End Sub
试试下面的公式:

=TEXT(SUBSTITUTE(A1,".","/"),"YYYY-MM-DD")
试试这个:

select convert(varchar,convert(datetime,'26-July-2018'),105)

它应该是**=“20”&右(A1,2)&“-”和中(A1,4,1)&“-”和左(A1,2)**你应该在中间部分用1而不是2,但我的问题是如何在整个文件中应用它??好吧,如果日期是在DD-MM-YY,为什么mid会是1?不管怎样,我认为上面斯科特的答案是最好的。@Savan你不能用公式来做,它必须是vba。我怎么做,我不熟悉vba。相反,我想用我的答案t到数据库并更改它们的,如果我在(dd.mm.yyyy)中得到查询,我可以通过查询来完成format@SCOTTCRANER仅当本地设置为
dd/mm/yyyyy
时,此选项才有效。您还需要使用
DATEVALUE
VALUE
-
将文本更改为数字。请确保您了解Excel的y2k算法。两位数年份>=30被认为是在1900年代。如果您想要什么不同的是,你需要自己编写代码。我没有17岁以上的任何记录,所以没有问题。谢谢!马特·约翰逊这是有效的,但如何一次在整个工作表上应用它?我无法手动为2lakh数据编写代码!@Savan我已经给了你可以构建的主干。正如我前面所说的,这不是我的代码站点。试着找出原因w用包含日期的范围替换
选择内容
。如果您遇到困难,请返回尝试,并用该代码发布新问题,说明问题所在并提出具体问题。当然可以!我会尝试并返回@Scott Craner如何在该脚本中添加一个条件,即如果单元格为空,则不执行任何操作?@Scott CranerNew问题获得新职位。
select convert(varchar,convert(datetime,'26-July-2018'),105)