Tìm lọc và xóa hàng có điều kiện

  • Thread starter thanhpham100988
  • Ngày gửi
T

thanhpham100988

Guest
2/12/16
5
0
1
36
Mong các bạn giúp đỡ
Mình có file excel, cần xóa các hàng trùng lặp có điều kiện. Giả sử như thế này:
.hangtrai {abc}
.hangtrai a
.hangtrai a {abcd}
.hangtrai ul {ghsk}
.hangphai
.hangphai {cde}

Mình muốn xóa dòng như sau:
Nếu hàng trên có các ký tự trước dấu {} giống hàng dưới, xóa cả hai dòng này.
trong ví dụ trên, mình muốn xóa các dòng:
.hangtrai a
.hangtrai a {abcd}
.hangphai
.hangphai {cde}

Mong các bạn giúp đỡ. Mình xin cảm ơn nhiều.
 
Khóa học Quản trị dòng tiền
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Mong các bạn giúp đỡ
Mình có file excel, cần xóa các hàng trùng lặp có điều kiện. Giả sử như thế này:
.hangtrai {abc}
.hangtrai a
.hangtrai a {abcd}
.hangtrai ul {ghsk}
.hangphai
.hangphai {cde}

Mình muốn xóa dòng như sau:
Nếu hàng trên có các ký tự trước dấu {} giống hàng dưới, xóa cả hai dòng này.
trong ví dụ trên, mình muốn xóa các dòng:
.hangtrai a
.hangtrai a {abcd}
.hangphai
.hangphai {cde}

Mong các bạn giúp đỡ. Mình xin cảm ơn nhiều.
Phần này thì chỉ có thể là Viết VBA nhưng code sẽ khá phức tạp. Nếu dữ liệu ít thì nên xóa bằng tay thôi
 
T

thanhpham100988

Guest
2/12/16
5
0
1
36
Phần này thì chỉ có thể là Viết VBA nhưng code sẽ khá phức tạp. Nếu dữ liệu ít thì nên xóa bằng tay thôi
Dữ liệu khá lớn bác ạ. Em biết là phức tạp nên mới phải nhờ các pro :D
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Dữ liệu khá lớn bác ạ. Em biết là phức tạp nên mới phải nhờ các pro :D
Nếu khá lớn thì lại phải dùng mẹo. Phối hợp giữa Conditional Formating và VBA thì mới không chậm được giữ liệu. Phần này có 3 phương án cho bạn.
1. Đi học VBA
2. Thuê người viết code và tư vấn phương án xử lý
3. Chờ đợi
 
D

diemtc

Guest
2/12/16
6
0
1
34
Mọi người cho mình hỏi. M có các dãy kí tự:
01.9723.T.4.1006473.T.800.461.00000.0817.13.000
01.9723.T.4.1006473.T.800.461.00000.0817.14.000
01.9723.T.4.1006473.T.800.462.00000.0817.13.000
m muốn tính tổng của dãy kí tự có số 13 thôi thì dùng hàm gì trong excel 2003
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Mọi người cho mình hỏi. M có các dãy kí tự:
01.9723.T.4.1006473.T.800.461.00000.0817.13.000
01.9723.T.4.1006473.T.800.461.00000.0817.14.000
01.9723.T.4.1006473.T.800.462.00000.0817.13.000
m muốn tính tổng của dãy kí tự có số 13 thôi thì dùng hàm gì trong excel 2003
có chữ T làm sao mà tính tổng được.
 
T

thanhpham100988

Guest
2/12/16
5
0
1
36
Ở đây có code VBA xóa dữ liệu trùng lặp. Các bạn hiểu tùy chỉnh giúp mình chút.
Public Sub DeleteDuplicateRows()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteDuplicateRows
' This will delete duplicate records, based on the Active Column. That is,
' if the same value is found more than once in the Active Column, all but
' the first (lowest row number) will be deleted.
'
' To run the macro, select the entire column you wish to scan for
' duplicates, and run this procedure.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim R As Long
Dim N As Long
Dim V As Variant
Dim Rng As Range

On Error GoTo EndMacro
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


Set Rng = Application.Intersect(ActiveSheet.UsedRange, _
ActiveSheet.Columns(ActiveCell.Column))

Application.StatusBar = "Processing Row: " & Format(Rng.Row, "#,##0")

