thangbithu
Thành viên thường trực




- Tham gia
- 13/10/08
- Bài viết
- 387
- Được thích
- 485
- Nghề nghiệp
- Nhân sự
Tôi có 1 bài toán xin mô tả như sau:
Là bảng tính giờ công của công nhân, giờ công mỗi công nhân được ghi trên 1 hàng gồm 31 cell (tương ứng với 31 cột mà tiêu đề từng cột là ngày trong tháng (1, 2, 3, ...., 31). Dữ liệu trong từng cell :
- có thể là rỗng,
- có thể là số (nếu là số nguyên thì tối đa 2 chữ số ví dụ 8, 12; nếu là số thập phân thì phần đứng trước dấu "," tối đa 2 chữ số, phần đứng sau dấu "," tối đa 1 chữ số),
- có thể là chuỗi: gồm 3 loại dữ liệu kết hợp với nhau
+ Số: có cấu tạo giống như phần số nêu trên
+ ký tự : tối đa 2 ký tự, ví dụ: P, T, CO, TS, RO, H1, H2, H3 ...
+ dấu "/" : tối đa 2 dấu
+ cách kết hợp: 8P; 12,5CO ; 10,5H2 ; 4/4P; 11,5/2,5H3 ; 8P/4X ; 3/4P/1X ; 10,5/0,5X/3H2; 10,5CT/4P/1,5H2 (không có khoảng trắng ở giữa)
Ví dụ: từ ngày 1 đến ngày 10 trong tháng

Vấn đề đặt ra:
Trong từng cell phải tách được phần số và phần ký tự ra riêng để lấy sum, tuy nhiên có lấy sum hay không còn phụ thuộc vào ký tự đứng sau số đó, sau đó cộng tất cả các cell lại để có giờ công trong tháng, ví dụ: nếu lấy sum từ ví dụ trên sẽ như sau (ví dụ số đứng trước chữ CO và P không lấy sum)

Tôi đã tham khảo tuyệt chiêu 28: trích xuất dữ liệu số trong 1 chuỗi bằng VBA nhưng không giải quyết được yêu cầu nêu trên
Tôi cũng đã dùng các hàm có sẵn của excel (tôi đang dùng excel 2010) để xử lý bài toán trên và đã giải quyết được bằng cách kết hợp hàm mãng, SUM, IF, ISERROR, ISNUMBER, MATCH, LEFT, RIGHT, MID, FIND, SUBSTITUDE ... nhưng hàm quá dài, thậm chí excel thông báo là đã vượt số ký tự cho phép trong công thức.
Tôi muốn dùng VBA để viết hàm tách số và tách phần chữ trong điều kiện cụ thể nêu trên để giảm bới độ dài công thức nhưng không biết về VBA
Hãy giúp tôi với
Xin cảm ơn trước
Là bảng tính giờ công của công nhân, giờ công mỗi công nhân được ghi trên 1 hàng gồm 31 cell (tương ứng với 31 cột mà tiêu đề từng cột là ngày trong tháng (1, 2, 3, ...., 31). Dữ liệu trong từng cell :
- có thể là rỗng,
- có thể là số (nếu là số nguyên thì tối đa 2 chữ số ví dụ 8, 12; nếu là số thập phân thì phần đứng trước dấu "," tối đa 2 chữ số, phần đứng sau dấu "," tối đa 1 chữ số),
- có thể là chuỗi: gồm 3 loại dữ liệu kết hợp với nhau
+ Số: có cấu tạo giống như phần số nêu trên
+ ký tự : tối đa 2 ký tự, ví dụ: P, T, CO, TS, RO, H1, H2, H3 ...
+ dấu "/" : tối đa 2 dấu
+ cách kết hợp: 8P; 12,5CO ; 10,5H2 ; 4/4P; 11,5/2,5H3 ; 8P/4X ; 3/4P/1X ; 10,5/0,5X/3H2; 10,5CT/4P/1,5H2 (không có khoảng trắng ở giữa)
Ví dụ: từ ngày 1 đến ngày 10 trong tháng

Vấn đề đặt ra:
Trong từng cell phải tách được phần số và phần ký tự ra riêng để lấy sum, tuy nhiên có lấy sum hay không còn phụ thuộc vào ký tự đứng sau số đó, sau đó cộng tất cả các cell lại để có giờ công trong tháng, ví dụ: nếu lấy sum từ ví dụ trên sẽ như sau (ví dụ số đứng trước chữ CO và P không lấy sum)

Tôi đã tham khảo tuyệt chiêu 28: trích xuất dữ liệu số trong 1 chuỗi bằng VBA nhưng không giải quyết được yêu cầu nêu trên
Tôi cũng đã dùng các hàm có sẵn của excel (tôi đang dùng excel 2010) để xử lý bài toán trên và đã giải quyết được bằng cách kết hợp hàm mãng, SUM, IF, ISERROR, ISNUMBER, MATCH, LEFT, RIGHT, MID, FIND, SUBSTITUDE ... nhưng hàm quá dài, thậm chí excel thông báo là đã vượt số ký tự cho phép trong công thức.
Tôi muốn dùng VBA để viết hàm tách số và tách phần chữ trong điều kiện cụ thể nêu trên để giảm bới độ dài công thức nhưng không biết về VBA
Hãy giúp tôi với
Xin cảm ơn trước
File đính kèm
Lần chỉnh sửa cuối: