为什么我的列格式不一致?

时间:2017-08-24 09:39:45

标签: excel vba excel-vba

我目前正在尝试在VBA中使用公式,其中我有一个包含3列的工作表。分别为年,月和日。它们将使用以下公式在另一列中形成伪日期:

=I4& "/" &H4& "/" &G4

然后在另一张表中我有一个列,它将获得伪日期并通过VBA中的Vlookup复制它。

在我使用VBA之前,我将公式放在了列中,它运行正常。只有当我试图将它放在VBA中时,才会发生奇怪的事情。

某些单元格具有正确的格式,而某些单元格默认为一串数字。 仔细观察后,日期小于13的日期最终会被默认为数字字符串

示例:某些单元格的编号为42741等,而某些单元格的格式为20/6/2017。

我确保Vlookup列的格式与伪日期列的格式相同,但是问题仍然存在。

当我将格式更改为日期时,那些日期默认为数字字符串的人最终会将日期和月份反转。 (1/8/2017成为8/1/2017等等)。 13天及以上的人再次受到影响。

我甚至尝试在Vlookup列上设置数字格式,但再次没有运气。以下是供参考的代码。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("a4:a9999")) Is Nothing Then
       With Me.Range("d4:d9999")
           .Formula = "=IF(ISNA(VLOOKUP(A4,ProjectEntry,10,FALSE)),"""",VLOOKUP(A4,ProjectEntry,10,FALSE))"
           .Value = .Value
           .NumberFormat = "dd/mm/yyyy"
       End With

现在的问题是,为什么Excel在这个日期问题上代理所有人?

编辑:我找到了一种方法,可以确保两端的日期格式相似。

现在代码使用复制和粘贴作为值来获取我想要的数据。

With Me.Range("d4:d9999")
    .Formula = "=IF(ISNA(INDEX(ProjectEntry,MATCH(A4,ProjectEntry[Project No],FALSE),10)),"""",INDEX(ProjectEntry,MATCH(A4,ProjectEntry[Project No],FALSE),10))"
    .Copy
    .PasteSpecial Paste:=xlPasteValuesAndNumberFormats
 End With

然而我遇到的问题是它留下了复制框(复制单元格时出现的移动虚线框),它总是跳转到我在代码中声明的第一行(第4行) )。每次输入数据时,我都不想一直向下滚动到最后。有没有办法在我的代码中删除它?

1 个答案:

答案 0 :(得分:0)

在Excel中,日期是一个数字。 Excel计算自1899年12月31日以来的日期。然后它以一种看起来像日期的方式显示该数字。 Excel也可以使用倒档。如果您输入的内容类似于日期,则会将您的条目转换为代表该日期的数字。我不会像日期一样进入Excel,但作为提示,它与您的区域设置有关。

现在,您的"伪日期"应该是' =日期(G4,H4,I4)' (序列是年,月,日)。结果是一个数字。假设你在K4中有Date()函数,你可以将K4格式化为" dd / mm / yyyy" (没有引号),这就是单元格将显示的内容。它的值一直是表示显示日期的数字。

现在您有了正确的值,您可以开始使用VLookup或其他功能。这是另一个主题 - 如果你遇到问题。