Xóa dữ liệu từng cột theo giá trị lớn nhất (1 người xem)

Liên hệ QC

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

quanthienhan

Thành viên hoạt động
Tham gia
4/2/07
Bài viết
120
Được thích
3
Mọi người xem giúp em có code hay cách nào để giải quyết các bước em làm thủ công thế này không ạ..
 

File đính kèm

nghĩa là mình có thể chủ động xóa số lượng cột dữ liệu theo mình muốn - tự động có thể chạy hết các cột...
 
nghĩa là mình có thể chủ động xóa số lượng cột dữ liệu theo mình muốn - tự động có thể chạy hết các cột...
Bạn chay thử code tự động này
Mã:
Sub XoaCotMax_TuDong()
Dim Nguon, Dong, Cot
Dim Tong, Tong_
Dim Kq
Dim i, j, k, x, z, t
With Sheet1
    Kq = .Range("a5").CurrentRegion
    Dong = UBound(Kq)
    Cot = UBound(Kq, 2)
    Tong_ = .Range("a1:l3")
End With
x = Cot
Do While x > 0
    Nguon = Kq
    Tong = Tong_
    z = 0
    For j = 1 To Cot
        If z < Tong(1, j) * 100 + Tong(2, j) Then
            z = Tong(1, j) * 100 + Tong(2, j)
            t = j
        End If
    Next j
    t = CLng(Left(t, 2))
    ReDim Kq(1 To Dong - Tong(1, t), 1 To Cot)
    For j = 1 To Cot
        Kq(1, j) = Nguon(1, j)
        If j <> t Then Tong_(1, j) = 0
    Next j
    z = 1
    x = 0
    For i = 2 To Dong
        If Nguon(i, t) = 0 Then
            z = z + 1
            For j = 1 To Cot
                Tong_(1, j) = Tong_(1, j) + Nguon(i, j)
                x = x + Tong_(1, j)
                Kq(z, j) = Nguon(i, j)
            Next j
        End If
    Next i
    Dong = Dong - Tong(1, t)
    Tong_(1, t) = 0
Loop
Sheet1.Range("n1:y93").Clear
Sheet1.Range("n5").Resize(UBound(Nguon), Cot) = Nguon
Sheet1.Range("n1").Resize(UBound(Tong), UBound(Tong, 2)) = Tong
End Sub
 
Sao mình chạy không được bạn.. bạn có thể cho vào file luôn giúp mình được không ..thanks nhiều..
 
Bác CHAOQUAY có thể chạy cụ thể giúp em dc không.. mà code trên chạy thì mình có biết, hoặc đánh dấu những cột nào đã được xóa hay không ? cái này em rất cần, và khi muốn thay đổi ( số lượng cột bị xóa ) ta phải thay số liệu nào..thanks bác nhiều....
 
Sao mình chạy không được bạn.. bạn có thể cho vào file luôn giúp mình được không ..Cảm ơn nhiều..
Bạn làm như sau : nhấn alt+F8 -> run hoac enter
Bài đã được tự động gộp:

Bác CHAOQUAY có thể chạy cụ thể giúp em dc không.. mà code trên chạy thì mình có biết, hoặc đánh dấu những cột nào đã được xóa hay không ? cái này em rất cần, và khi muốn thay đổi ( số lượng cột bị xóa ) ta phải thay số liệu nào..Cảm ơn bác nhiều....
Tức là hiển thị từng bảng qua các bước chạy code à bạn?
 

File đính kèm

có thể đánh dấu hoặc tô màu các cột đã được code chạy xóa dữ liệu.... như mình làm thủ công thì.. các cột bị xóa là.. 1.2.3.4.5.8.9 .. cột còn lại là 0.6.7.... mình đánh dấu thứ tự như ô A5...
Bài đã được tự động gộp:

Bạn cho mình hỏi.. mình muốn chạy nhiều giữ liệu hơn thì thay thông số nào... trên ví dụ xét 93 hàng thôi.. mình muốn lên 200 thì thay vào đâu..thank..
 
có thể đánh dấu hoặc tô màu các cột đã được code chạy xóa dữ liệu.... như mình làm thủ công thì.. các cột bị xóa là.. 1.2.3.4.5.8.9 .. cột còn lại là 0.6.7.... mình đánh dấu thứ tự như ô A5...
Cột nào đã xóa thì trên dòng 1 = 0 mà bạn
Bạn cho mình hỏi.. mình muốn chạy nhiều giữ liệu hơn thì thay thông số nào... trên ví dụ xét 93 hàng thôi.. mình muốn lên 200 thì thay vào đâu..thank..
Số liệu bắt đầu từ a5, mấy dòng cũng được
 
Cột nào đã xóa thì trên dòng 1 = 0 mà bạn

