Nhờ tách giúp ngày tháng năm

Liên hệ QC

Thẩm Tinh Di

Chỉ mong bình thản nắm tay nàng đi giữa nhân gian
Tham gia
20/5/22
Bài viết
4
Được thích
1
Chào anh chị, em có vấn đề tách ngày tháng nhờ anh chị hỗ trợ dùm.

Lúc trước có 1 bạn tạo giúp hàm bằng google sheet, nhưng hàm này khá bất tiện,phải online có kết nối Internet mới sử dụng được. Nhưng chỗ em làm việc không cho kết nối Internet.

Nhờ anh chị tạo hàm UDF hoặc hàm nào dùng Offline được để tách ngày tháng dùm.

Em cảm ơn.
 

File đính kèm

  • tách ngày tháng.JPG
    tách ngày tháng.JPG
    56 KB · Đọc: 68
  • tách ngày tháng.xlsb
    7.6 KB · Đọc: 36
Thử hàm sau
Mã:
Function ExtractDate(ByVal text As String) As String
Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "3[0-1][-/.]0?2"
    text = re.Replace(text, "")
    re.Pattern = "(\b|\D)(0?[1-9]|[12][0-9]|3[01])[-/.](0?[1-9]|1[012])([-/.](19|20)?\d\d)?(?=$|\D)"
    If re.test(text) Then ExtractDate = re.Execute(text).Item(0).Value
    Set re = Nothing
End Function

Cách dùng
Mã:
=ExtractDate(A1)
 
Upvote 0
Thử hàm sau
Mã:
Function ExtractDate(ByVal text As String) As String
Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    re.Pattern = "3[0-1][-/.]0?2"
    text = re.Replace(text, "")
    re.Pattern = "(\b|\D)(0?[1-9]|[12][0-9]|3[01])[-/.](0?[1-9]|1[012])([-/.](19|20)?\d\d)?(?=$|\D)"
    If re.test(text) Then ExtractDate = re.Execute(text).Item(0).Value
    Set re = Nothing
End Function

Cách dùng
Mã:
=ExtractDate(A1)
Sao anh lại rất dễ tính với bài này vậy? Em thật sự ngạc nhiên với dữ liệu như vậy mà anh vẫn viết code?
 
Upvote 0
Xin lỗi mình post nhầm, nhưng không biết xóa
Nhưng lỡ viết rồi thì cũng thắc mắc luôn là tại sao ngta cần giúp đỡ mà bạn trên lại bảo người chịu giúp là dễ tính? đâu phải ai cũng đủ giỏi để xử lý được vấn đề mình gặp phải.
 
Lần chỉnh sửa cuối:
Upvote 0
Em gửi lại công thức sử dụng trên Google Sheet cho bác nào online thì tham khảo
'=IFERROR(REGEXEXTRACT(REGEXREPLACE(A1;"3[2-9]|[4-9][0-9]|30/2|30/02";"");"\d{1,2}/\d{1,2}/\d{2,4}|\d{1,2}/\d{1,2}");TEXT(A1;"DD/MM/YYYY"))

Còn bác nào gặp trường hợp giống em thì sử dụng hàm UDF offline của anh Batman.

Cảm ơn anh Batman nhiều.
 
Upvote 0
Em gửi lại công thức sử dụng trên Google Sheet cho bác nào online thì tham khảo
'=IFERROR(REGEXEXTRACT(REGEXREPLACE(A1;"3[2-9]|[4-9][0-9]|30/2|30/02";"");"\d{1,2}/\d{1,2}/\d{2,4}|\d{1,2}/\d{1,2}");TEXT(A1;"DD/MM/YYYY"))
Nếu gửi cho đối tác mà đối tác có thiết lập kiểu 12-02-2022 hoặc 12.02.2022 thì công thức trên không tách được. Bạn thử sẽ thấy.
 
Upvote 0
Google Sheets không liên quan gì hệ điều hành để sử dụng nó cả.
Khi dùng Google Sheets trên các hệ điều hành iOS, mac, windows, android, linux... đều cho cùng 1 kết quả.
 
