2013-11-04 172 views
2
' 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:從字符串中查找和替換日期格式

做一個手動查找,並在Excel更換修復該問題,但我想透視數據和組之後,當我嘗試做用VBA它做了兩件事...

  1. 它不會將所有記錄識別爲日期。即使單元格格式發生變化,仍有一部分保持一般狀態。這意味着用戶不得不用F2 + Enter來遍歷每一行,然後大量的數據透視表被搞亂了。

  2. 其逆轉日/月。即原始數據是01/10/2013(10月1日),並將其轉換爲10月1日。

是否有修復查找/替換或循環修復單元格格式的方法。

+1

你試圖使用'TRIM()'呢? – Jaycal

+0

我必須添加,然後剪切一列才能做到這一點? 我知道我可以添加一列。修剪()和粘貼值和格式爲日期。然後切割原始列..只是看看是否有更簡單的方法。 – SIEDASC

+0

@SIEDASC我添加了一個適用於您的情況的VBA解決方案。 – Sam

回答

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 
+0

謝謝@Sam Ward。那是一種治療。在這個日期中沒有NULL值。所以QAD是沒有必要的。但它在其他表格中可能很有用。 – SIEDASC

1

確保您的Windows區域設置設置爲dd/mm/yy。

做你的查找/替換

如果您需要在日期列上額外的處理,運行文本列。

0

我花了大約兩個小時在谷歌搜索這個答案,並沒有任何工作對我來說,即使我有我的Windows區域設置爲dd/mm/yy設置。 TextToColumns函數是我將日期轉換爲正斜槓dd/mm/yyyy格式的唯一VBA函數。

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