Số liệu bắt đầu từ a5, mấy dòng cũng được
- ý mình là . nếu như xoa giá trị các cột theo giá trị nhiều nhất hiện tại... như ví dụ trên.. cột E có tổng giá trị là 28 lớn nhất.. sau khi mình Sort&filter để xóa đi các giá trị mình muốn... thì mình lại có Cột I có tổng giá trị lớn nhất... và mình lại Sort&filter để xóa đi các giá trị mình muốn...
sau các bước như thế thì Cột A = 0.... ( trong khi cột A chưa được xóa.. hay là không phải xóa ) .. và mình muốn biết và đánh dấu các cột được code xóa .. và các cột không và chưa được code xóa đã = 0 . như trường hợp cột A của ví dụ trên... .. mình cần biết các cột có tổng giá trị = 0 khi đã được code chạy qua.....
 
- ý mình là . nếu như xoa giá trị các cột theo giá trị nhiều nhất hiện tại... như ví dụ trên.. cột E có tổng giá trị là 28 lớn nhất.. sau khi mình Sort&filter để xóa đi các giá trị mình muốn... thì mình lại có Cột I có tổng giá trị lớn nhất... và mình lại Sort&filter để xóa đi các giá trị mình muốn...
sau các bước như thế thì Cột A = 0.... ( trong khi cột A chưa được xóa.. hay là không phải xóa ) .. và mình muốn biết và đánh dấu các cột được code xóa .. và các cột không và chưa được code xóa đã = 0 . như trường hợp cột A của ví dụ trên... .. mình cần biết các cột có tổng giá trị = 0 khi đã được code chạy qua.....
Bạn muốn hiển thị kết quả như thế nao
 
mình có đánh dấu các cột từ 0 -> 9 của hàng A5.. nếu được có thể tô màu các ô đó . đánh dấu nhận biết các cột đã được code chạy xóa... như vậy các ô.. 12345.89 sẽ được tô màu... thanks
 
mình có đánh dấu các cột từ 0 -> 9 của hàng A5.. nếu được có thể tô màu các ô đó . đánh dấu nhận biết các cột đã được code chạy xóa... như vậy các ô.. 12345.89 sẽ được tô màu... Cảm ơn
Thử file này xem đã đúng ý bạn chưa
 

File đính kèm

Thử file này xem đã đúng ý bạn chưa
OK quá chuẩn rồi bạn ơi... mà còn một chút nữa... sao mình xóa bớt dữ liệu gốc .. chạy code thì báo lỗi .. cũng như mình pate thêm giữ liệu nữa vào chạy code đều báo lỗi không được.. nhờ bạn xem giúp thêm chút nữa... thanks.
 
OK quá chuẩn rồi bạn ơi... mà còn một chút nữa... sao mình xóa bớt dữ liệu gốc .. chạy code thì báo lỗi .. cũng như mình pate thêm giữ liệu nữa vào chạy code đều báo lỗi không được.. nhờ bạn xem giúp thêm chút nữa... Cảm ơn.
Lỗi thế nào bạn gửi file lên
 
mình copy lại dữ liệu gốc pate vô chạy code thì ok.. nhưng khi copy thử dữ liệu bên Sheet2 vô chạy code thì báo lỗi...không được..bạn xem giúp mình ..thank.
 

File đính kèm

đúng rồi bạn.. dòng 1 là tổng của từng cột..để mỗi lần delete mình cần lấy giá trị tổng cột nào lớn nhất để delete tiếp.. ( dòng 3 là tổng lúc đầu chưa delete từng cột -).. mình làm thủ công . nên khi delete đên trường hợp có 2 cột bằng nhau.. mình sẽ so sánh giá trị tổng cột lúc đầu ở dòng thứ 3.. cột nào có giá trị lớn hơn mình sẽ ưu tiên delete cột đó....
 
đúng rồi bạn.. dòng 1 là tổng của từng cột..để mỗi lần delete mình cần lấy giá trị tổng cột nào lớn nhất để delete tiếp.. ( dòng 3 là tổng lúc đầu chưa delete từng cột -).. mình làm thủ công . nên khi delete đên trường hợp có 2 cột bằng nhau.. mình sẽ so sánh giá trị tổng cột lúc đầu ở dòng thứ 3.. cột nào có giá trị lớn hơn mình sẽ ưu tiên delete cột đó....
Vào thời điểm bắt đầu tính, nếu tổng dòng 1 & 3 không đúng là code sẽ bị lỗi. Bạn kiểm tra xem tổng các cột khi paste đã đúng hay chưa
 
