使用替代或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。