Tách dữ liệu theo từng nhân viên

Liên hệ QC

hadoan-pap

Thành viên tiêu biểu
Tham gia
8/7/15
Bài viết
453
Được thích
18
Kính gửi Anh/Chị.
Kính gửi anh befaint!

Dạ bài toán 1 em đã làm được ạ. Nhưng đến bài toán này thì em thấy nó khá phức tạp và cũng đang chưa có hướng để làm ạ. Vì em code yếu nên làm rất vòng vèo và hơn nữa trường hợp này cũng khá khó để em tự xử lý ạ.

Em có Sheet Input và đầu ra là muốn Như Sheet Output ạ.

Rất mong nhận được sự giúp đỡ của Anh/Chị ạ.

Em Xin chân thành cảm ơn!
 

File đính kèm

  • Book1.xlsx
    13.2 KB · Đọc: 34
Tách dữ liệu dựa vào cột bắt đầu và kết thúc của sheet output à bạn
Còn nhiều chi tiết mà thớt bỏ lửng lắm. Việc chuyển dữ liệu từ Input sang Output phức tạp hơn thớt nghĩ.
Phương pháp thực hiện cũng cần nhiều tư duy như cách chuyển từ Nhật ký chung sang các tài khoản. Bên kế toán người ta có quy trình tiêu chuẩn. Ở đây quy trình tự do nên thớt cần xác định rõ hơn.
Điển hình:
1. bên Input được nảy sinh như thế nào? mỗi phát sinh là phát sinh mới, sau khi chuyển qua Output thì xóa đi?
Hay mỗi ngày hoặc giai đoạn lại có một sheet input mới? sheet cũ được đổi tên khác?
2. các phát sinh đem qua bên Output chỉ cần ghi thêm? hay phải cộng vào phát sinh cũ nếu trùng ngày?

Chú: theo tinh thần "project development" thì đây là giai đoạn đầu của Data Analysis.
 
Upvote 0
Còn nhiều chi tiết mà thớt bỏ lửng lắm. Việc chuyển dữ liệu từ Input sang Output phức tạp hơn thớt nghĩ.
Phương pháp thực hiện cũng cần nhiều tư duy như cách chuyển từ Nhật ký chung sang các tài khoản. Bên kế toán người ta có quy trình tiêu chuẩn. Ở đây quy trình tự do nên thớt cần xác định rõ hơn.
Điển hình:
1. bên Input được nảy sinh như thế nào? mỗi phát sinh là phát sinh mới, sau khi chuyển qua Output thì xóa đi?
Hay mỗi ngày hoặc giai đoạn lại có một sheet input mới? sheet cũ được đổi tên khác?
2. các phát sinh đem qua bên Output chỉ cần ghi thêm? hay phải cộng vào phát sinh cũ nếu trùng ngày?

Chú: theo tinh thần "project development" thì đây là giai đoạn đầu của Data Analysis.
Dạ, dữ lieu nó sẽ chạy bắt đầu từ cột Q đến cột cuối cùng có dữ lieu ngày ạ.

Nó sẽ tìm và tách để tạo ra Sheet mới "Output" ạ. Các dữ lieu liên tiếp và phải giống nhau ở các cột ngày sẽ được tạo thành từng dòng riêng ở sheet Output ạ.

Nó cũng xác định ngày bắt đầu và ngày kết thúc của mỗi khoảng dữ lieu đó để đưa vào 2 cột "Bắt đầu" và "Kết thúc" bên Output ạ.

Em Xin cảm ơn ^^
 
Upvote 0
Dạ, dữ lieu nó sẽ chạy bắt đầu từ cột Q đến cột cuối cùng có dữ lieu ngày ạ.

Nó sẽ tìm và tách để tạo ra Sheet mới "Output" ạ. Các dữ lieu liên tiếp và phải giống nhau ở các cột ngày sẽ được tạo thành từng dòng riêng ở sheet Output ạ.

Nó cũng xác định ngày bắt đầu và ngày kết thúc của mỗi khoảng dữ lieu đó để đưa vào 2 cột "Bắt đầu" và "Kết thúc" bên Output ạ.