N = 0
For R = Rng.Rows.Count To 2 Step -1
If R Mod 500 = 0 Then
Application.StatusBar = "Processing Row: " & Format(R, "#,##0")
End If

V = Rng.Cells(R, 1).Value
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Note that COUNTIF works oddly with a Variant that is equal to vbNullString.
' Rather than pass in the variant, you need to pass in vbNullString explicitly.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If V = vbNullString Then
If Application.WorksheetFunction.CountIf(Rng.Columns(1), vbNullString) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
Else
If Application.WorksheetFunction.CountIf(Rng.Columns(1), V) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
End If
Next R

EndMacro:

Application.StatusBar = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Duplicate Rows Deleted: " & CStr(N)

End Sub




In the following examples, suppose we have select cells A1:A10 before running the DeleteDuplicateRows macro:
DelDupB.gif
This illustrates the range before running DeleteDuplicateRows.
DelDupA.gif
This illustrates the range after running DeleteDuplicateRows.
[TBODY] [/TBODY]

Mình muốn xóa tất cả các dữ liệu trùng lặp, ko giữ lại hàng trùng lặp. Như trên, mình muốn xóa hết, cột A chỉ giữ lại hàng 10. Cảm ơn các bạn
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Ở đây có code VBA xóa dữ liệu trùng lặp. Các bạn hiểu tùy chỉnh giúp mình chút.
Public Sub DeleteDuplicateRows()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteDuplicateRows
' This will delete duplicate records, based on the Active Column. That is,
' if the same value is found more than once in the Active Column, all but
' the first (lowest row number) will be deleted.
'
' To run the macro, select the entire column you wish to scan for
' duplicates, and run this procedure.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim R As Long
Dim N As Long
Dim V As Variant
Dim Rng As Range

On Error GoTo EndMacro
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


Set Rng = Application.Intersect(ActiveSheet.UsedRange, _
ActiveSheet.Columns(ActiveCell.Column))

Application.StatusBar = "Processing Row: " & Format(Rng.Row, "#,##0")

N = 0
For R = Rng.Rows.Count To 2 Step -1
If R Mod 500 = 0 Then
Application.StatusBar = "Processing Row: " & Format(R, "#,##0")
End If

V = Rng.Cells(R, 1).Value
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Note that COUNTIF works oddly with a Variant that is equal to vbNullString.
' Rather than pass in the variant, you need to pass in vbNullString explicitly.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If V = vbNullString Then
If Application.WorksheetFunction.CountIf(Rng.Columns(1), vbNullString) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
Else
If Application.WorksheetFunction.CountIf(Rng.Columns(1), V) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
End If
Next R

EndMacro:

Application.StatusBar = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Duplicate Rows Deleted: " & CStr(N)

End Sub




In the following examples, suppose we have select cells A1:A10 before running the DeleteDuplicateRows macro:
DelDupB.gif
This illustrates the range before running DeleteDuplicateRows.
DelDupA.gif
This illustrates the range after running DeleteDuplicateRows.
[TBODY] [/TBODY]
Mình muốn xóa tất cả các dữ liệu trùng lặp, ko giữ lại hàng trùng lặp. Như trên, mình muốn xóa hết, cột A chỉ giữ lại hàng 10. Cảm ơn các bạn
Code này là lấy giá trị duy nhất rồi. Còn đây của bạn khác hơn nhiều
 
Trương Lan

Trương Lan

Thành viên Cố vấn - Webketoan Mentors
21/10/15
826
315
63
Lọc, xóa tay, cũng nhanh thôi, :D
 
T

thanhpham100988

Guest
2/12/16
5
0
1
36
Code này là lấy giá trị duy nhất rồi. Còn đây của bạn khác hơn nhiều
Mình biết, nhưng mình có thể lọc giá trị trong {} sang cột B. Các giá trị trước dấu {} trong cột A. Vậy mình chỉ cần xóa hết các mảng trùng lặp trong cột A là được. Bạn giúp mình tùy chỉnh code chút được ko?
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Mình biết, nhưng mình có thể lọc giá trị trong {} sang cột B. Các giá trị trước dấu {} trong cột A. Vậy mình chỉ cần xóa hết các mảng trùng lặp trong cột A là được. Bạn giúp mình tùy chỉnh code chút được ko?
Thế thì dùng luôn chức năng Remove Duplicate của Excel cho nhanh. Vì bạn đã tách cột được rồi mà
 
T

thanhpham100988

