Excel-VBA:从string查找和replacedate格式

' 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 

使用此代码尝试修复一些下载的数据的问题,我不能控制。 表格在以文本forms存储的date前面有一个空格。 例如“04/11/2013”

在Excel中执行“手动查找和replace”可以修复问题,但是我希望事后旋转数据和组,然后在尝试使用VBA时执行两项操作。

  1. 它不会将所有logging识别为date。 即使单元格格式被改变,一些仍然是一般的。 这意味着用户不得不用F2 + Enter来遍历每一行,然后在数据透视表中进行大量的操作。

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

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

对于没有VBA的解决scheme,您可以在这个例子中尝试DATEVALUE函数。

则DateValue

用法会是这样的

  =DATEVALUE(Trim(A1)) 

要么

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

假设你的date在单元格A1中


而对于VBA解决scheme,类似

 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 

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

做你的查找/replace

如果您需要额外的处理,请在date列上运行文本到列。

我花了大约两个小时search谷歌的答案,并没有任何工作对我来说,即使我有我的Windows区域设置为dd / mm / yy设置。 我已经得到的唯一的VBA函数是将date转换为正斜杠dd / mm / yyyy格式,是TextToColumns函数。

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

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