【问题标题】:Vlookup cells containing dates in date format, text and general formatVlookup 单元格包含日期格式、文本和一般格式的日期
【发布时间】:2018-07-16 12:24:38
【问题描述】:

我正在查找包含日期的单元格,其中一些是日期格式,另一些是文本格式,还有一些是一般格式。我正在尝试vlookup 显示的单元格的值。

到目前为止,如果单元格的格式为日期,则返回一个数字,如果单元格的格式为文本,则返回正确的值,如果单元格的值为日期,则返回数字,如果我手动将其转换为日期格式,它会在 mm/dd/yyyy 中打印日期,而不是在 dd/mm/yyyy 中,因为它在我 vlookup 的工作表中。是否有代码可以“截图”该值和vlookup 它与显示的完全一样(就像它是文本一样)。

这是我尝试过的。它运行了,但仍然没有解决任何问题。

新代码

lastrow2 = ws3.Range("F" & Rows.Count).End(xlUp).Row
Dim cell As Range
Dim CellText As String
For Each cell In ws3.Range("I2:I" & lastrow2)
    If cell.Text <> cell.Value And Len(cell.Value) <= 255 Then
        CellText = cell.Text
        cell.NumberFormat = "@"
        cell.Value = CellText
    End If
Next cell

编辑

输入数据示例(我提供了两个截图来查看输入日期的不同格式

【问题讨论】:

  • 你试过 cell.Text 了吗?
  • 不是真的.. 我会尝试看看它是如何工作的
  • 如果您使用不同类型输入的样本更新您的问题,我们可以帮助您制作“通用”日期修复程序。
  • 那么您希望 11/07/2018 表示 11 月 7 日 还是 7 月 11 日 ??
  • 我希望是 7 月 11 日

标签: excel vba date


【解决方案1】:

这个简短的 nacro 将在列 I:J 中查找可以解释为日期的数据并将其转换为格式为 “dd/mm/yyyy”的真实日期

Sub DateFixer()
    Dim ws3 As Worksheet, r As Range, d As Date
    Set ws3 = ActiveSheet

    For Each r In ws3.Range("I:J").Cells.SpecialCells(2)
        arr = Split(r.Text, "/")
        If UBound(arr) = 2 Then
            d = DateSerial(arr(2), arr(1), arr(0))
            r.Clear
            r.NumberFormat = "dd/mm/yyyy"
            r.Value = d
        End If
    Next r
End Sub

【讨论】:

  • 效果很好!但是,我有一个问题。在 vlookup 中,日期显示正确。在源工作表(vlookup 查找并获取日期的位置)中,日期仍然具有不同的格式,因为它们出现在菜单选项卡中!这怎么可能?
  • @PericlesFaliagas 我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2014-02-11
  • 2018-09-28
  • 2016-12-02
  • 2015-03-30
相关资源
最近更新 更多