Guest
2/12/16
5
0
1
36
Thế thì dùng luôn chức năng Remove Duplicate của Excel cho nhanh. Vì bạn đã tách cột được rồi mà
Cái này ko được. Các giá trị trong {} là khác nhau. Hơn nữa, chức năng Remove Duplicate là tìm kiếm các giá trị giống nhau cho các hàng, xóa nhưng vẫn giữ lại 1 giá trị. Mình muốn là xóa tất cả các hàng giống nhau cơ, ko giữ lại hàng nào cả
 
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
Cái này ko được. Các giá trị trong {} là khác nhau. Hơn nữa, chức năng Remove Duplicate là tìm kiếm các giá trị giống nhau cho các hàng, xóa nhưng vẫn giữ lại 1 giá trị. Mình muốn là xóa tất cả các hàng giống nhau cơ, ko giữ lại hàng nào cả
Bạn tham khảo code này nhé
PHP:
Sub DeleteDuplicate()
Dim i As Long
Dim j As Long
Dim ws As Worksheet
Dim a() As String
Dim d As Long
Set ws = ThisWorkbook.Sheets("sheet1")
For i = 1 To ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    If Application.WorksheetFunction.CountIf(ws.Range(Cells(1, 1), Cells(ws.Range("A" & ws.Rows.Count).End(xlUp).Row, 1)), ws.Cells(i, 1)) > 1 Then
       d = d + 1
       ReDim Preserve a(d)
        a(d) = ws.Cells(i, 1).Address
    End If
Next i
For j = 1 To d
    ws.Range(a(j)).EntireRow.Delete
Next j
End Sub
 
D

diemtc

Guest
2/12/16
6
0
1
34
801 462 6001 100
6002100
6003100
802 4626001100
6002100
6003100
803 461 6001 100
[TBODY] [/TBODY]
mọi người cho mình hỏi, mình muốn tính tổng của 6001 của dòng 462 của cả 801 và 802 thì phải làm thế nào,mình ko rành về excel lam.Mong mọi người giúp đỡ.Thanhks
 
Sửa lần cuối:
thinhvd

thinhvd

Cao cấp
25/11/09
1,336
234
63
Hà Nội
bluesofts.net
801 462 6001 100
6002100
6003100
802 4626001100
6002100
6003100
803 461 6001 100
[TBODY] [/TBODY]
mọi người cho mình hỏi, mình muốn tính tổng của 6001 của dòng 462 của cả 801 và 802 thì phải làm thế nào,mình ko rành về excel lam.Mong mọi người giúp đỡ.Thanhks
Gửi bạn file trả lời trong tệp đính kèm nhé.
công thức ở ô màu vàng như sau: =SUM(IF(((LEFT(A1:A7,3)="801")+(LEFT(A1:A7,3)="802"))*(RIGHT(A1:A7,3)="462")*(B1:B7=6001),C1:C7,0))
Lưu ý cái này dùng mảng nên phải dùng Ctrl Shift Enter
 

Đính kèm

  • Tong.xlsx
    8.4 KB · Lượt xem: 37
  • Like
Reactions: mrtoanzaizai
D

diemtc

Guest
2/12/16
6
0
1
34
Gửi bạn file trả lời trong tệp đính kèm nhé.
công thức ở ô màu vàng như sau: =SUM(IF(((LEFT(A1:A7,3)="801")+(LEFT(A1:A7,3)="802"))*(RIGHT(A1:A7,3)="462")*(B1:B7=6001),C1:C7,0))
Lưu ý cái này dùng mảng nên phải dùng Ctrl Shift Enter
cảm ơn bạn.nhưng mà có thể ko dùng cong thuc tính trong mảng dc ko bạn
 
mrtoanzaizai

mrtoanzaizai

Trung cấp
9/11/11
118
15
18
33
Phú Xuyên - TP Hà Nội
Gửi bạn file trả lời trong tệp đính kèm nhé.
công thức ở ô màu vàng như sau: =SUM(IF(((LEFT(A1:A7,3)="801")+(LEFT(A1:A7,3)="802"))*(RIGHT(A1:A7,3)="462")*(B1:B7=6001),C1:C7,0))
Lưu ý cái này dùng mảng nên phải dùng Ctrl Shift Enter
Thanks :v Bây giờ mới biết tới true + true đó pro ạ :)
 

Xem nhiều

Webketoan Zalo OA