Upvote 0
Em gửi lại công thức sử dụng trên Google Sheet cho bác nào online thì tham khảo
'=IFERROR(REGEXEXTRACT(REGEXREPLACE(A1;"3[2-9]|[4-9][0-9]|30/2|30/02";"");"\d{1,2}/\d{1,2}/\d{2,4}|\d{1,2}/\d{1,2}");TEXT(A1;"DD/MM/YYYY"))
Có thể nhiều người không hiểu ý tôi do tôi viết có thể không rõ.

Tất nhiên Google Sheets chạy ở đâu cũng cho kết quả như nhau. Google Sheets không liên quan gì hệ điều hành.

Cái tôi nói ở đây là công thức trong bài #5 sẽ trả kết quả sai khi người dùng có dữ liệu khác. Không phải Google Sheets làm sai mà là tác giả công thức không lường được sự đa dạng của dữ liệu đầu vào. Và công thức trả về kết quả KHÔNG ĐƯỢC MONG ĐỢI. Lỗi của công thức chứ không phải của Google Sheets.

Tôi cho ví dụ. Công thức sẽ đúng với dữ liệu đầu vào của tác giả. Tức với dữ liệu là aab "akkd 02/03/2022" thì công thức trả về là "02/03/2022". Kết quả này đúng.

Bây giờ tôi nhận được của đối tác tập tin với công thức ở bài #5. Do tôi hàng ngày, từ muôn đời, nhập ngày tháng là 02.03.2022, bởi muôn đời system của tôi có thiết lập thế. Vậy thì chả lý gì tôi lại nhập "akkd 02/03/2022", cái tay, cái đầu từ muôn đời nó luôn phải viết là "akkd 02.03.2022". Với dữ liệu đầu vào như thế thì công thức bài #5 trả về kết quả "akkd 02.03.2022". Rõ ràng kết quả này KHÔNG ĐƯỢC MONG ĐỢI.

Hoặc ai đó copy và paste dữ liệu từ đâu đó vào cột A, hàng nghìn dòng có dạng 02.03.2022, thì để ra được kết quả thì phải ngồi sửa tay hàng nghìn dữ liệu đầu vào thành dạng 02/03/2022? Thế có mà khóc ròng. Chính vì thế trong code của mình tôi xét cả 3 delimeter: ".", "-", "/".

Tất nhiên người viết công thức có thể chỉ phục vụ delimeter là ký tự "/". Vì thế trong bài #6 tôi không nói công thức SAI. Tôi chỉ lưu ý là có thể không tách được. Gì chứ nói về độ chính xác của câu từ thì batman1 hơi bị tốt.

Gì chứ nói về hiểu biết system, hệ điều hành, và lô gíc thì batman1 này không kém đâu. Dạy được batman1 hơi bị khó đấy.
 
Lần chỉnh sửa cuối:
Upvote 0
Chính vì thế trong code của mình tôi xét cả 3 delimeter: ".", "-", "/".

Tất nhiên người viết công thức có thể chỉ phục vụ delimeter là ký tự "/"
Em không có ý đá đểu gì đâu nhưng chữ này là "delimiter". Tại thấy bác viết tới 2 lần thì chắc không phải là vô ý nên nhắc bác để lần sau tránh nhầm lẫn
 
Upvote 0
Em không có ý đá đểu gì đâu nhưng chữ này là "delimiter". Tại thấy bác viết tới 2 lần thì chắc không phải là vô ý nên nhắc bác để lần sau tránh nhầm lẫn
Không phải gõ nhầm đâu mà do tôi không thạo tiếng Anh. Đang bí tiếng Việt nên dùng tiếng Anh, nhưng dốt tiếng Anh mà. :D

Nếu tôi dùng "ký tự ngăn cách" hay "dấu phân cách" thì lại ổn.

