【问题标题】:Excel-VBA: Find and Replace and Date Formatting from StringExcel-VBA:从字符串中查找和替换以及日期格式
【发布时间】:2013-11-15 09:06:06
【问题描述】:
    ' Try to format the dates
    Range("N:N").Select
    Selection.NumberFormat = "dd/MM/yyyy"
    Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

使用此代码尝试解决一些我无法控制的下载数据问题。表格在存储为文本的日期前有一个空格。例如“ 2013 年 4 月 11 日”

在 Excel 中进行手动查找和替换可解决问题,但我希望之后透视数据和分组,当我尝试使用 VBA 执行此操作时,它会做两件事...

  1. 它不会将所有记录都识别为日期。即使单元格格式已更改,有些仍保持为常规。这意味着用户必须使用 F2+Enter 遍历每一行,然后在数据透视表中进行大量操作。

  2. 它正在反转日/月。即原始数据是 01/10/2013(10 月 1 日),并将其转换为 1 月 10 日。

是否有修复查找/替换或循环修复单元格格式的方法。

【问题讨论】:

  • 你试过用TRIM()代替吗?
  • 我是否必须添加然后剪切一列才能做到这一点?我知道我可以添加一列。执行 Trim() 并粘贴值并格式化为日期。然后剪切原始列..只是看看是否有更简单的方法。
  • @SIEDASC 我添加了一个 VBA 解决方案,它应该适用于您的情况。

标签: vba excel replace find


【解决方案1】:

对于非 VBA 解决方案,您可以在此实例中尝试 DATEVALUE 函数。

DateValue

用法类似于

 =DATEVALUE(Trim(A1))

 =DATEVALUE(RIGHT(A1, LEN(A1)-1)

假设您的日期在单元格 A1 中


对于 VBA 解决方案,类似

Public Sub ConvertToDate()

Dim endRow As Long
Dim ws As Worksheet
Dim dateColumn As Long
Dim dateval As String
Set ws = Sheet1

'set date column (in this case we set column A)
dateColumn = 1

endRow = ws.Cells(ws.Rows.Count, dateColumn).End(xlUp).Row

For i = 2 To endRow

Dim length As Long

length = Len(ws.Cells(i, dateColumn)) - 1

    'just a quick and dirty check to see if there is value data
    'it isn't set to check for numeric data, so if there is some dodgy
    'string data in the cell then it will fail on the CDate line.
    If length > 3 Then

        'store date string (may use Trim() or Mid() etc...)
        dateval = Right(ws.Cells(i, dateColumn).Value, length)

        'convert to date and change cell value
        ws.Cells(i, dateColumn).Value = CDate(dateval)

    End If


Next i




End Sub

【讨论】:

  • 感谢@Sam Ward。那是一种享受。此日期中没有 NULL 值。所以不需要QAD。但它可能在其他表中有用。
【解决方案2】:

确保您的 Windows 区域设置已设置为 dd/mm/yy。

查找/替换

如果您需要额外处理,请在日期列上运行 Text to columns。

【讨论】:

    【解决方案3】:

    我花了大约两个小时在谷歌上搜索这个问题的答案,但没有什么对我有用,即使我的 Windows 区域设置设置为 dd/mm/yy。我可以将日期转换为正斜杠 dd/mm/yyyy 格式的唯一 VBA 函数是 TextToColumns 函数。

    Range("N:N").TextToColumns Destination:=Range("N1"), DataType:=xlDelimited, _
            FieldInfo:=Array(1, xlDMYFormat)
    

    我从这个页面找到了答案 - https://social.msdn.microsoft.com/Forums/en-US/e3522eac-13b1-476c-8766-d70794131cc8/strange-date-conversion-while-using-vba-replace-function?forum=isvvba

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多