Xoá thế nào để dữ liệu còn lại trong một cột tăng (hoặc giảm) từ trên xuống? (1 người xem)

  • Thread starter Thread starter Chaytui
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

Chaytui

Thành viên mới
Tham gia
27/12/07
Bài viết
12
Được thích
1
Nhờ các anh chị em giải quyết giùm mình bài sau:

Tập dữ liệu nằm trong nhiều hàng và nhiều cột (vùng H8:RP484)
Trong vùng H8:RP484 xóa bớt các ô sao cho các giá trị còn lại ở mỗi cột nằm trong vùng này tăng từ trên xuống dưới (minh họa ở vùng H8:H31 trong file "tang tu tren xuong duoi").

Tương tự, làm thế nào để các giá trị còn lại ở mỗi cột nằm trong vùng này giảm từ trên xuống dưới.

Xin trân trọng cảm ơn các anh chị em đã giúp đỡ.
 

File đính kèm

Fương án sẽ là:

B1: Tìm giá trị lớn nhất trong cột (Nhờ hàm =MAX()
B2: Tạo vòng lặp duyệt từ trên;
Hễ số nào nhỏ hay bằng số trước no` thì xóa đi
Việc xóa này tiến hành cho đến khi gặp giá trị cực đại;
B3: Xóa tất dữ liệu trong các ô chưa duyệt.
 
Nhờ các anh chị em giải quyết giùm mình bài sau:

Tập dữ liệu nằm trong nhiều hàng và nhiều cột (vùng H8:RP484)
Trong vùng H8:RP484 xóa bớt các ô sao cho các giá trị còn lại ở mỗi cột nằm trong vùng này tăng từ trên xuống dưới (minh họa ở vùng H8:H31 trong file "tang tu tren xuong duoi").

Tương tự, làm thế nào để các giá trị còn lại ở mỗi cột nằm trong vùng này giảm từ trên xuống dưới.

Xin trân trọng cảm ơn các anh chị em đã giúp đỡ.
Bạn sửa công thức ô H8 lại thành
Mã:
=IF(AND($A8>H$1,$E8>MAX(H$7:H7)),$E8,"")
 
Bạn sửa công thức ô H8 lại thành
Mã:
=IF(AND($A8>H$1,$E8>MAX(H$7:H7)),$E8,"")

Tuyệt vời!
Mình hì hục mấy ngày không ra, cứ nghĩ là phải viết macro (rất ngán vì không biết viết :D), hoặc phải sử dụng công thức phức tạp nào đó, ai ngờ nó lại đơn giản thế này!

Ý tưởng tuyệt vời nhất luôn là ý tưởng đơn giản nhất.

Cảm ơn bạn rất nhiều!
 
Tuyệt vời!
Mình hì hục mấy ngày không ra, cứ nghĩ là phải viết macro (rất ngán vì không biết viết :D), hoặc phải sử dụng công thức phức tạp nào đó, ai ngờ nó lại đơn giản thế này!

Ý tưởng tuyệt vời nhất luôn là ý tưởng đơn giản nhất.

Cảm ơn bạn rất nhiều!

Nếu đây là bài toán mà tôi "đang nghĩ" thì quả là thú vị. Vậy tôi phát biểu bài toán của mình và nhờ chủ topic hoặc các bạn khác xác nhận xem có đúng bài toán của chủ topic không nhé.

Bài toán của tôi: "Trong cột H từ H8 tới H484 có 477 số NGẪU NHIÊN. Chuỗi số này có thể có nhiều chuỗi con tăng. Hãy xóa bớt số trong chuỗi sao cho các số còn lại tạo thành chuỗi tăng có CHIỀU DÀI LỚN NHẤT"

Thú thực là tôi thậm chí còn chưa kịp hiểu đầu bài mà thấy mọi người đã giải ngon lành, vậy tôi có câu hỏi. Trong cột E có một loạt số. Các số này liên quan gì tới các số trong cột H? Chúng là do copy từ cột H sang? Yêu cầu của đầu bài là tìm dãy con tăng bất kỳ hay dãy con tăng dài nhất? Nếu là tìm dãy con tăng dài nhất từ một dãy số ngẫu nhiên trong cột H, và cột E là do copy từ cột H sang thì tôi nghĩ lời giải không đơn giản. Mà copy sang bắt đầu từ E7 hay E8?

Trên GPE cũng như trong tập tin chủ topic không nói gì về "xuất xứ" của cột E. Cũng không thấy nói tìm dãy tăng bất kỳ hay dãy tăng dài nhất. Bởi nếu bất kỳ thì chỉ cần tìm ra 2 số mà số sau lớn hơn. Bài toán lúc đó trở thành quá tầm thường.
 
Trên GPE cũng như trong tập tin chủ topic không nói gì về "xuất xứ" của cột E. Cũng không thấy nói tìm dãy tăng bất kỳ hay dãy tăng dài nhất. Bởi nếu bất kỳ thì chỉ cần tìm ra 2 số mà số sau lớn hơn. Bài toán lúc đó trở thành quá tầm thường.

Đúng là tầm thường, vì tất cả các cột trong dữ liệu lại lấy từ cột E ,

Còn bài của siwtom thì lại khác hẳn là bài tối ưu theo từng chuỗi rùi - có thể quy về bài toán 1 chuỗi được không nhỉ?, chắc hẳn là khó hơn -

nhưng có ứng dụng vào việc gì nhỉ? hay là vấn đề nghiên cứu thuật toán thui?
 
Đúng là tầm thường, vì tất cả các cột trong dữ liệu lại lấy từ cột E ,

Thú thực là tôi phát hoảng. Chủ topic chỉ nói là có dữ liệu trong cột H. Và muốn lược bớt để có dãy tăng. Chả thấy nói gì tới cột E, và cũng chả nói gì về độ dài của dãy tăng. Đề bài mình còn chưa hiểu thế mà mọi người đã giải ngon lành. Đọc mà thấy sợ quá - sao đầu óc mình xuống cấp nhanh thế.

Không sao. Cứ cho là dữ liệu cho trước là ở cột E. Rồi từ E lược bỏ bớt số để có dãy tăng rồi copy nó sang cột H. Thế cũng được nhưng phải xác định: dãy tăng bất kỳ hay dãy tăng dài nhất. Bài toán thú vị và khó là tìm dãy tăng dài nhất từ một dãy số ngẫu nhiên. Hoặc nếu có nhiều dãy tăng cùng dài nhất thì lấy 1 trong chúng.

Nếu là tìm dãy con dài nhất thì ta xét vd. E8 - E11 = 500, 501, 502, 503, E12 - E484 = 1 - 473
Công thức trả về trong cột H dãy tăng với độ lớn bằng 3 - 501, 502, 503. Nhưng nếu ta xóa 4 số đầu thì ta có dãy tăng với độ dài bằng 473 - 1, 2, ..., 473.
 
Các bác ạ, các giá trị trong cột E được tạo ra bằng nhiều thuật toán, đầu bài là tập hợp tất cả các dãy số tăng được trích từ cột E. Do vậy để cho dễ em phải chuyển số liệu từ cột E sang vùng H:RP

Đầu bài này chỉ là một khâu trong dự án mà em đang đối mặt thôi ạ. Giải quyết đầu bài này xong còn làm tiếp, ví dụ như xác định độ dài của dãy tăng, rồi xác định phân bố của độ biến động của các dãy tăng, tương quan giữa độ biến động với độ dài dãy...

Kết quả của loạt bài trên lại được xử lý ở các khâu sau nữa ạ :)
 
Các bác ạ, các giá trị trong cột E được tạo ra bằng nhiều thuật toán, đầu bài là tập hợp tất cả các dãy số tăng được trích từ cột E. Do vậy để cho dễ em phải chuyển số liệu từ cột E sang vùng H:RP

Đầu bài này chỉ là một khâu trong dự án mà em đang đối mặt thôi ạ. Giải quyết đầu bài này xong còn làm tiếp, ví dụ như xác định độ dài của dãy tăng, rồi xác định phân bố của độ biến động của các dãy tăng, tương quan giữa độ biến động với độ dài dãy...

Kết quả của loạt bài trên lại được xử lý ở các khâu sau nữa ạ :)

Tôi bị một phen hú vía vì 2 lẽ:

1. Một số điều bạn không nói ra nhưng người khác lại hiểu được đề bài của bạn trong khi tôi có khó khăn.

2. Một số điều bạn không nói ra nhưng người khác lại hiểu được đề bài và làm ngon lành trong khi tôi nghĩ mãi không ra.

Nhưng thôi. Nếu bạn đã có công thức rồi thì ta xét dữ liệu như sau: Trong E8 - E245 có các số 1 - 238, trong E246 có số 500, trong E247 - E484 có các số 239 - 476. Tổng cộng ta có 477 số: 500 và 1 - 476

Dễ thấy là chuỗi tăng dài nhất là chuỗi 1, 2, 3, ..., 476 có được sau khi xóa số 500.

Để cho ngắn gọn, bạn hãy chỉ ra trong số các cột mà bạn xét thì cột nào có dãy tăng 1, 2, ..., 476
 
Còn vấn đề mới phát sinh sau khi giải bài toán này, xin nhờ các bác ra tay giúp ạ:

Sau khi tạo được chuỗi tăng thì giữa chúng lại xuất hiện các ô trống, gây phiền toái cho các bước tiếp theo. Vậy phải làm thế nào để
1. không còn các ô trống giữa chúng, và
2. các chuỗi tăng ở mỗi cột đều bắt đầu từ vùng h8:rp8 (hàng 8, hoặc hàng bất kỳ theo ý mình muốn)

Cảm ơn các bác đã ra tay cứu giúp :)
 
Còn vấn đề mới phát sinh sau khi giải bài toán này, xin nhờ các bác ra tay giúp ạ:

Sau khi tạo được chuỗi tăng thì giữa chúng lại xuất hiện các ô trống, gây phiền toái cho các bước tiếp theo. Vậy phải làm thế nào để
1. không còn các ô trống giữa chúng, và
2. các chuỗi tăng ở mỗi cột đều bắt đầu từ vùng h8:rp8 (hàng 8, hoặc hàng bất kỳ theo ý mình muốn)

Cảm ơn các bác đã ra tay cứu giúp :)
Tôi dùng công thức mảng nên tốc độ sẽ chậm. Làm 1 cột thì được chứ làm nguyên cả bảng thì nên dùng macro.
 

File đính kèm

đành chịu khó kéo chuột bác ạ, macro thì em chẳng rành tí nào. Cảm ơn bác nhiều nhé :)
 

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

Back
Top Bottom