(Xin giúp) Code nhận diện và điều chỉnh dữ liệu ngày tháng

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

leolas

Thành viên mới
Tham gia
2/11/07
Bài viết
25
Được thích
4
Thân chào các bạn trên GPE
Mình có làm một file tổng hợp hàng nhập, dữ liệu được nhận từ nhiều nguồn, trong các dữ liệu này có các thông số "ngày, tháng, năm" là chủ yếu. Đa số các nguồn dữ liệu được trích xuất từ các phần mềm khai báo Hải quan nên dữ liệu "ngày, tháng, năm" thường là dạng text, một số lại được xuất theo định dạng English (mmm/dd/yyyy) hoặc (dd/mmm/yyyy), một số nhập tay theo định dạng Việt Nam (dd/mm/yyyy) ...
Mình đã thử dùng chức năng Text To Columns của excel, hoặc copy+ paste value, rồi định dạng lại cho toàn bảng tính nhưng do trên một cột có xem lẫn nhiều định dạng ngày, tháng, năm nên vẫn còn bị lỗi hoài, phải dò để chỉnh tay lại, mà bảng tính thì có nhiều cột ngày với số lượng vài ngàn dòng.
Mình muốn có một code VB để khi mình chạy code, nó sẽ nhận diện được hết các lỗi định dạng "ngày, tháng, năm" trong bảng tính và điều chỉnh thống nhất về định dạng "dd-mm-yy". Mình có đính kèm file dữ liệu từ một nguồn mình đã nhận về.
Chân thành cám ơn.
 

File đính kèm

Thân chào các bạn trên GPE
Mình có làm một file tổng hợp hàng nhập, dữ liệu được nhận từ nhiều nguồn, trong các dữ liệu này có các thông số "ngày, tháng, năm" là chủ yếu. Đa số các nguồn dữ liệu được trích xuất từ các phần mềm khai báo Hải quan nên dữ liệu "ngày, tháng, năm" thường là dạng text, một số lại được xuất theo định dạng English (mmm/dd/yyyy) hoặc (dd/mmm/yyyy), một số nhập tay theo định dạng Việt Nam (dd/mm/yyyy) ...
Mình đã thử dùng chức năng Text To Columns của excel, hoặc copy+ paste value, rồi định dạng lại cho toàn bảng tính nhưng do trên một cột có xem lẫn nhiều định dạng ngày, tháng, năm nên vẫn còn bị lỗi hoài, phải dò để chỉnh tay lại, mà bảng tính thì có nhiều cột ngày với số lượng vài ngàn dòng.
Mình muốn có một code VB để khi mình chạy code, nó sẽ nhận diện được hết các lỗi định dạng "ngày, tháng, năm" trong bảng tính và điều chỉnh thống nhất về định dạng "dd-mm-yy". Mình có đính kèm file dữ liệu từ một nguồn mình đã nhận về.
Chân thành cám ơn.
Làm thủ công mà nhanh hơn code có được không?
Đã ẩn lưới còn tô trắng cả cột C: F làm chi vậy, đây là nguyên nhân làm cho File ì ạch và làm tăng dung lượng bất thường.
 
Lần chỉnh sửa cuối:
Upvote 0
Thân chào các bạn trên GPE
Mình có làm một file tổng hợp hàng nhập, dữ liệu được nhận từ nhiều nguồn, trong các dữ liệu này có các thông số "ngày, tháng, năm" là chủ yếu. Đa số các nguồn dữ liệu được trích xuất từ các phần mềm khai báo Hải quan nên dữ liệu "ngày, tháng, năm" thường là dạng text, một số lại được xuất theo định dạng English (mmm/dd/yyyy) hoặc (dd/mmm/yyyy), một số nhập tay theo định dạng Việt Nam (dd/mm/yyyy) ...
Mình đã thử dùng chức năng Text To Columns của excel, hoặc copy+ paste value, rồi định dạng lại cho toàn bảng tính nhưng do trên một cột có xem lẫn nhiều định dạng ngày, tháng, năm nên vẫn còn bị lỗi hoài, phải dò để chỉnh tay lại, mà bảng tính thì có nhiều cột ngày với số lượng vài ngàn dòng.
Mình muốn có một code VB để khi mình chạy code, nó sẽ nhận diện được hết các lỗi định dạng "ngày, tháng, năm" trong bảng tính và điều chỉnh thống nhất về định dạng "dd-mm-yy". Mình có đính kèm file dữ liệu từ một nguồn mình đã nhận về.
Chân thành cám ơn.
Thử làm theo cách sau:
Bước 1: Chọn C5: C204 rồi vào Data > Text to Columns.
- Hộp thoại Step 1 hiện ra chọn Fixed with rồi nhấn Next.
- Hộp thoại Step 2 hiện ra nhấn Next.
- Hộp thoại Step 3 hiện ra nhấn Finish.

