Chuyển ngày tháng từ nhiều định dạng về định dạng ngày tháng năm
Xin chào các bạn,
Nhờ các bạn giúp đỡ OT trường hợp chuyển dữ liệu ngày tháng trong cột A đưa sang cột B trong file kèm với ạ.
2114
Xin chào befaint,
Cảm ơn bạn đã giúp đỡ, code nhanh & chính xác rồi ạ. 🙂
OT chúc bạn nhiều sức khỏe.
OT cho vòng lặp duyệt hết cột A có giá trị, dùng IsNumeric kiểm tra xem có phải là số không, nếu là số thì dùng Hàm DateOfTime, không thì dùng hàm DateOfString.
Function DateOfString(Text$, Optional FormatType$ = "*/*/* *") As Date
Dim S$()
If Not Text Like FormatType Then Exit Function
S = Split(Split(Text, " ")(0), "/")
DateOfString = DateSerial(S(2), S(0), S(1))
Erase S
End Function
Function DateOfTime(inDate As Date) As Date
DateOfTime = DateSerial(Year(inDate), Month(inDate), Day(inDate))
End Function
www.giaiphapexcel.com/diendan/threads/chuy%E1%BB%83n-ng%C3%A0y-th%C3%A1ng-t%E1%BB%AB-nhi%E1%BB%81u-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-v%E1%BB%81-%C4%91%E1%BB%8Bnh-d%E1%BA%A1ng-ng%C3%A0y-th%C3%A1ng-n%C4%83m.143935/
Khóa học SprinGO phù hợp
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Tất nhiên phần mềm nào cũng xuất ra dữ liệu thống nhất. Hoặc toàn ngày/tháng/năm hoặc toàn tháng/ngày/năm hay gì khác nữa. Đã lấy 1 chuẩn thì mọi dòng đều cùng chuẩn ấy.
Ở đây ta có thể đoán mà không cần tập tin của chủ thớt.
Nhìn dữ liệu thì có thể đoán là phần mềm xuất theo chuẩn tháng/ngày/năm. Nhưng khi load vào Excel thì Excel sẽ tự "cố" (???) chuyển thành ngày tháng. Vd. 09/02/2019 (chuẩn tháng/ngày/năm). Cái này có thể "thử" chuyển thành ngày tháng được. Thiết lập trên máy thớt là ngày/tháng/năm (???) nên Excel "thử" và cho là 09 là ngày, 02 là tháng. Vì thế chuyển thành 09/02/2019. Tất nhiên 09/02/2019 là ngày tháng sai so với "dụng ý" của phần mềm – phải là ngày 02 tháng 09 (chuẩn tháng/ngày/năm)
Còn vd. 09/13/2013 theo thiết lập ngày/tháng/năm của system thì không thể cố chuyển thành ngày tháng được nên để nguyên.
Tôi nghĩ chắc là khi load dữ liệu vào Excel bạn có thiết lập trong system là ngày/tháng/năm.
Bạn thử làm như sau: Vào Control Panel -> chọn Mỹ (USA) -> sẽ có dạng tháng/ngày/năm -> đóng CP -> mở Excel -> mở tập tin Date.xlsx -> chọn ô cần dán dữ liệu -> mở tập tin Data.txt -> chọn toàn bộ -> Ctrl + C -> chuyển về Excel -> Ctrl + V.
Nhưng lúc đó sẽ có y như trong tập tin TXT, vd.
08/29/2019 22:52:12
09/02/2019 23:09
Mà ta đang muốn có
29/08/2019 22:52:12
02/09/2019 23:09
cơ mà.
Bạn làm phương pháp của thế kỷ 20. Thời buổi bi giờ không ai copy/paste cả.
Từ file text thì phải import vào Excel.
Nếu dữ liệu không đồng bộ thì thử nghiên cứu giải quyết bằng Power Query. MS ra công cụ này với mục đích chính là để import dữ liệu cần xử lý trước khi đưa vào bảng tính.
Theo tôi thấy thì file text của bạn chưa chắc đã không đồng bộ. Vì bạn copy/paste cho nên những chỗ Excel kết được là ngày thì sẽ là ngày và những chỗ không kết được sẽ tự động cho là text. Nếu muốn copy/paste thì phải format cột là text trước rồi dùng công thức sử lý sau.
Import theo text. Sau đó sử lý bằng công thức.
Thay đổi người? Thế công ty tuyển người thẳng từ "ngoài đường" vào à? Tuyển người mà ngay cả ABC Windows không biết à? Không biết vào CP để thay đổi thiết lập? Nhân viên mở tập tin TEXT mà "nó" bắt phải chọn encoding, nó đưa ra các lựa chọn mà không biết chọn cái gì? Thì hoặc là cho đi học một khóa ngắn hạn hoặc là sa thải. Thế thôi. Nếu công ty tuyển người chưa biết gì thì công ty phải đào tạo họ. Còn nếu tuyển người có "chứng chỉ" tin học mà sau đó lòi ra là nhân viên không biết gì thì gửi cho nhân viên "tối hậu thư". Thế thôi.
Tuyển người làm việc mà cứ lý luận là nhân viên của tôi không biết gì, ngay cả ABC. Bó tay
Thế bạn đã thử làm như tôi hướng dẫn không? Chỉ copy/paste. Nếu được thì dạy ai đó cách thao tác đổi thiết lập trong CP mất bao nhiêu thời gian? 5 phút? Hay theo bạn việc thay đổi thiết lập trong CP quá khó và nhân viên không thể tiếp thu được? Nhân viên "thông minh" ở mức đó thì nếu giữ lại thì cũng chỉ nên ở cương vị gác cổng hoặc quét dọn mà thôi.
Theo tôi nguyên tắc là nếu tập tin TXT ở dạng tháng/ngày/năm thì trước khi copy/paste phải đổi thiết lập trong CP thành tháng/ngày/năm. Sau khi copy/paste thì đổi lại như cũ. Thế thôi.
Tức là không phải nhân viên sợ công ty sa thải mình mà là công ty sợ nhân viên sa thải mình? Hơi lạ.
Giống như không ít trường hợp ô sin mà như bà chủ. Ô sin ho một tiếng là chủ sợ xanh mặt. 😀
Thớt thử xem sao
Thôi được. Nếu công ty nghèo, nhân viên luôn dọa sa thải chủ thì ngoài thay đổi thiết lập trong CP như huuthang_bd làm thì bạn thử test xem
Tôi giả sử là tập tin luôn như tập tin đính kèm.
————
Nếu không muốn tách thời gian sang cột riêng thì đổi thành
Dùng code lấy dữ liệu file data.txt
Như tôi đã khẳng định, chả có phần mềm nào đưa ra kết quả không đồng bộ cả. Chuyện không đồng bộ xảy ra khi bạn copy dữ liệu, bên đi và bên đến không tương thích nhau. Như vậy, để giải quyết vấn đề từ đầu mối thì bạn nên có thêm một phần mềm hay công cụ trung gian.
Cơ quan của bạn có người chuyên quản lý máy tính hay không?
Nếu có thì người này thường biết viết script khá giỏi.
Cách hữu hiệu nhất trong trường hợp của bạn là dùng một cái script để chuẩn hoá cái file text nhận được. Ví dụ nhận được file meText.txt thì chuẩn hoá thành file meTextA.txt; người làm việc chỉ phải import file *A.txt thôi. Tất cả trách nhiệm thuộc về cái script chuẩn hoá.
Script thì có thể dùng nhiều dạng: ShellScript (Powershell), VBScript, … Nhưng tôi nghĩ ở bài này thì có lẽ Python script khoẻ (dễ viết) nhất. Ở diễn đàn này có mấy ngừoi làm Python, bạn cứ đưa cái file text mẫu lên người ta sẽ script cho. (nhớ bảo người script chú thích code, Python có cách chú thích rất đẹp của nó)