返回列表 上一主題 發帖

[發問] 請問如何將內容有中華民國日期的字眼抓出來轉成西元日期?

回復 10# GBKEE


    超版就是這各
   SendKeys這各還是第一次接觸
   先收下研究一下
字典兩各字 還真難理解

TOP

回復 3# freeffly

有規則的資料可以用 MID及FIND函數來完成

B2公式
=--(MID(A2,10,3)+1911&MID(A2,13,FIND("日 ",A2)-12))

出來是數字,需設定儲存格格式 - 日期,才會顯示日期
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

我想要在B欄顯示A欄對應的西元日期
請問有辦法做到嗎?
freeffly 發表於 2013-5-30 16:07

以下是 GBKEE 版大的綜合版:
  1. Sub Ex()
  2.     Dim i  As Long, xl_Year As String,  yr As String
  3.    
  4.     With Range("A1:A" & [A1].End(xlDown).Row)
  5.         .Cells(1).Select
  6.         For i = 1 To .Count
  7.             If InStr(.Cells(i), "中華民國") Then
  8.                 '  InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
  9.                 xl_Year = Mid(.Cells(i), InStr(.Cells(i), "中華民國") + 4, 10)      '  年度
  10.                 yr = Trim(Str(Int(Left(xl_Year, InStr(xl_Year, "年") - 1)) + 1911) + Mid(xl_Year, InStr(xl_Year, "年"), InStr(xl_Year, "日") - InStr(xl_Year, "年") + 1))
  11.                 .Cells(i).Offset(, 1) = yr
  12.                 .Cells(i).Offset(, 2) = Left(yr, 4) + "/" + Mid(yr, 6, InStr(yr, "月") - 6) + "/" + Mid(yr, InStr(yr, "月") + 1, InStr(yr, "日") - InStr(yr, "月") - 1)
  13.             End If
  14.         Next i
  15.     End With
  16. End Sub
複製代碼
如何將內容有中華民國日期的字眼抓出來轉成西元日期.rar (13.42 KB)

TOP

本帖最後由 freeffly 於 2013-6-6 11:41 編輯

回復 12# ML089


    這各夠短,也很好用

   試了一下,對於日期的處理我都是用date的方式
   這種方法我現在學習了
字典兩各字 還真難理解

TOP

回復 13# c_c_lai


    這各方式跑起來花了些時間
   不過一樣有達到效果
字典兩各字 還真難理解

TOP

回復 14# freeffly

EXCEL在計算時,很智慧辨識一些文字格式轉化為數值進行計算

XXXX-XX-XX, XXXX/XX/XX, XX/XX, XXXX年XX月XX日 都會視為日期自動換進行計算

XX:XX, XX:XX:XX  都會視為時間自動換進行計算

所以在計算時不見得需要用日期、時間函數還轉煥
.
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 16# ML089


    這我以前倒不知道
   我都東學一點西學一點
   會有遺漏的點
   感謝教導
字典兩各字 還真難理解

TOP

回復 13# c_c_lai
  1. Sub Ex_日期數值()
  2.     Dim i  As Long, xl_Year As Variant
  3.     With Range("B1:B" & [A1].End(xlDown).Row)
  4.         .Cells = "=MID(RC[-1],10,10)"
  5.         .Value = .Value
  6.         .Replace "發", ""
  7.         For i = 1 To .Count
  8.             xl_Year = Split(.Cells(i), "年")
  9.             xl_Year(0) = xl_Year(0) + 1911 & "年"
  10.             .Cells(i) = Trim(Join(xl_Year, ""))
  11.         Next
  12.         .Cells.Replace "年", "/", xlPart
  13.         .Cells.Replace "月", "/"
  14.         .Cells.Replace "日", ""
  15.         .Cells.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlNo
  16.     End With
  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 18# GBKEE
您應用 Split 與 Replace 的技巧,給我很大的啟示及,幫助、瞭解,
謝謝您!
另外再順帶請教: .Cells.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlNo
只 Sort B欄的部分,如果我想要同時能將 A欄一併同時正確地一次完成 Sort,
那如何處理?

TOP

回復 18# GBKEE
我自己摸索,已經找到答案了,謝謝您!
  1. Sub Ex_日期數值()
  2.     Dim i  As Long, xl_Year As Variant
  3.    
  4.     With Range("B1:B" & [A1].End(xlDown).Row)
  5.         .Cells = "=MID(RC[-1],10,10)"
  6.         .Value = .Value
  7.         .Replace "發", ""
  8.         
  9.         For i = 1 To .Count
  10.             xl_Year = Split(.Cells(i), "年")
  11.             xl_Year(0) = xl_Year(0) + 1911 & "年"
  12.             .Cells(i) = Trim(Join(xl_Year, ""))
  13.             .Cells(i).Offset(, 1) = .Cells(i)
  14.         Next
  15.         
  16.         .Cells.Offset(, 1).Replace "年", "/", xlPart
  17.         .Cells.Offset(, 1).Replace "月", "/"
  18.         .Cells.Offset(, 1).Replace "日", ""
  19.         ' .Cells.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlNo
  20.     End With
  21.    
  22.     '  With Sheet3
  23.     '      .Range("A1").CurrentRegion.Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlNo
  24.     '  End With
  25.     '  Range("A1").CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlNo
  26.     Range("A1").CurrentRegion.Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlNo
  27. End Sub
複製代碼

TOP

        靜思自在 : 人的心地是一畦田,土地沒有播下好種子,也長不出好的果實。 -
返回列表 上一主題