Bước 2: Chọn C5: C204 và click phải chọn Format Cell rồi định dạng như hình 2.
Các cột khác làm tương tự.

A_TextTo.GIF

Hình 2:
A_Hinh.GIF
 
Upvote 0
Làm thủ công mà nhanh hơn code có được không?
Đã ẩn lưới còn tô trắng cả cột C: F làm chi vậy, đây là nguyên nhân làm cho File ì ạch và làm tăng dung lượng bất thường.
Do là file của các bộ phận khác gửi tới nên không biết file có định dạng lung tung như thế. Cám ơn sự nhắc nhở của bác Be09.
Có dùng Text to Columns nhưng mới dùng tới step 1, chưa biết Step 2 & 3, nay có bác hướng dẫn mới biết. Đã làm theo cách đó rất tốt, cám ơn bác.
Mỗi ngày mình nhận được nhiều file như vậy, rồi mới tổng hợp lại. Xử lý các cột ngày thủ công như vậy cũng được, nhưng để nhanh hơn, làm phiền bác có thể viết dùm code làm việc đó, khi chạy code, sẽ hỏi khoản cột cần xử lý, mình sẽ nhập vào 1,2 hoặc nhiều khoản cột, chương trình sẽ xử lý tuần tự các khoản cột đó. Chân thành cám ơn
 
Upvote 0
Tự động với chả tự động;
Bạn có trong tay số liệu sau thì là ngày tháng nào: 12/01/2019 & 10/8/2019 thì chỉ có trời mới biết đó là những ngày của tháng nào?!
 
Upvote 0
Xin lỗi, vậy dữ liệu đầu vào của mình không được rõ ràng, để mình làm thủ công vậy. Cám ơn các bác đã đọc bài
 
Upvote 0
Xin lỗi, vậy dữ liệu đầu vào của mình không được rõ ràng, để mình làm thủ công vậy. Cám ơn các bác đã đọc bài
Thử sử dụng File, Copy dữ liệu và Paste vào từ dòng 5 rồi chạy code.
Chuyển File xuống bài 12.
 
Lần chỉnh sửa cuối:
Upvote 0
Thử sử dụng File, Copy dữ liệu và Paste vào từ dòng 5 rồi chạy code.
Mình chạy code thì 90% ra đảo ngược ngày với tháng. Mình cũng có tập làm thử một Record macro chạy Text to columns, nếu làm thủ công thì Ok, nhưng khi chạy macro vừa tạo thì lại chạy không đúng. Do dữ liệu nhiều nguồn và chưa kiểm soát được nên cũng hơi rối. Rất cám ơn bác Be09 đã theo dõi bài viết và có hướng dẫn hữu ích.
Mình thấy câu hỏi này của bác rất đúng "Làm thủ công mà nhanh hơn code có được không? ", nên chắc mình chọn làm thủ công.
Một lần nữa cám ơn bác Be09
 
Upvote 0
Mình chạy code thì 90% ra đảo ngược ngày với tháng. Mình cũng có tập làm thử một Record macro chạy Text to columns, nếu làm thủ công thì Ok, nhưng khi chạy macro vừa tạo thì lại chạy không đúng. Do dữ liệu nhiều nguồn và chưa kiểm soát được nên cũng hơi rối. Rất cám ơn bác Be09 đã theo dõi bài viết và có hướng dẫn hữu ích.
Mình thấy câu hỏi này của bác rất đúng "Làm thủ công mà nhanh hơn code có được không? ", nên chắc mình chọn làm thủ công.
Một lần nữa cám ơn bác Be09
Dữ liệu nhiều nguồn quá và mỗi người nhập liệu mỗi kiểu nên nó lộn xộn quá, tôi chỉ làm theo quán tính nhưng không có thời gian để kiểm tra hết dữ liệu. Vì vậy, chỗ nào chưa đúng thì bạn copy kết quả đó ra sheet khác thì tôi sẽ xem xét riêng trường hợp đó nó thuộc dạng nào mới tính tiếp.