Em Xin cảm ơn ^^
Tức là mỗi lần Input sẽ ghi tiếp thêm bên sheet Ouput? thay vì chỉnh lại từ đầu?
Túm lại, những gì đã chuyển qua Output rồi thì để yên đó - loại ghi dữ liệu chắc ăn. Tôi đọc bên Output thấy nó ghi "Kết thúc" ngày nào thì biết là dữ liệu cho đến ngày ấy tin cậy được, không thay đổi về sau?

Xin lỗi, tôi là dân chuyên nghiệp dữ liệu đã vài chục năm. Đối với tôi, Data Integrity là quan trọng nhất.
 
Upvote 0
Tức là mỗi lần Input sẽ ghi tiếp thêm bên sheet Ouput? thay vì chỉnh lại từ đầu?
Túm lại, những gì đã chuyển qua Output rồi thì để yên đó - loại ghi dữ liệu chắc ăn. Tôi đọc bên Output thấy nó ghi "Kết thúc" ngày nào thì biết là dữ liệu cho đến ngày ấy tin cậy được, không thay đổi về sau?

Xin lỗi, tôi là dân chuyên nghiệp dữ liệu đã vài chục năm. Đối với tôi, Data Integrity là quan trọng nhất.
Dạ, file gốc hàng ngày đều được down về và có format kiểu Như sheet Input ạ. Mỗi lần bấm chạy macro thì nó sẽ đẩy , tách dữ lieu ra thành Sheet Output ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn hiểu lầm rồi. Câu hỏi của tôi là: ngày nào đã chuyển qua Output rồi thì để yên, hay có khi cần phải chỉnh lại?

Ví dụ ngày 03/11 bạn chuyển dữ liệu sang Output xong.
Ngày 05/11 bạn chuyển lần nữa. Nếu Input chỉ chứa hai ngày 04 và 05 thì không sao. Nhưng nếu có chứa các ngày trước đó 01, 02, 03 thì phải làm gì?
1. kệ chúng, chỉ lo 04 trở đi
2. nhập 03 trở về trước, trường hợp này thì:
2.1. thay thế dữ liệu 01, 02, 03 có sẵn trong Output
2.2. cộng vào dữ liệu có sẵn trong Output

Nếu bạn khong làm rõ những cái này thì người viết code cho bạn cứ phải chỉnh hoài.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn hiểu lầm rồi. Câu hỏi của tôi là: ngày nào đã chuyển qua Output rồi thì để yên, hay có khi cần phải chỉnh lại?
Dạ, hàng ngày mỗi lần copy dữ lieu mới vào Sheet "Input" sau đó ấn chạy Macro thì nó sẽ sinh ra Sheet Output ạ.

Kiểu Như là mỗi lần ấn chạy macro, nó sẽ xóa Sheet Output đi và tạo ra sheet mới dựa trên dữ lieu mới ạ.
 
Upvote 0
Dạ, hàng ngày mỗi lần copy dữ lieu mới vào Sheet "Input" sau đó ấn chạy Macro thì nó sẽ sinh ra Sheet Output ạ.

Kiểu Như là mỗi lần ấn chạy macro, nó sẽ xóa Sheet Output đi và tạo ra sheet mới dựa trên dữ lieu mới ạ.
Tức là nếu có sự mâu thuẫn ở các ngày trước thì người đọc sẽ không biết.
Ví dụ chỗ Import ngày 03 thì có chứa một mớ dữ liệu ngày 02. Nhưng chỗ Import ngay 04 thì không có. Lúc bạn xóa là xóa mất ngày 02.

Data Migration là nghề ruột của tôi. Cái này tôi có thể nhìn xa hơn bất cứ người nào trên diễn đàn này.
 
Upvote 0
Tức là nếu có sự mâu thuẫn ở các ngày trước thì người đọc sẽ không biết.
Ví dụ chỗ Import ngày 03 thì có chứa một mớ dữ liệu ngày 02. Nhưng chỗ Import ngay 04 thì không có. Lúc bạn xóa là xóa mất ngày 02.

Data Migration là nghề ruột của tôi. Cái này tôi có thể nhìn xa hơn bất cứ người nào trên diễn đàn này.
Dạ cái này là việc update data theo ngày hoặc theo mỗi thời điểm mà user vào để tải về ạ. Sau khi tải về thì họ copy vào sheet Input rồi ấn macro để chạy ra sheet output ạ.

Dạ, em có thể customize lại code để phù hợp với thực tế hơn ạ.
 
