2017-03-17 75 views
1

我正在使用將某些數據導出爲CSV格式的應用程序。但是,日期列在原始數據中格式不​​正確,並且包含一年中不必要的尾部字符,這會阻止Excel在導入後正確解釋它。查找/替換適當格式化日期單元格的宏

如果我在列上手動運行查找和替換,則這些值會自動識別爲日期。但是,如果將操作記錄爲宏,並再次運行,則尾隨字符將被刪除,但列中的數據將保留爲文本,而不是日期。

這裏的VBA代碼:

Sub formatDate() 

Columns("A:A").Select 
Selection.Replace What:=" г.", Replacement:="", LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
    ReplaceFormat:=False 
End Sub 

約會區域格式是DD.MM.YYYY。另外,如果我簡單地編輯任何生成的單元格(F2)並在沒有其他任何操作的情況下按下Enter鍵,則Excel將切換到正確的格式。

的樣本數據:

4 март 2017 г. 
4 март 2017 г. 
3 март 2017 г. 
1 март 2017 г. 
28 февруари 2017 г. 
27 февруари 2017 г. 
27 февруари 2017 г. 
26 февруари 2017 г. 
26 февруари 2017 г. 
+1

文本看起來像日期與額外的固定格式,所以他們都是相同的長度;例如他們是03/05/2017或3/5/2017?如果是這樣,那麼具有固定長度和適當的DMY與MDY格式的文本到列是更好的方法。對不起,沒有樣本數據,所以沒有解決方案 – Jeeped

+0

不幸的是,應該是文本的文本不是固定長度的,因爲生成程序使用月份的名稱,而且日期有時是1位數字,有時是2位數字。 – zkvvoob

+0

所以我想提供幾個'帶文本的日期'的例子可能是一個好主意。 – Jeeped

回答

2

使用TextToColumns迅速剝離的拖尾字符,並轉換爲日期。

隨着固定DD.MM.YYYY格式的文本是 - 看樣日期,

with selection 
    .TextToColumns Destination:=.cells(1, 1), DataType:=xlFixedWidth, _ 
        FieldInfo:=Array(Array(0, xlDMYFormat), Array(10, xlSkipColumn)) 
    .numberformat = "dd.mm.yyyy" 
end with 

隨着文本是 - 看樣日期顯示日期之後的空間,尾隨文本之前,

With Selection 
    .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, ConsecutiveDelimiter:=True, _ 
        Tab:=False, Semicolon:=False, Comma:=False, Space:=True, Other:=False, _ 
        FieldInfo:=Array(Array(1, xlDMYFormat), Array(2, xlSkipColumn)) 
End With 

如果TextToColumns是給你與保加利亞月份名稱的問題(VBA很US-EN-中心),那麼只需一行添加到您現有的代碼,並有選擇地設置單元格格式。

with Selection 
    .Replace What:=" г.", Replacement:=vbNullString, LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
      ReplaceFormat:=False 
    .value = .value2 
    .numberformat = "dd.mm.yyyy" 
end with 

我用Selection這裏(not particularly recommended),但你應該能夠輕鬆轉換。

+0

以下是日期的示例列表。這會幫助你調整VBA嗎? http://pastebin.com/ePwiEd3w 此外,我可以看到你已經使用TextToColumns,我想這意味着我需要一個空的列在某個地方?或不? – zkvvoob

+0

只是爲了澄清,因爲我不太熟練VBA:應該在原始數據數組中的某個位置存在空列,請在日期列之後(因爲它不是唯一的列)? 這是如果我使用上面的第二個片段會發生什麼:http://imgur.com/a/fPvo5; 如果我使用第一個,那麼'17'會從當年開始刪除。 如果使用最後一個,尾部字符會被刪除,但剩下的仍然是Excel的文本。 :( – zkvvoob

+0

如何讓''г.「'在VBA代碼中顯示而不被回覆爲'」?「'?'г'實際上是unicode'ChrW(1075)'VBA代碼不會在沒有ChrW – Jeeped