我看了其他帖子,但找不到与我的问题足够相似的内容。希望得到任何帮助。我有一组日期,每天都有,日期的格式如下。DD.MM.YYYY (我住在一个先有日期的国家)。 我需要把数据改成DDMMYYYY。然后,我在Vlookup中使用这些日期作为数据集的一部分,该数据集包含我希望检索的信息。我需要帮助解决以下问题:问题#1
当我使用宏并将". "与""切换时,第1至12天已被切换为以下格式DDMMYYYY。然而,实际的月份和日期已经切换。目前工作在4月,所以01.04.2020已经切换到04012020(读作1月4日);04022020(2月2日,以此类推......)。问题2 从第13天开始,格式看起来是正确的 "13042020",但是当我在Vlookup中使用它时,公式不会带来任何结果。为了让Vlookup工作,我必须进入我刚刚更改的单元格,并在第一个数字前面按删除键,即使那里没有空格;为了让Vlookup工作。
为什么会出现这种情况?我该怎么做才能在替换了". "和""后正确工作?
以下是我的代码
Sub Dates()
Range(Range("G12"), Range("G12").End(xlDown)).Select
Selection.NumberFormat = "dd.mm.yyy"
Selection.Replace What:=".", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.NumberFormat = "dd/mm/yyy"
End Sub
试试。
Sub test()
Dim vDB, rngDB As Range
Dim s As Variant
Dim i As Long
Set rngDB = Range("G12", Range("G12").End(xlDown))
vDB = rngDB
For i = 1 To UBound(vDB, 1)
s = Split(vDB(i, 1), ".")
vDB(i, 1) = DateSerial(s(2), s(1), s(0))
Next i
rngDB = vDB
rngDB.NumberFormatLocal = "dd/mm/yyyy"
End Sub
以下是您的代码的解决方案 照样.
我强烈建议阅读并进一步了解 如何避免在Excel VBA中选择 来改进你的代码,降低运行时出错的风险。
如果你将这段代码添加到你现有的存储过程的底部(如你的问题中所示),它将循环浏览每个单元格,并将其重新格式化为正确的日期值。
Dim myCell As Variant
Dim myRange As Range
Set myRange = Selection
For Each myCell In myRange
myCell.Value = Format(CDate(myCell), "DD/MM/YYYY")
Next
你可能会发现这个链接也很有用。
如果你考虑到这两个链接中的信息来完善你的代码,你将最终避免了 .Select
和 Selection.
完全不一样,你的目标rangeecell就不会那么模棱两可了。
我把它重新编排如下。
注意: 我把它写在 Sheet1
的新工作簿,您需要更改该工作簿的 Sheets("...")
参考资料来匹配你的工作表名称。
Sub dates()
Dim myRange As Range
Dim LastRow As Long
Dim myCell As Range
With ThisWorkbook.Sheets("Sheet1")
LastRow = .Cells(.Rows.Count, 7).End(xlUp).Row
Set myRange = Range("G12:G" & LastRow)
For Each myCell In myRange
myCell.Value = Replace(myCell, ".", "/")
myCell.Value = Format(CDate(myCell), "DD/MM/YYYY")
Next myCell
End With
End Sub
现在,我们在工作簿上的哪些地方做了修改,这就更清楚了,这有助于提高你和其他人(比如SO上的其他用户)的可读性,同时也减少了歧义和风险。RunTime
错误。
谢谢文字转栏目的建议,这是我做的工作。
Sub Dates ()
Dim rg As Range
Set rg = Range("G12").CurrentRegion
rg.TextToColumns Destination:=Range("H2"), ConsecutiveDelimiter:=True, DataType:=xlDelimited, Other:=True, OtherChar:="."
lr = ActiveSheet.Cells(Rows.Count, "G").End(xlUp).Row
Range("K2").Formula = "=DATE(J2,I2,H2)"
Range("K2").AutoFill Range("K2:K" & lr)