使用替代或replace更改date格式

我正在从一个Excel文件读取数据,并将数据写入另一个Excel文件。

我的问题是,源格式为dd.mm.yyyy ,date格式为dd-mm-yyyy

所以我search了,发现这个答案用一个stringreplace一个字符,这表明我可以使用substitute

所以我试过这个代码:

 For r = 1 To 10 myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date myOutputSheet.Cells(6+r, 1).Value = substitute(myOutputSheet.Cells(6+r, 1), ".", "-") Next 

它给出了错误:

 Microsoft VBScript runtime error: Type mismatch: 'substitute' 

我如何纠正改变. 进入-

更新

我也试过这个:

 For r = 1 To 10 myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date replace(myOutputSheet.Cells(6+r, 1), 2, 1, "-") replace(myOutputSheet.Cells(6+r, 1), 4, 1, "-") Next 

但是这给了错误:

 Microsoft VBScript compilation error: Cannot use parentheses when calling a Sub 

所以我试了一下:

 For r = 1 To 10 myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date replace myOutputSheet.Cells(6+r, 1), 2, 1, "-" replace myOutputSheet.Cells(6+r, 1), 4, 1, "-" Next 

但是这给了错误:

 Microsoft VBScript runtime error: Type mismatch: '[string: "-"]' 

首先,您应该知道,Excel中的所有date和时间都以数字forms存储,并仅显示为date。

所以,如果这样显示的话,那么这个数字是42000。 这是1899年12月31日以后的第42,000天。那将是2014年12月27日。

这是事情变得复杂的地方:date不是以数字forms存储,而是以Excel中的文本forms存储。 那么对于一个Excel用户来说,在一个单元格中有date时,实际上只有文本(对于Excel来说是理解的)。 虽然用户不可能仅仅通过查看单元格来区分两者,但真正的区别在于,您不能仅在纯文本date执行和date操作。

让我们伤心的是让我们来看看两个小例子:

(1)进入一个单元格如下: 11.12.2013 。 有可能Excel会将其识别为date,并将其转换为数字41,619。 但是,你会看到一个date。 这是因为Excel自动将该单元格的格式从“ General更改为“ Date 。 但是,如果您将该单元格的格式更改为General那么您将会看到前面提到的数字。

(2)现在,将以下内容input单元格: 2015-14-11 。 再一次,Excel很可能不会将其识别为date,而是将其作为文本存储。 当你看到那个单元格的数字格式,那么你可能仍然会看到General ,如果你明确地将其改为Number你仍然可以看到2015-14-11

现在,您可以更好地与上面的@vacip的评论联系起来。 他/她正试图查明你的源文件中是否真的有date(以数字forms存储),或者你是否只在这个文件中有可能表明它包含date的文本。

如果Excel在源文件中识别这些date,那么很容易通过更改单元格的.NumberFormat来改变这种格式。 实质上,您可能需要查看源文件,并检查是否可以将这些date显示为数字(1899年12月31日以后)。

如果是这种情况,那么你应该能够将数字格式更改为dd-mm-yyyy然后全部设置。 但是,如果要将文本存储在目标文件中,或者如果要在此保存date,则这一点很重要。 如果你想在那里存储date,你有他们作为date在源文件,那么我会build议如下:

 myOutputSheet.Cells(6+r, 2).Value2 = myInputSheet.Cells(6+r, 2).Value2 myOutputSheet.Cells(6+r, 2).NumberFormat = "dd-mm-yyyy" 

然而,如果你坚持把13.11.2013转移到目标文件中,那么你将要使用以下(在源文件中确实有确认date的情况下):

 myOutputSheet.Cells(6+r, 2).Value2 = Format(myInputSheet.Cells(6+r, 2).Value2, "dd-mm-yyyy") 

在哪里可能会有点复杂的是当你在源文件中的文本。 如果你不介意,它保持文本,你真的只是想改变. 对于-那么你可以使用上面的评论build议的Replace

 myOutputSheet.Cells(6+r, 2).Value = Replace(myInputSheet.Cells(6+r, 2).Value, ".", "-") 

但是,如果源文件中有文本,并且要将date保存到目标文件中,则可以要求Excel使用CDate进行转换,并预先检查单元格的内容是否可能被识别为IsDate的date:

 myOutputSheet.Cells(6+r, 2).Value2 = Iif(IsDate(myInputSheet.Cells(6+r, 2).Value, CDate(myInputSheet.Cells(6+r, 2).Value), "no recognizable date") 

你可能已经认识到,我有时使用.Value和somethimes .Value2在上面的代码片段。 有关更多信息,您可能需要阅读以下内容: .text,.value和.value2之间的区别是什么?

顺便说一句:时间也存储为数字。 事实上,他们每天只能保存一小部分。 因此,0.5的数字等于半天,而中午十二点。 同时,早上09:00是0.375,18:00或者6pm等于0.75。