Vì tôi cũng chẳng hiểu nguồn dữ liệu xuất phát từ đâu, nếu tôi làm thì tạo 1 Calendar để chọn kiểu nhập liệu cho thống nhất.
 
Upvote 0
Thân chào bác Be09
Nguồn dữ liệu này là từ nhiều bộ phận khác gởi về, mình chỉ tổng hợp lại thôi, nên có cái khó là thống nhất định dạng. Về phần test thử thì trình bày với bác như sau:
Cũng File đã gởi bác xem, mình copy thêm Sheet Dữ liệu ra thêm 3 sheet nữa.
- Các dữ liệu ngày trên trong sheet Dữ liệu là như file gốc mình nhận được, các ngày trên đó về mặt hiển thị trực quan là đúng hết, chỉ có là không đồng nhất về định dạng và có một số không dùng format cell để định dạng được. Trong sheet này theo mình có 2 dạng chính:
* Dạng xuất từ phần mềm ra thì dạng này không dùng format cell được, nhưng khi mình sửa ngày (vd: 03//05/2019 thành 0405/2019) thì nó lại trở thành định dạng ngày bình thường, có thể format được
* Dạng nhập tay, dạng này thì format cell bình thường
- Sau khi copy ra 3 sheet nữa mình làm như sau:
* sheet 1, mình dùng Text to Columns xử lý thủ công: OK hết các cột
* sheet 2, mình chạy code của bác (mình có sửa code chỗ With sheet1 = With sheet3), thì nó có 3 trường hợp: định dạng Đúng, định dạng Sai, định dạng Như cũ (mình có tô màu phân biệt)
* sheet 3, do mình thấy khi chạy code của bác ở sheet 2 thì cột đầu tiên code chạy ra đúng hết, nên mình có dùng thông số của cột C trong code: FieldInfo:=Array(0, 4) cho các cột sau (mình sửa mò, chứ mình cũng chưa hiểu được thông số này là gì), thì code chạy ra Phần đúng nhiều hơn hẳn, phần sai lại nằm xen kẽ ở một số chỗ.
Mình gởi lại file đó, lúc nào bác có thời gian thì bác xem qua. Cám ơn bác nhiều!
 

File đính kèm

Upvote 0
Vậy cuối cùng bạn muốn format là m/d/yyyy hay dd/mm/yyyy ?
 
Upvote 0
Thân chào bác Be09
Nguồn dữ liệu này là từ nhiều bộ phận khác gởi về, mình chỉ tổng hợp lại thôi, nên có cái khó là thống nhất định dạng. Về phần test thử thì trình bày với bác như sau:
...........................................................................................
Mình gởi lại file đó, lúc nào bác có thời gian thì bác xem qua. Cám ơn bác nhiều!
Tôi sửa code lại để bạn thuận tiện sử dụng code đó cho sheet mới, chỉ cần Copy cái nút sang sheet mới rồi chạy code.
 

File đính kèm

Upvote 0
Tôi nhớ cách đây đôi tháng có người viết code chuẩn hoá cái vụ ngày tháng lộn xộn này rồi. Thớt là thành viên đã hơn 10 năm không lẽ lại không biết cách tìm thử.
Nếu thử rồi mà không được thì cũng nên cho tác giả biết để người ta cải tiến.
 
Upvote 0
bạn xem bài này thử
 
Upvote 0
bạn xem bài này thử
Bài viết của Topic đó chỉ xử lý 1 cột thôi, File bài 1 Của Topic cần xử lý cùng lúc đến 5 cột.
 
Upvote 0
Bài viết của Topic đó chỉ xử lý 1 cột thôi, File bài 1 Của Topic cần xử lý cùng lúc đến 5 cột.
Thì báo cho tác giả biết rằng mình cần sửa code thế nào để có thể gọi hàm 5 lần, xử lý 5 cột.
Trừ phi 5 cột liên quan đến nhau thì đúng là cần xử lý cùng lúc thật. Và loại yêu cầu này thì đúng là chữa cháy, không nên sửa code.
 
Upvote 0
Chân thành cám ơn sự hướng dẫn của các bạn
 
Upvote 0
Web KT

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

Back
Top Bottom