Hỏi về xóa hàng theo điều kiện tên (1 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi
Liên hệ QC

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các anh chị trong GPE, e có bảng số liệu (file đính kèm) mong các a (c) giúp e, yêu cầu là:
trong bảng số liệu đó có: cột B thể hiện tên của 1 loại hàng nào đó, như vậy khi bầm nút "xóa" thì nó xóa các tên loại hàng phía dưới nhưng không xóa tên loại hàng đầu tiên.
tóm lại là trừ tên hàng đầu tiên còn các tên hàng phía dưới thì xóa đi.
VD: trong bảng số liệu, ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi.
và nếu như nhập bảng số liệu khác thì vẫn chỉ để lại tên loại hàng đầu tiên còn các tên hàng sau thì xóa đi.
em xin cảm ơn!!!
View attachment 117602
 
Chào các anh chị trong GPE, e có bảng số liệu (file đính kèm) mong các a (c) giúp e, yêu cầu là:
trong bảng số liệu đó có: cột B thể hiện tên của 1 loại hàng nào đó, như vậy khi bầm nút "xóa" thì nó xóa các tên loại hàng phía dưới nhưng không xóa tên loại hàng đầu tiên.
tóm lại là trừ tên hàng đầu tiên còn các tên hàng phía dưới thì xóa đi.
VD: trong bảng số liệu, ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi.
và nếu như nhập bảng số liệu khác thì vẫn chỉ để lại tên loại hàng đầu tiên còn các tên hàng sau thì xóa đi.
em xin cảm ơn!!!

thử xem nó có chạy được ko nha
Mã:
Sub tttt()
Dim Sarr As Variant, kq(), dic As Object, i, k As Long
Sarr = Range([a6], [a5000].End(3)).Resize(, 9).Value
ReDim kq(1 To UBound(Sarr), 1 To 9)
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Sarr)
    If Not dic.Exists(Sarr(i, 2)) Then
        dic.Add Sarr(i, 2), ""
        k = k + 1
        For j = 1 To UBound(Sarr, 2)
            kq(k, j) = Sarr(i, j)
        Next j
    End If
Next i

Range([a6], [a5000].End(3)).EntireRow.Delete
[a6].Resize(k, 9).Value = kq
    With Range([a6], [a5000].End(3)).Resize(, 9)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With

Set dic = Nothing
End Sub
 
Upvote 0
thử xem nó có chạy được ko nha
Mã:
Sub tttt()
Dim Sarr As Variant, kq(), dic As Object, i, k As Long
Sarr = Range([a6], [a5000].End(3)).Resize(, 9).Value
ReDim kq(1 To UBound(Sarr), 1 To 9)
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Sarr)
    If Not dic.Exists(Sarr(i, 2)) Then
        dic.Add Sarr(i, 2), ""
        k = k + 1
        For j = 1 To UBound(Sarr, 2)
            kq(k, j) = Sarr(i, j)
        Next j
    End If
Next i

Range([a6], [a5000].End(3)).EntireRow.Delete
[a6].Resize(k, 9).Value = kq
    With Range([a6], [a5000].End(3)).Resize(, 9)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With

Set dic = Nothing
End Sub
Hình như code này "tèo"
Bạn í nói rằng:
VD: trong bảng số liệu, ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi.
Code của bạn lấy mặt hàng duy nhất
Thân
 
Upvote 0
thử xem nó có chạy được ko nha
Mã:
Sub tttt()
Dim Sarr As Variant, kq(), dic As Object, i, k As Long
Sarr = Range([a6], [a5000].End(3)).Resize(, 9).Value
ReDim kq(1 To UBound(Sarr), 1 To 9)
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Sarr)
    If Not dic.Exists(Sarr(i, 2)) Then
        dic.Add Sarr(i, 2), ""
        k = k + 1
        For j = 1 To UBound(Sarr, 2)
            kq(k, j) = Sarr(i, j)
        Next j
    End If
Next i

Range([a6], [a5000].End(3)).EntireRow.Delete
[a6].Resize(k, 9).Value = kq
    With Range([a6], [a5000].End(3)).Resize(, 9)
        .Borders(xlEdgeLeft).LineStyle = xlContinuous
        .Borders(xlEdgeTop).LineStyle = xlContinuous
        .Borders(xlEdgeBottom).LineStyle = xlContinuous
        .Borders(xlEdgeRight).LineStyle = xlContinuous
        .Borders(xlInsideVertical).LineStyle = xlContinuous
        .Borders(xlInsideHorizontal).LineStyle = xlContinuous
    End With