Tôi rất rõ ràng. Nếu tôi sai thì cứ góp ý. Sai là sai, không nhập nhèm được. Nhưng nếu tôi không sai thì nên nói rõ. Rạch ròi như thế cũng đôi khi làm mất lòng người khác nhưng chịu thôi.
 
Upvote 0
Không phải gõ nhầm đâu mà do tôi không thạo tiếng Anh. Đang bí tiếng Việt nên dùng tiếng Anh, nhưng dốt tiếng Anh mà. :D

Nếu tôi dùng "ký tự ngăn cách" hay "dấu phân cách" thì lại ổn.

Tôi rất rõ ràng. Nếu tôi sai thì cứ góp ý. Sai là sai, không nhập nhèm được. Nhưng nếu tôi không sai thì nên nói rõ. Rạch ròi như thế cũng đôi khi làm mất lòng người khác nhưng chịu thôi.
Vâng bác, em cũng có thạo gì đâu. Nhưng lúc đầu em thấy nó có vẻ sai, vì thường em cũng hay gõ chữ này, nếu bác không sai thì chắc lâu nay em viết sai, vì thế em phải lên google dò lại chữ đó. Chắc chắn đúng rồi mới dám góp ý đấy chứ :D
 
Upvote 0
Ợ ợ.

Lấy đâu ra đối tác đối tương nào chứ. Dữ liệu của người ta thì sao người ta lại không biết, người ta đang cần giải quyết công việc của chính người ta.

Người làm ra cái công thức đó đã nhận được dữ liệu và phân tích kỹ rồi. Không có lý do gì người lại không biết, trọng điểm là người ta có dữ liệu.

Mấy cái dấu đó phải có kinh nghiệm thu thập dữ liệu thực tế của người dùng (...) thì mới liệt kê gần hết được, bởi nó nhiều lắm.

(...): Ngôn ngữ trên mạng xã hội, văn bản nhập trên điện thoại ấy... người ta nhập nhập, gõ gõ chứ liên quan gì định dạng hệ thống khi nhập đâu.

1653356189207.png
 
Upvote 0
Nếu không có đối tác thì thôi. Người ta chỉ lưu ý thôi chứ có bắt phải sửa để phục vụ đối tác nào đâu?

Mà trên GPE hay bất cứ diễn đàn nào thì giúp người hỏi chỉ là một, giúp hàng nghìn người đang và sẽ đọc mới là cái quan trọng. Nếu không thì gửi lời giải qua email cho rồi, đăng làm gì trên diễn đàn. Và lời giải cũng như lưu ý có thể dành cho những người khác có cùng vấn đề và có đối tác, hoặc bản thân họ từ muôn đời có dữ liệu kiểu 02.03.2022, 02-03-2022

Vì định dạng trong system của người ta muôn đời thế thế, nên muôn đời người ta luôn nhập thế thế, nên nếu là đồng nghiệp thì người ta có dữ liệu đầu vào thế thế. Và với dữ liệu đầu vào thế thế thì công thức không trả về kết quả mong đợi. Nói về thiết lập system là có ý như thế.
 
Upvote 0
Ối dời. Chẳng có liên quan tí tẹo tèo teo nào tới thiết lập thiết tạo gì ở đây cả.
Đây là dữ liệu nhận được từ người dùng đã gõ, bài toán yêu cầu là với dữ liệu chuỗi đã có như vậy thì xử lý thôi.
Dữ liệu như thế nào thì làm như thế.
Nếu có ý kiến ý cò thì cũng chỉ nói được là công thức đó chỉ làm một trường hợp abc thế này, các trường hợp khác không làm xyz nên kết quả có thể sai, chứ chẳng có cái gì liên quan thiết lập hệ thống ở đây cả, bởi có những người không bao giờ động tới máy tính, hoặc cho dù thiết lập là thế này nhưng họ luôn gõ thế kia.
 
