Hàm tách số và ngày, tháng, năm từ 1 chuổi. (1 người xem)

  • Thread starter Thread starter be_09
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

be_09

Biên Hòa, Đồng Nai
Tham gia
9/4/11
Bài viết
9,972
Được thích
9,882
Nghề nghiệp
Công chức
01: Dùng tách số: Hàm này chỉ sử dụng tốt nhất cho việc tách số từ 1 chuổi.

=MAX(IF(ISNUMBER(MID(SUBSTITUTE(A2," ",""),ROW(INDIRECT("1:"&LEN(A2))),{6,7})+0),MID(SUBSTITUTE(A2," ",""),ROW(INDIRECT("1:"&LEN(A2))),{6,7})+0))

(hàm hơi dài các bạn nhập liên tục)

02: Dùng tách ngày, tháng, năm:
Khi sử dụng hàm này để tách ngày, tháng năm từ 1 chuổi thì được kết quả là số ngày (ngày 08/10/2011 ta được kết quả là 44112. Theo mặc định, ngày 01/01/1900 được bắt đầu tính là 1 nên số ngày được tính liên tục đến ngày 08/10/2011 là 44111 ngày + 1.
Để chuyển đổi kết quả là số ngày thành ngày, tháng, năm. Bạn phải chọn vùng cần chuyển đổi, từ menu vào Format, chọn Cells, chọn thẻ Number và tìm chọn Date, trong khung Type bạn lựa chọn kiểu ngày, tháng, năm thích hợp, và nhấn nút OK.

Lưu ý khi sử dùng hàm để tách ngày:
- Hàm cho kết quả ngày, tháng thì OK, nhưng kết quả năm có thể sai (trên máy tôi thử là năm 2020, tôi nghĩ máy tôi mặc định là ngày 01/01/1909), còn máy các bạn thì sao? các bạn tham khảo và cho ý kiến đóng góp.

- Hàm này chỉ áp dụng cho Office 2003 trở về trước, đối Office 2007 tôi thực hiện chưa thành công, các bạn có thể tham khảo hàm này:

=MAX(IFERROR(MID(SUBSTITUTE(A2," ",""),ROW(INDIRECT("1:"&LEN(A2))),{6,7})+0,0))

Chúc các bạn thực hiện thành công.
 
- Hàm này chỉ áp dụng cho Office 2003 trở về trước, đối Office 2007 tôi thực hiện chưa thành công
Chẳng liên quan gì đến Office cả! Đã nói đến ngày tháng thì phải đặc biệt chú ý đến các thiết lập trong Control Panel
Nếu Control Panel thiết lập là M/d/yy là hàm của bạn sai
 
Bạn cho 1thí dụ chuỗi ban đầu và kết quả sau khi tách là số, hoặc là ngày tháng xem? tôikhông biết cách thử công thức này. Nếu có file minh hoạ thì tốt quá.
Cán ơn.
 
Bạn cho 1thí dụ chuỗi ban đầu và kết quả sau khi tách là số, hoặc là ngày tháng xem? tôikhông biết cách thử công thức này. Nếu có file minh hoạ thì tốt quá.
Cán ơn.
Giả sử chuổi gốc nằm tại A2 (giả sử là chuổi Ngày 08/10/2010) thì hàm =MID(SUBSTITUTE(A2," ",""),ROW(INDIRECT("1:"&LEN(A2))),{6,7}) sẽ cho ra 1 mảng như hình

untitled.JPG

Thấy ngay rằng số "bự" nhất là 08/10/20 <===> ngày 8 tháng 10 năm 2020
Thêm nữa:Con số {6, 7} trong công thức cũng không mấy đúng ---> Ngày tháng viết ngắn nhất có độ dài 6 ký tự và viết dài nhất ra đến 10 ký tự ---> Lý ra {6, 7} phải sửa lại thành {6,7,8,9,10}
Nhưng đàng nào cũng bị "vướng" lỗi "hiểu lầm" giống như hình trên
Ngoài ra còn liên quan đến Control Panel
Nói chung: Công thức này khỏi cần phải suy nghĩ ---> Tìm hướng khác hay hơn
 
Lần chỉnh sửa cuối:
Giả sử chuổi gốc nằm tại A2 (giả sử là chuổi Ngày 08/10/2010) thì hàm =MID(SUBSTITUTE(A2," ",""),ROW(INDIRECT("1:"&LEN(A2))),{6,7}) sẽ cho ra 1 mảng như hình

Thấy ngay rằng số "bự" nhất là 08/10/20 <===> ngày 8 tháng 10 năm 2020

Trước mắt, chuỗi "ngày 08/10/2010" sau khi tách được kết quả 08/10/2010 là hoàn toàn sai

Thứ hai: chuỗi "Ngày 19/02/2010" sau khi tách thì lại ra kết quả 09/02/2020, vì số này lớn hơn "19/02/2" + 0 (=19/02/2002)

Kể cả ngày tháng năm với 2 ký số năm như "ngày 16/11/10" kết quả cũng lại là sai: 11/10/2011!

Lưu ý khi sử dùng hàm để tách ngày:
- Hàm cho kết quả ngày, tháng thì OK, nhưng kết quả năm có thể sai (trên máy tôi thử là năm 2020, tôi nghĩ máy tôi mặc định là ngày 01/01/1909), còn máy các bạn thì sao? các bạn tham khảo và cho ý kiến đóng góp.

Không chỉ sai năm, mà còn sai tháng, sai ngày
Bất kỳ máy nào cũng chỉ có 2 dạng có sẵn là năm bắt đầu từ 1900 và 1904. Bắt đầu 1909 là không hề có.

Ngoài ra, với tiêu đề topic "Hàm tách sốngày, tháng, năm từ 1 chuổi." tôi đã thử với 1 chuỗi chứa số "abc12456890" , và sai bét bè be.
 
Lần chỉnh sửa cuối:
Trước mắt, chuỗi "ngày 08/10/2010" sau khi tách được kết quả 08/10/2010 là hoàn toàn sai

Thứ hai: chuỗi "Ngày 19/02/2010" sau khi tách thì lại ra kết quả 09/02/2020, vì số này lớn hơn "19/02/2" + 0 (=19/02/2002)

Kể cả ngày tháng năm với 2 ký số năm như "ngày 16/11/10" kết quả cũng lại là sai: 11/10/2011!



Không chỉ sai năm, mà còn sai tháng, sai ngày
Bất kỳ máy nào cũng chỉ có 2 dạng có sẵn là năm bắt đầu từ 1900 và 1904. Bắt đầu 1909 là không hề có.

Ngoài ra, với tiêu đề topic "Hàm tách sốngày, tháng, năm từ 1 chuổi." tôi đã thử với 1 chuỗi chứa số "abc12456890" , và sai bét bè be.
Tóm lại là tác giả cũng nghĩ ra được 1 thuật toán khá hay, đáng tiếc là sai
Em "diễn nôm" thuật toán trên thành code, sư phụ sẽ hiểu liền
PHP:
Function TachNgay(Chuoi As String) As Double
  Dim Tmp As String, i As Long, j As Long, tmpVal As Double, tmpMax As Double
  On Error Resume Next
  Chuoi = Replace(Chuoi, " ", "")
  For i = 1 To Len(Chuoi)
    For j = 6 To 10
      Tmp = Mid(Chuoi, i, j)
      tmpVal = CDate(Tmp)
      If tmpVal > tmpMax Then tmpMax = tmpVal
    Next
  Next
  TachNgay = tmpMax
End Function
Lý ra tác giả chỉ lấy 6 đến 7 ký tự, em làm chắc ăn hơn 1 chút: Lấy từ 6 đến 10 ký tự... Nhưng nói chung là.. VẪN SAI
Ẹc... Ẹc...
 
Công thức nhìn thì hiểu rồi, hiểu từ đầu cơ, nhưng cái không hiểu là chỗ này:

- Tại sao lấy 6 và 7, trong khi ngày tháng quy ước là tối thiểu 8.
- Tại sao giới hạn 6, 7 và kể cả 10, trong khi tiêu đề ghi là "Hàm tách số và ngày, tháng, năm từ 1 chuổi."
- Tại sao khi năm 2011 bị sai thành 2020 mà lại kết luận do máy để mặc định 1909. Nếu test chuỗi khác: năm 1978 biến thành 2019 thì kết luận mặc định máy là bao nhiêu?
- Tại sao ra kết quả còn đang sai không biết do đâu, mà đã chúc mọi người thực hiện thành công.
...

Có lẽ nên sửa lại tiêu đề chăng?
 
Chào các bạn GPE, các bạn vui lòng giúp mình công thức tách ngày tháng năm. (hoặc link)
Ví dụ: 13122011 thành 13/12/2011 ( ngày 13 tháng 12 năm 2011)
Cám ơn các bạn
 
Lần chỉnh sửa cuối:
Chào các bạn GPE, các bạn vui lòng giúp mình công thức tách ngày tháng năm. (hoặc link)
Ví dụ: 13122011 thành 13/12/2011 ( ngày 13 tháng 12 năm 2011)
Cám ơn các bạn
Bạn dùng công thức này thử xem:
Mã:
=TEXT(A1,"00-00-0000")
 
Web KT

Bài viết mới nhất

Back
Top Bottom