Upvote 0
Cái DEV lấy ở đâu ra?
1667898964823.png

Có cột MNV rất quan trọng và hữu ích thì không có gì.

Quy luật nào để có được 2 cột này? Có lời giải thích 2 cột này mới làm được bài này.

1667899028367.png


Không hiểu cột này tính như thế nào? Không lẽ làm bao nhiêu ngày mà kết quả lại đứng im?

1667899131554.png
 

File đính kèm

  • 1667899021122.png
    1667899021122.png
    9.9 KB · Đọc: 4
Upvote 0
Hai điều tôi nêu ra có thể dùng giải thuật khác nhau. Một là ghi đè lên dữ liệu cũ. Hai là ghi tiếp theo và chỉnh lại dữ liệu cũ. Không dễ chỉnh code. Nhất là ưu tiên của mấy người ở đây nằm ở chỗ tốc độ chứ không phải mức rộng của giải thuật.

Về code, tôi không hiểu bạn nói customize/se có ý gì. Có thể tôi hiểu từ này khác bạn, điển hình là tôi dùng se thay vì ze.
Hầu như tất cả các code trên diễn đàn này đều đã được viết đặc thù. Code nào người viết cố gắng viết cho dùng chung thì lại có quá nhiều optional parameters cho nên gây tình trạng quá phức tạp và người ta sợ không biết cách dùng.
 
Upvote 0
Cái DEV lấy ở đâu ra?
View attachment 283120

Có cột MNV rất quan trọng và hữu ích thì không có gì.

Quy luật nào để có được 2 cột này? Có lời giải thích 2 cột này mới làm được bài này.

View attachment 283122


Không hiểu cột này tính như thế nào? Không lẽ làm bao nhiêu ngày mà kết quả lại đứng im?

View attachment 283123
Dạ cái cột "Vai Trò" là có sẵn trong data ạ.

2 cột "Bắt đầu" và "Kết thúc" là lấy từ cột Ngày tương ứng với khoảng dữ lieu giống nhau ạ. Em có gửi ảnh em bôi màu ví dụ ạ.

Cột % thực hiện đó nếu 0.3 thì là 30%, 0.5 thì là 50% ạ.

Em Xin cảm ơn ^^
Bài đã được tự động gộp:

Hai điều tôi nêu ra có thể dùng giải thuật khác nhau. Một là ghi đè lên dữ liệu cũ. Hai là ghi tiếp theo và chỉnh lại dữ liệu cũ. Không dễ chỉnh code. Nhất là ưu tiên của mấy người ở đây nằm ở chỗ tốc độ chứ không phải mức rộng của giải thuật.

Về code, tôi không hiểu bạn nói customize/se có ý gì. Có thể tôi hiểu từ này khác bạn, điển hình là tôi dùng se thay vì ze.
Hầu như tất cả các code trên diễn đàn này đều đã được viết đặc thù. Code nào người viết cố gắng viết cho dùng chung thì lại có quá nhiều optional parameters cho nên gây tình trạng quá phức tạp và người ta sợ không biết cách dùng.
Dạ nhiều khi em code còn yếu nên làm lòng vòng không được tối ưu ạ. Nên có những bài toán khó em hay nhờ các chuyên gia trên này hỗ trợ rồi em đọc hiểu và sửa lại 1 số chỗ cho phù hợp hơn với yêu cầu thực tế của bài toán ạ.

Em cảm ơn anh ^^
 

File đính kèm

  • Date.PNG
    Date.PNG
    7.9 KB · Đọc: 5
Upvote 0
Upvote 0
Không tự nhiên người ta lại hỏi mình. Bạn xem lại trong file ở bài #1 trong sheet "Input" có không?



Không nên bỏ qua bất kỳ vấn đề nào.
Dạ em thiếu xót khi nhập file ví dụ ạ.

Các cột mà không có dữ lieu thì không cần thiết phải xử lý ạ, cứ thế bê từ file gốc sang ạ.

Em gửi lại file ạ
 

File đính kèm

  • Book1.xlsx
    13.2 KB · Đọc: 1