Upvote 0
Không hiểu thì nên im lặng. Thứ nhất thói quen gõ luôn do thiết lập, theo năm tháng nó thành thói quen. Người Việt nếu hàng ngày, qua hàng chục năm đều gõ 02/03/2022 vì thiết lập trong CP nó thế, gõ khác đi thì thành dữ liệu nhái, thì sau đó khi họ nhập dữ liệu thì họ luôn gõ 02/03/2022. Người Ba Lan nếu hàng ngày, qua hàng chục năm đều gõ 02.03.2022 vì thiết lập trong CP nó thế, gõ khác đi thì thành dữ liệu nhái, thì sau đó khi họ nhập dữ liệu thì họ luôn gõ 02.03.2022. Có thành viên còn sống ở Hung-ga-ri đấy. Chắc gì họ có 02/03/2022.
Google sheets không phụ thuộc vào thiết lập nhưng thói quen gõ phụ thuộc vào thiết lập, và thói quen đó tạo ra dữ liệu ở dạng khác với dạng mà công thức mong đợi. Công thức sẽ trả về kết quả không mong đợi, chứ google sheets không liên quan gì ở đây. Thứ nữa là người ta chỉ lưu ý. Thứ tiếp là người ta trả lời không chỉ cho người hỏi. Câu trả lời còn dành cho những người khác có cùng vấn đề. Mà họ có thể có dữ liệu khác. Người đọc chủ đề này có thể có dữ liệu đầu vào 02-03-2022 và công thức kia không cho họ kết quả mong đợi. Những người đọc GPE đâu chỉ từ Việt Nam và đâu chỉ có 02/03/2022.

Nói thế mà cũng không hiểu thì bó tay toàn tập. Có ợ ợ, ối giời thì cũng dừng ở đây. Người có chút liêm sỉ thì chỉ cần nói một lần. Tôi tin là họ có liêm sỉ. Vậy thì tôi chỉ nói ngắn gọn: Không tạm biệt và cũng không hẹn gặp lại. Cũng rất mong họ cũng sẽ nói: Không tạm biệt và cũng không hẹn gặp lại. Cả hai cùng thế đi.

Tôi dừng ở đây
. Dừng là dừng. Thôi kệ.
 
Upvote 0
Mệt quá.
Sai thì nhận sai, có liên quan quái gì thiết lập đâu.
Đã không hiểu, không nắm rõ thực tế xã hội hiện tại lại còn cứ vin vào hệ thống hệ thiếc, rồi cái gì mà thói quen.
Đã nói là có thể người ta không dùng máy tính.
Có biết thói quen hiện tại người ta gõ sờ mát phôn, tha bờ lét như thế nào đâu mà đòi ý kiến hệ thống.
Rõ ràng cái dữ liệu kia không liên quan vụ thiết lập nào cả, bởi dữ liệu đó có thể nhập từ nhiều thiết bị khác nhau (không chỉ từ máy tính).
Vậy nên lại phải nhắc lại:

1653386732451.png
 
Upvote 0
Chào anh chị,. . . . .
Lúc trước có 1 bạn tạo giúp hàm bằng google sheet, nhưng hàm này khá bất tiện,phải online có kết nối Internet mới sử dụng được. Nhưng chỗ em làm việc không cho kết nối Internet.
Như vậy là bạn trước đây đã được thành viên nào đó trên GPE giúp
& như vậy mình hiểu là bạn chủ bài đăng đang lập NICK mới để hỏi việc cũ (!)
. . . . .
$$$$@
 
Upvote 0
Như vậy là bạn trước đây đã được thành viên nào đó trên GPE giúp
& như vậy mình hiểu là bạn chủ bài đăng đang lập NICK mới để hỏi việc cũ (!)
. . . . .
Có nhiều nick thì cũng bình thường. Có bác còn có thêm nick ChanhTQ, HYen, Hoang2013
 
Upvote 0
Bới lông tìm vết chi rồi nghe nặng mùi thuốc súng. Ai thấy ko cần thiết thì cứ bỏ qua bài này. Chủ post thấy ok và cám ơn ngta là đc rùi.
Nhưng tui vẫn thích hóng hớt drama :)))
 
Upvote 0
Web KT
Back
Top Bottom