Vào thời điểm bắt đầu tính, nếu tổng dòng 1 & 3 không đúng là code sẽ bị lỗi. Bạn kiểm tra xem tổng các cột khi paste đã đúng hay chưa
OK rồi bạn .. bạn cho hỏi. code này mặc định nó sẽ xóa bao nhiêu cột rồi mới dừng.. mình có thể chủ động thay đổi số cột cần xóa được không bạn.
thanks.
 
OK rồi bạn .. bạn cho hỏi. code này mặc định nó sẽ xóa bao nhiêu cột rồi mới dừng.. mình có thể chủ động thay đổi số cột cần xóa được không bạn.
Cảm ơn.
Xóa phải có điểm dừng - thí dụ ra lệnh xóa 6 cột trong 10 cột chẳng hạn- vì có khi xóa một hồi có khi nó xóa ....sạch sẽ, thí dụ với dữ liệu trong bài nó sẽ xóa theo thứ tự các cột 5 - 9 - 2 - 10 - 4 - 3 - 7 khi xóa xong cột thứ 7, sang thằng thứ 8 (cũng là cột 8) còn 2 em mang số 1, nếu xóa đi...... thì sạch sẽ, chẳng còn gì để mà làm tiếp. Híc
Mà ...cái này là cái gì ngộ vậy bạn ( hỏi cho biết thôi)
Thân
 
OK rồi bạn .. bạn cho hỏi. code này mặc định nó sẽ xóa bao nhiêu cột rồi mới dừng.. mình có thể chủ động thay đổi số cột cần xóa được không bạn.
Cảm ơn.
code này có phần giống như ý bài 23. code sẽ xóa liên tục, mỗi lần xóa đều lưu lại kết quả liền trước. Tới khi xóa hết tất cả thì dừng, lấy kết quả liền trước khi dừng làm đáp án vì vậy không xác định trước được là sẽ xóa bao nhiêu cột.

Với dạng bài của bạn, số cột sẽ xóa ( hoặc số cột không xóa ) có lẽ chỉ có thể xác định gần đúng thôi bạn
 
Xóa phải có điểm dừng - thí dụ ra lệnh xóa 6 cột trong 10 cột chẳng hạn- vì có khi xóa một hồi có khi nó xóa ....sạch sẽ, thí dụ với dữ liệu trong bài nó sẽ xóa theo thứ tự các cột 5 - 9 - 2 - 10 - 4 - 3 - 7 khi xóa xong cột thứ 7, sang thằng thứ 8 (cũng là cột 8) còn 2 em mang số 1, nếu xóa đi...... thì sạch sẽ, chẳng còn gì để mà làm tiếp. Híc
Mà ...cái này là cái gì ngộ vậy bạn ( hỏi cho biết thôi)
Thân
Cái này bí mịt bạn...
Bài đã được tự động gộp:

code này có phần giống như ý bài 23. code sẽ xóa liên tục, mỗi lần xóa đều lưu lại kết quả liền trước. Tới khi xóa hết tất cả thì dừng, lấy kết quả liền trước khi dừng làm đáp án vì vậy không xác định trước được là sẽ xóa bao nhiêu cột.

Với dạng bài của bạn, số cột sẽ xóa ( hoặc số cột không xóa ) có lẽ chỉ có thể xác định gần đúng thôi bạn
Vậy ạ.. liệu mình có thế cố định code chỉ chạy xóa tối đa 7 cột thôi được không..
 
Vậy ạ.. liệu mình có thế cố định code chỉ chạy xóa tối đa 7 cột thôi được không..
Nếu nhỡ sau khi xóa 6 cột, 4 cột còn lại có tổng bằng nhau thì lần thứ 7, kết quả sẽ là = 0. Việc xóa tối đa 7 cột chắc cần phải thêm điều kiện lựa chọn cột để xóa bạn a
 
Bạn thử file này, làm ở sheet 2, thay đổi số cột muốn xóa ở [F1] rồi bấm vào hình mèo chuột
Thân
 

File đính kèm

Bạn thử file này, làm ở sheet 2, thay đổi số cột muốn xóa ở [F1] rồi bấm vào hình mèo chuột
Thân
Cách của Bác hay quá... có điều quá trình xóa vẫn chưa được như em muốn lắm. Bác xem lại sheet 3 em làm thủ công.. có thể chạy theo cách em làm thủ công thì ngon..thanks Bác.
Bài đã được tự động gộp:

Nếu nhỡ sau khi xóa 6 cột, 4 cột còn lại có tổng bằng nhau thì lần thứ 7, kết quả sẽ là = 0. Việc xóa tối đa 7 cột chắc cần phải thêm điều kiện lựa chọn cột để xóa bạn a
ok.. có vẻ phức tạp nhỉ.. đành thôi vậy có gì em thủ công nốt vậy .. Em xin chân thành cảm ơn Bác nhiều...
 

File đính kèm

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

Back
Top Bottom