Excel - 复制显示的值而不是实际值

时间:2012-01-13 07:13:58

标签: excel vba excel-vba

我是飞行员,并使用名为Logten Pro的日志程序。我可以从我的工作飞行管理软件中获取保存的excel电子表格,并使用CSV格式将它们导入Logten Pro。

我的问题是,工作飞行管理软件以下列excel格式将航班起飞的日期和时间输出到一个单元格:DD / MM / YYYY H:MM:SS PM。 这可以通过Excel处理得很好,并且默认格式化为DD / MM / YY,即使实际值更具体,包括全长日期和时间组。

这是一个问题,因为Logten Pro只会自动导入日期,如果它是DD / MM / YY格式,并且没有办法只提取显示的DD / MM / YY日期而不是完整日期时间组实际值,除非您手动浏览并删除功能框中的额外文本。

我的问题是:是否有一个VBA宏可以自动复制实际显示的文本,并将其粘贴到另一个单元格中,将实际值更改为DD / MM / YY值?另外,这可以一次完成整列而不是单个单元吗?

注意我没有VBA经验,所以完美的答案就是我可以复制和粘贴的完整VBA字符串。

谢谢。

3 个答案:

答案 0 :(得分:10)

正如评论中所指出的,你最好不要使用VBA而是使用公式。

这个公式:

TEXT(A1,"dd-mm-yyy")

将以文本方式返回格式化日期。您可以在整个细胞范围内拖放公式,Copy/Paste Special> Values这样您只需要在Logten Pro中导入所需的值。

答案 1 :(得分:0)

使用公式有三种选择。

ROUNDDOWN

Excel将日期时间存储为数字,并使用格式将其显示为日期。 格式为date.time,其中整数是日期,分数是时间。

举个例子 01/01/2012 10:30:00 PM存储为40909.9375

小数点后的所有值都与小时和分钟有关

因此,可以使用公式将数字四舍五入为整数。

=ROUNDDOWN(A1,0)

然后将值格式化为短日期。 然后它将显示为01/01/2012

INT

如上所述,但使用不同的公式来摆脱分数(时间)

=INT(A1)

文本

或者,只能使用此公式将日期提取为文本

=TEXT(A1,"dd/mm/yyyy")

然后显示为01/01/2012

答案 2 :(得分:0)

在这个聚会上我来晚了一点,但是最近在寻找类似问题的答案时碰到了这一点。

这是我最后想出的答案。

Option Explicit

Sub ValuesToDisplayValues()

    Dim ThisRange As Range, ThisCell As Range

    Set ThisRange = Selection

    For Each ThisCell In ThisRange

        ThisCell.Value = WorksheetFunction.Text(ThisCell.Value, ThisCell.NumberFormat)

    Next ThisCell

End Sub

这将回答所问的问题,除了将新值粘贴到现有值上之外,而不是粘贴到新单元格中,因为没有简单的方法来知道您希望将新值粘贴到哪里。它可以在选定单元格的整个范围内工作,因此您可以在需要时整列。