請教VBA文字字串取出日期部份後,如何轉成西元格式?

大致就是從網上抓下原始資料

在A1格內,其文字部份為

109年12月03日 交易明細

我利用left 與mid等,將字串裡的日期部份取出

程序如下:

[B1] = Left([a1], 3) & "/" & Mid([a1], 5, 2) & "/" & Mid([a1], 8, 2)

然後B1的值=>109/12/03

問題在後半段,我用

Q、 MsgBox [B1] & Chr(10) & Date '比較兩者

會顯示為

109/12/03   

2020/12/03

 

再利用

[B1].NumberFormatLocal = "yyyy/mm/dd" '改成西元曆

又或是利用錄製轉西元曆,但結果B1卻依究顯示109/12/03

而我點擊excel裡的B1格時,其格式卻是轉成自訂或日曆格式,就是無法直接轉成西元曆

另外,我有試著用

msgbox IsDate([B1])

他會顯示true...也就表示B1格內已為日期無誤..所以....我該如何解?

因為我想利用條件式判別

if [B1] <> Date then exit if

、、、、、

可是它不管怎麼跑,因為格式的問題,所以就是無法進入條件式裡..

請大大幫幫忙...感謝

2020-12-03 20:42 發佈
MaverickRay wrote:
大致就是從網上抓下原(恕刪)

呃,樓主,您一定要轉成西元?109不行?
~~因為看您最後的敘述,只是在「進入條件式」。而條件式是if.........

而您又說:msgbox IsDate([B1])他會顯示true

那不就簡單了?
用: if IsDate([B1]) then ..........

這樣不就可以進條件式了?搞定。

另外,有個問題:
MaverickRay wrote:
因為我想利用條件式判別if [B1] <> Date then exit if、、、、

這個語法怪怪的吧? exit 後面可以接if 嗎?呵
Der,misser1
109+1911=2020
1091204+19110000=20201204
109+1911 & "/" & ... ...
snare wrote:
109+1911=20201091204...(恕刪)

謝謝您的回覆,這幾日一直抽空再查這個問題,您講的+1911我有查到.
但昨晚我發現問題的根源出在下載回來的來源檔,雖欄位為中華民國曆如:109/12/09
但細看了下其實是屬於文字格式的
而先前我利用VBA試圖將欄位強制轉成日期格式,諸如語法
Range("R1").numberformatLocal= "yyyy/mm/dd"
或直接轉成中華民國國曆
轉後看格式處是變為自訂,但原先的資料依究是109/12/09 (屬於文字)
這時若用手動在格內自行輸入如12/9
則其會變為2020/12/09 (日期格式)
這可難到我了.因為資料很多筆,不可能一一輸入
當然我又試著用先切割的合式,切割是正常的..
例如left、mid等
查了下好像切出來的資料跟看到的資料是一樣的,表示原始格內的資料是文字
否則以left等方式去抓日期時,其輸出的部份應會變為數值

所以我切是切成了,另要合併回去卻不知要怎麼寫回
例如我將R1格內的109/12/09 分別切到S1、T1、U1格內
使S1=109
T1=12
U1=09
那我要如何再重新組合回原先的109/12/09,且要成為日期格式..
最好是能變回西元曆的
因為我後來發現我想做的是利用條件判斷,當格內日期小於今天時,能將格內的日期欄內之日期劃上刪除線..
以上感謝各位協助。謝謝
https://riverfootmark.blogspot.com/2020/12/vba_8.html
https://riverfootmark.blogspot.com/2020/12/vbasplit.html
參考split與range.NumberFormatLocal 的設定,是否有幫助到。
MaverickRay wrote:
所以我切是切成了,另要合併回去卻不知要怎麼寫回





您不是會嗎??


MaverickRay wrote:
最好是能變回西元曆的


我3樓不就回答加1911就好了,很正常啊
[b1]=Left([a1], 3) +1911 & "/" & Mid([a1], 5, 2) & "/" & Mid([a1], 8, 2)







格式會自動從通用變成日期

內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?