ngaykhongem1
Thành viên chính thức


- Tham gia
- 14/4/12
- Bài viết
- 50
- Được thích
- 2
Bạn nào giúp mình với...đang cần gấp!
1./ Khi chạy macro ở file 1 sẽ xuất hiện cửa sổ chèn file để chạy, ta chọn file 2
2./ Sau khi chạy xong chương trinh sẽ xuất ra 1 file mới. Ta chỉ quan tâm Sheet 2
3./ Phần trên là code xong rồi chỉ còn ở dòng MEANS
YÊU CẦU LÀ: dòng MEANS được tính dựa vào dòng COMPARISON
4./ Nếu cặp nào có 3 giá trị thì giá trị còn lại mang so sánh với giá trị bắt đầu được đánh dấu (*)
5./ Trong mỗi cặp so sánh nếu giá trị ở dòng COMPARISON < 0.95 thì ko làm gì còn ngược lại thì gán kí tự cuối của header cột giá trị nhỏ hơn vào cột giá trị lớn hơn
Chào mọi người,
Mình có 1 file excel code ngôn ngữ VBA mong được mọi người hỗ trợ.
File 3 là file chứa yêu cầu đề bài.
thanks mọi người nhiều.
4./ Nếu cặp nào có 3 giá trị thì giá trị còn lại mang so sánh với giá trị bắt đầu được đánh dấu (*)
5./ Trong mỗi cặp so sánh nếu giá trị ở dòng COMPARISON < 0.95 thì ko làm gì còn ngược lại thì gán kí tự cuối của header cột giá trị nhỏ hơn vào cột giá trị lớn hơn
Thế nếu 2 giá trị bằng nhau thì làm hay lờ đi?cột giá trị nhỏ hơn vào cột giá trị lớn hơn
Header ..., h(x-1), h(x), h(x+1), ..., h(y-1), h(y), h(y+1)
MEANS ..., m(x-1), m(x), m(x+1), ..., m(y-1), m(y), m(y+1)
COMPARISON..., , *,........................................., A, *
for k = x to (y-1)
if m(k) < m(k+1) then
m(k+1) = m(k+1) & Right(h(k), 1)
elseif m(k) > m(k+1) then
m(k) = m(k) & Right(h(k+1), 1)
else
lờ đi???
end if
next k
if y - x > 1 then
if m(y) < m(x) then
m(x) = m(x) & Right(h(y), 1)
elseif m(y) > m(x) then
m(y) = m(y) & Right(h(x), 1)
else
lờ đi???
end if
end if
[m(x), m(x+1)], [m(x+1), m(x+2)], ..., [m(y-1), m(y)], [m(y), m(x)]
3/ Mỗi bảng(table) có thể có nhiều nhất 1 dòng MEANS và ít nhất là ko có dòng MEANS nào. (a) Còn số lượng bảng là ko hạn chế nên mình sẽ dùng vòng lặp xử lí trên bảng thứ nhất xong thì vòng lặp sẽ chạy cho đến khi hết tất cả các bảng.
4/ Các cặp nhóm có thể có 4 giá trị, 5 giá trị, 6 giá trị....(giữa 1 cặp dấu * là 1 nhóm đó bạn, còn số giá trị trong 1 nhóm là ko giới hạn)
Ý của bạn là sau khi xử lý xong dòng MEANS thì bạn sẽ dùng vòng lặp duyệt tìm MEANS để xử các nhóm có MEANS (mà bạn gọi là 'Table')
Theo mình thì ngược lại, ta fải đi từ ngoài vào trong;
Nhưng ở vòng ngoài ta không dùng vòng lặp, nếu điều dưới đây sẩy ra:
Nếu Table nào có dòng MEANS thì dòng này cách dòng Header luôn đúng bằng (24 -6) dòng hay không?
(Bạn đừng nói với tôi là chỉ có duy nhất dòng Header trong cả trang tính đó nhe!)
Hay thế này đi: Bạn làm ơn tạo lại file giả lập của file 3 có cấu trúc trang tính như sau:
Dữ liệu thể hiện là 4 Table, trong đó có 2 table có dòng MEANS & 2 nhóm là không có dòng này.
Trong 2 nhóm có dòng MEANS thì 1 nhóm là ví dụ trên. 1 nhóm nữa có số nhóm trong dòng MEANS đa dạng hơn;
& điều quan trọng là ở trang tính thứ 2 của file giả lập này sẽ là kết quả mong muốn của bạn.
Chờ file của bạn!
Tôi gửi file sau khi đã bổ sung các chức năng:
1. Từ FILE 1 của bạn, có nút COMPARISON để mở 1 file xử lý (FILE 2 trong ví dụ của bạn)
2. Mã lệnh sẽ tự động dò tìm trong FILE 2 những khối có [header và MEANS] để xử lý
3. Sau khi xử lý xong, sẽ tự động ghi ra file kết quả, với tên có dạng FILE 2-daxuly.xls
Bạn kiểm tra xem đã đúng yêu cầu chưa?
(Lần trước tôi đã viết code này và chạy thử, nhưng bạn không test!!!)
gửi bạn file bạn yêu cầu. Trong file này sheet đầu tiên là dữ liệu 4 table, sheet 2 là kết quả mình muốn sau khi chạy chương trình
Đúng yêu cầu của mình rồi nhưng bạn xem giúp mình vẫn còn lỗi bạn ơi...VD ở 1 nhóm so sánh này
MEANS ........8.24BC....8.03....7.95
COMPARISON * ..........0.98....0.54 (do ko kẻ khung được nên mình dùng dấu ... để cách các số liệu ra nhé)
0.54<0.95 đâu thỏa điều kiện đâu sao vẫn đem đi so sánh và kết quả thành 8.24BC thay vì kết quả đúng là 8.24B . Bạn xem giúp mình nhé..thanks bạn
- Trong nhóm 4 giá trị so sánh đầu tiên thì ta mang tất cả 3 giá trị còn lại so sánh với giá trị bắt đầu có dấu (*) là giá trị 8. Trong 3 giá trị này thì chỉ có giá trị 2 là thỏa điều kiện dòng COMPARISON = 0.97> 0.95 nên ta chỉ đem so sánh 2<8, nên ta lấy ký tự cuối dòng header cột giá trị 2 là chữ C gán vào giá trị lớn hơn là 8 ==> giá trị 8 đổi thành 8C.
| e | f | g | h | i | j | k |
48 ||| 8.21 |.|8.24B|8.03|7.95| <-Tạm hiểu
49 |*||*||*|.98|.54| *
64 |8C|34|2|435|6|32A|324| <- O hiểu
65 |*|.59|.97|.28|*|.98|.54| *
Bạn giúp giải thích thêm, tại sao trong nhóm 4 ô đầu, bạn lại gạn C cho ô đầu & trường hợp sau lại gán A cho ô giữa làm vậy?
Thanks bạn nhiều lắm.Cho mình làm phiền bạn thêm tí, bạn giải thích code luôn vào file excel đó giúp mình được không!Do lần trước nói không rõ, nên tôi tưởng là cứ có ô thỏa điều kiện >=0.95 thì sẽ so sánh hết trong cả nhóm. Đã sửa lại, bạn down lại file đính kèm ở bài trước nhé!
Bạn ơi giúp mình gộp 2 lệnh thành 1 được không. Là khi chạy chương trình sẽ format định dạng như file mình đã code và chạy thêm phần code so sánh như bạn làm nữa. với lại bây giờ dòng header sẽ ko còn chữ header nữa mà biết là dòng này cách MEANS là 18 dòng hoặc cách dòng có dấu * là 19 dòng. Chương trình sắp hoàn chỉnh rồi mình chỉ còn vướng chỗ này mong bạn giúp đỡ. Thanks bạn!Do lần trước nói không rõ, nên tôi tưởng là cứ có ô thỏa điều kiện >=0.95 thì sẽ so sánh hết trong cả nhóm. Đã sửa lại, bạn down lại file đính kèm ở bài trước nhé!