Upvote 0
...
Dạ nhiều khi em code còn yếu nên làm lòng vòng không được tối ưu ạ. Nên có những bài toán khó em hay nhờ các chuyên gia trên này hỗ trợ rồi em đọc hiểu và sửa lại 1 số chỗ cho phù hợp hơn với yêu cầu thực tế của bài toán ạ.
Cho đến giờ này bạn vẫn chưa trả lời câu hỏi của tôi:
1. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 nhưng lần chạy tiếp theo (lần thứ hai, ba,...) không có ngày 02/11 thì dữ liệu bên sheet Output có còn ngày 02/11 hay không?
2. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 và lần chạy tiếp theo (lần thứ hai, ba,...) có ngày 02/11 thì sử sự thế nào?
(i) Viết chồng dữ liệu lần sau lên lần trước, tức là coi dữ liệu lần sau chính xác hơn lần trước.
(ii) Nhập chồng dữ liệu lần sau vào lần trước, tức là coi dữ liệu lần sau bổ sung thêm vào lần trước.
(iii) Không làm gì cả, tức là nếu ngày đã có rồi thì trở thành dữ liệu cứng, không cần xét lại.

Và đừng nghĩ rằng giải thuật khác nhau có thể chỉnh sửa qua lại. Điển hình, nếu tôi có thể ghi dữ liệu vào một mảng khác với nếu tôi bắt buộc phải ghi nhiều mảng. Chép rải rác bắt buộc phải dùng nhiều mảng, loại code này không thể chỉnh sửa qua lại, cũng khó viết thành sub riêng để chỉnh sửa riêng, mà phải viết lại hoàn toàn.
Thêm có những giải thuật có thể viết code dùng ADO gọn hơn mảng nhiều, nhưng nếu chép rải rác thì lại trở thành rắc rối.

Hỏi nhỏ: theo tôi thấy thì bạn đâu phải khong biết viết code. Cái bạn cần là người dẫn đường cho bạn bắt đầu. Toi cố tình dây dưa ở phần dẫn đầu để cho bạn tập tự phân tích lấy.
Túm lợi, bạn khogn biết phân tích nên ngỡ rằng mình khong ntheer code. Tập phân tích thì sẽ thấy code chỉ là dịch lại từ chi tiết phân tích thành mã VBA.
 
Upvote 0
Cho đến giờ này bạn vẫn chưa trả lời câu hỏi của tôi:
1. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 nhưng lần chạy tiếp theo (lần thứ hai, ba,...) không có ngày 02/11 thì dữ liệu bên sheet Output có còn ngày 02/11 hay không?
2. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 và lần chạy tiếp theo (lần thứ hai, ba,...) có ngày 02/11 thì sử sự thế nào?
(i) Viết chồng dữ liệu lần sau lên lần trước, tức là coi dữ liệu lần sau chính xác hơn lần trước.
(ii) Nhập chồng dữ liệu lần sau vào lần trước, tức là coi dữ liệu lần sau bổ sung thêm vào lần trước.
(iii) Không làm gì cả, tức là nếu ngày đã có rồi thì trở thành dữ liệu cứng, không cần xét lại.

Và đừng nghĩ rằng giải thuật khác nhau có thể chỉnh sửa qua lại. Điển hình, nếu tôi có thể ghi dữ liệu vào một mảng khác với nếu tôi bắt buộc phải ghi nhiều mảng. Chép rải rác bắt buộc phải dùng nhiều mảng, loại code này không thể chỉnh sửa qua lại, cũng khó viết thành sub riêng để chỉnh sửa riêng, mà phải viết lại hoàn toàn.
Thêm có những giải thuật có thể viết code dùng ADO gọn hơn mảng nhiều, nhưng nếu chép rải rác thì lại trở thành rắc rối.

Hỏi nhỏ: theo tôi thấy thì bạn đâu phải khong biết viết code. Cái bạn cần là người dẫn đường cho bạn bắt đầu. Toi cố tình dây dưa ở phần dẫn đầu để cho bạn tập tự phân tích lấy.
Túm lợi, bạn khogn biết phân tích nên ngỡ rằng mình khong ntheer code. Tập phân tích thì sẽ thấy code chỉ là dịch lại từ chi tiết phân tích thành mã VBA.
Dạ em cảm ơn anh ạ.

Dạ mỗi lần copy dữ lieu mới vào Sheet Input và ấn macro để chạy, thì nó sẽ tạo ra Sheet Ouput mới tinh ( tức là nếu đã có Sheet Output rồi thì nó xóa đi rồi tạo lại theo dữ lieu mới copy ạ ).

Dạ Như anh có gợi ý về cột "MNV" ạ. Vì tên người có thể giống nhau nên em có sửa lại cột 'MNV' để nó là duy nhất và không bị trùng nhau .

Em Xin cảm ơn ^^
 

File đính kèm

  • Book1.xlsx
    13.3 KB · Đọc: 9
Upvote 0
Cho đến giờ này bạn vẫn chưa trả lời câu hỏi của tôi:
1. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 nhưng lần chạy tiếp theo (lần thứ hai, ba,...) không có ngày 02/11 thì dữ liệu bên sheet Output có còn ngày 02/11 hay không?
2. Nếu lần chạy (tức là import) thứ nhất có ngày 02/11 và lần chạy tiếp theo (lần thứ hai, ba,...) có ngày 02/11 thì sử sự thế nào?
(i) Viết chồng dữ liệu lần sau lên lần trước, tức là coi dữ liệu lần sau chính xác hơn lần trước.
(ii) Nhập chồng dữ liệu lần sau vào lần trước, tức là coi dữ liệu lần sau bổ sung thêm vào lần trước.
(iii) Không làm gì cả, tức là nếu ngày đã có rồi thì trở thành dữ liệu cứng, không cần xét lại.

Và đừng nghĩ rằng giải thuật khác nhau có thể chỉnh sửa qua lại. Điển hình, nếu tôi có thể ghi dữ liệu vào một mảng khác với nếu tôi bắt buộc phải ghi nhiều mảng. Chép rải rác bắt buộc phải dùng nhiều mảng, loại code này không thể chỉnh sửa qua lại, cũng khó viết thành sub riêng để chỉnh sửa riêng, mà phải viết lại hoàn toàn.
Thêm có những giải thuật có thể viết code dùng ADO gọn hơn mảng nhiều, nhưng nếu chép rải rác thì lại trở thành rắc rối.

Hỏi nhỏ: theo tôi thấy thì bạn đâu phải khong biết viết code. Cái bạn cần là người dẫn đường cho bạn bắt đầu. Toi cố tình dây dưa ở phần dẫn đầu để cho bạn tập tự phân tích lấy.
Túm lợi, bạn khogn biết phân tích nên ngỡ rằng mình khong ntheer code. Tập phân tích thì sẽ thấy code chỉ là dịch lại từ chi tiết phân tích thành mã VBA.
Dạ em cảm ơn anh cùng mọi người nhiều ạ.

Em đã code được bài toán này ạ, nhưng code nó dài và nó đi vòng vèo nên chạy hơi lâu chút… nhưng tạm sử dụng được rồi ạ.

Em Xin cảm ơn các góp ý của anh ạ.

Chúc anh cùng mọi người sức khỏe!
 
Upvote 0
Khuyến mãi chgo bạn là khách hàng đầu tiên mà tôi gạ được trả tiền cho GPE (tôi gạ cả chục mối rồi mà chưa thành công):

- Nếu bạn muốn chỉnh code thì đưa chúng lên đây. Tôi sẽ refactor (chưa biết dịch ra tiếng Việt là gì) nó giùm cho.
(copy/paste code chứ đừng gửi trong file, tôi ngại mở)
 
Upvote 0
Khuyến mãi chgo bạn là khách hàng đầu tiên mà tôi gạ được trả tiền cho GPE (tôi gạ cả chục mối rồi mà chưa thành công):

- Nếu bạn muốn chỉnh code thì đưa chúng lên đây. Tôi sẽ refactor (chưa biết dịch ra tiếng Việt là gì) nó giùm cho.
(copy/paste code chứ đừng gửi trong file, tôi ngại mở)
Dạ em cảm ơn anh nhé. Em thấy nó chạy hơi chậm nhưng cũng dùng tạm ổn anh ạ.

Thật ra code do mình làm thì sau mình sửa hay thay đổi gì mình cũng nắm dc anh ạ.

Chân thành cảm ơn anh.

"Khuyến mãi chgo bạn là khách hàng đầu tiên mà tôi gạ được trả tiền cho GPE (tôi gạ cả chục mối rồi mà chưa thành công):" ==> Anh phải cho bạn nào là nữ đi gạ mới dễ anh :D
 
Upvote 0
Web KT
Back
Top Bottom