Set dic = Nothing
End Sub
Chào a! code của a bị nhầm ý của e rồi, kết quả của em là lấy tên loại hàng đầu tiên chứ ko phải lấy hàng đầu tiên a xem lại giúp e..
đây là kết quả của a:
View attachment 117604
còn đây là file kết quả của em.....(file đính kèm)
 
Upvote 0
Mong các a chị trong diễn đàn giúp dùm em, trong câu hỏi trên có gì không rõ em sẽ trình bày, giải thích thêm...e chân thành cảm ơn nhiều...
 
Upvote 0
Mong các a chị trong diễn đàn giúp dùm em, trong câu hỏi trên có gì không rõ em sẽ trình bày, giải thích thêm...e chân thành cảm ơn nhiều...
Bài của bạn không khó, nhưng trong bài đầu có đoạn:
.......VD: trong bảng số liệu, ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi.
..........
Cái này hiểu, nhưng
....và nếu như nhập bảng số liệu khác thì vẫn chỉ để lại tên loại hàng đầu tiên còn các tên hàng sau thì xóa đi.
Cái này..."tèo". Vì nếu cứ nhập thêm vào rồi lại.......xóa đi ( ta chỉ chừa tên hàng đầu tiên) thì +-+-+-++-+-+-++-+-+-+.... nhập thêm làm gì, híc
Bạn nên giải thích kỹ hơn cái chỗ in nghiêng & đậm tý nữa xem sao
Thân
 
Upvote 0
Bài của bạn không khó, nhưng trong bài đầu có đoạn:

Cái này hiểu, nhưng

Cái này..."tèo". Vì nếu cứ nhập thêm vào rồi lại.......xóa đi ( ta chỉ chừa tên hàng đầu tiên) thì +-+-+-++-+-+-++-+-+-+.... nhập thêm làm gì, híc
Bạn nên giải thích kỹ hơn cái chỗ in nghiêng & đậm tý nữa xem sao
Thân
Chào a, e xin giải thích thêm 1 tý. Ví dụ e có:
- 1 bảng số liệu (bảng số liệu 1), ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi. Bảng số liệu 1 ở sheet "vidu1" khi bấm nút "xóa" thì kết quả giống như sheet "ketqua1".
- Giờ e có thêm 1 bảng số liệu khác (bảng số liệu 2) dán đề lên bảng số liệu 1, như vậy vẫn ở cột B tên loại hàng đầu tiên sẽ giữ lại còn các tên khác thì xóa đi. Bảng số liệu 2 ở sheet "vidu2" khi bấm nút xóa thì kết quả giống như sheet "ketqua2".
Tóm lại là ý e muốn giới hạn cho dù có bao nhiêu tên loại hàng đi nữa thì khi bấm nút "xóa" thì giữ nguyên tên loại hàng đầu tiên còn các tên loại hàng khác thì xóa đi...
Xin a c giúp đỡ..chân thành cảm ơn nhiều..
 
Upvote 0
Chào a, e xin giải thích thêm 1 tý. Ví dụ e có:
- 1 bảng số liệu (bảng số liệu 1), ở cột B có các tên loại hàng sau: C1, C10, C11, C12, C13, C14, C15, C16, C2, C3, C4, C5, C6, C7, C8, C9....như vậy chỉ để lại tên hàng là C1, còn các tên khác thì xóa đi. Bảng số liệu 1 ở sheet "vidu1" khi bấm nút "xóa" thì kết quả giống như sheet "ketqua1".
- Giờ e có thêm 1 bảng số liệu khác (bảng số liệu 2) dán đề lên bảng số liệu 1, như vậy vẫn ở cột B tên loại hàng đầu tiên sẽ giữ lại còn các tên khác thì xóa đi. Bảng số liệu 2 ở sheet "vidu2" khi bấm nút xóa thì kết quả giống như sheet "ketqua2".
Tóm lại là ý e muốn giới hạn cho dù có bao nhiêu tên loại hàng đi nữa thì khi bấm nút "xóa" thì giữ nguyên tên loại hàng đầu tiên còn các tên loại hàng khác thì xóa đi...
Xin a c giúp đỡ..chân thành cảm ơn nhiều..
Với cấu trúc dữ liệu trong bài, bạn thử code này xem
Mã:
Public Sub Xoa()
    Dim Vung, Dk
    Application.ScreenUpdating = False
    Set Vung = Range([A5], [A50000].End(xlUp)).Resize(, 9)
    Dk = Vung(2, 2)
        With Vung
            .AutoFilter 2, "<>" & Dk
            .Offset(1).SpecialCells(12).EntireRow.Delete
            .AutoFilter
        End With
    Application.ScreenUpdating = True
End Sub
Thân
 

File đính kèm

Upvote 0

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

Back
Top Bottom