Các câu hỏi về lọc ra danh sách duy nhất (loại bỏ dữ liệu trùng) (1 người xem)

Liên hệ QC

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

Chào cả nhà!

Trong file đính kèm tại sheet DATA, căn cứ vào cột bộ phận, cột chức danh, tôi dùng code lọc danh mục duy nhất sang sheet "Tổng hợp nguồn nhân lực" để tính toán tổng hợp số liệu, các chỉ tiêu (theo như bảng biểu trong sheet "Tổng hợp nguồn nhân lực".

Phát sinh vấn đề sai lỗi, mình tìm mãi chẳng ra, như thế này:

  1. Cột Bộ phận tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 38 bộ phận. Không hiểu tại sao, code này chỉ lọc ra được 33 bộ phận (thiếu mất 5 bộ phận), nhưng khi ta gõ thêm những ký tự bất kỳ vào những dòng trống dưới cùng của cột bộ phận tại sheet DATA thì lúc này nó lại lọc đủ ra 38 bộ phận.
  2. Tương tự trường hợp trên: Cột Chức danh tại sheet DATA, nếu lọc ra danh mục duy nhất thì phải là 19 chức danh. Không hiểu tại sao, code này chỉ lọc ra được 14 bộ phận (thiếu mất 5 chức danh)...

Nhờ các bác nghiên cứu, xem xét (file gửi kèm)!

Cảm ơn các bác nhiều!


Bạn trừ mất 5 dòng thì hỏi làm sao ra 38 được? Sửa lại như sau :

PHP:
Sub TaoBoPhan()
    Dim BoPhan As Range
    S01.Select
    On Error Resume Next
    S01.ShowAllData
    Range("HH3:HH1000").Clear
    eR = Range("D10000").End(xlUp).Row
    Set BoPhan = S01.Range("D3:D" & eR)
    With S01
        With BoPhan
            .AdvancedFilter Action:=xlFilterCopy, CopyToRange:=S01.Range( _
                "HH3"), Unique:=True
        End With
        .Names("Extract").Delete
        eR1 = .Range("HH1000").End(xlUp).Row
        S17.Range("A7:B55").ClearContents
        S17.Range("B7:B" & eR1 + 4).Value = .Range("HH3:HH" & eR1).Value
        S17.Range("A7:A" & eR1 + 4).FormulaR1C1 = "=ROW()-6"
        S17.Range("A7:A" & eR1 + 4).Value = S17.Range("A7:A" & eR1 + 4).Value
        .Range("HH3:HH" & eR1).Clear
    End With
    Set BoPhan = Nothing
End Sub


Nói cho rõ thêm : Cột HH của S01 bạn tính từ hàng thứ 3, cột A và B của S17 bạn tính bắt đầu từ hàng thứ 7, vì thế phải lấy eR1+4 là vì thế
Thân
 
Lần chỉnh sửa cuối:
Bạn trừ mất 5 dòng thì hỏi làm sao ra 38 được? Sửa lại như sau :

PHP:
Sub TaoBoPhan()
    Dim BoPhan As Range
    S01.Select
    On Error Resume Next
    S01.ShowAllData
    Range("HH3:HH1000").Clear
    eR = Range("D10000").End(xlUp).Row
    Set BoPhan = S01.Range("D3:D" & eR)
    With S01
        With BoPhan
            .AdvancedFilter Action:=xlFilterCopy, CopyToRange:=S01.Range( _
                "HH3"), Unique:=True
        End With
        .Names("Extract").Delete
        eR1 = .Range("HH1000").End(xlUp).Row
        S17.Range("A7:B55").ClearContents
        S17.Range("B7:B" & eR1 + 4).Value = .Range("HH3:HH" & eR1).Value
        S17.Range("A7:A" & eR1 + 4).FormulaR1C1 = "=ROW()-6"
        S17.Range("A7:A" & eR1 + 4).Value = S17.Range("A7:A" & eR1 + 4).Value
        .Range("HH3:HH" & eR1).Clear
    End With
    Set BoPhan = Nothing
End Sub


Nói cho rõ thêm : Cột HH của S01 bạn tính từ hàng thứ 3, cột A và B của S17 bạn tính bắt đầu từ hàng thứ 7, vì thế phải lấy eR1+4 là vì thế
Thân

Cảm ơn anh / chị nhiều!
Chúc anh / chị ngày càng nhiều sức khỏe, thành đạt & hạnh phúc!
 
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu
 
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu

Vậy phải sửa chỗ nào cho đúng tuyệt đối, bác chỉ cho em luôn đi?
Cảm ơn bác!
 
Lần chỉnh sửa cuối:
Vậy phải sửa chỗ nào cho đúng tuyệt đối, bác chỉ cho em luôn đi?
Cảm ơn bác!
Đúng như bạn yeudoi nói ấy... khi xác định vùng dử liệu sẽ lọc bằng Advanced Filter, bạn phải lấy luôn tiêu đề (cụ thể với file của bạn phải lấy từ cell D2 trở xuống) ---> Sau khi lọc ra vùng phụ, bạn xóa tiêu đề đi rồi muốn làm gì tiếp tùy thích
 
Cảnh báo:
- Bạn Tony Jaa dùng Advanced Filter như thế chưa đúng đâu nha
- Dử liệu cần lọc tại sheet Data, tính từ cell D3 trở xuống ---> Như vậy bạn đã bỏ mất tiêu đề
- Cũng may là trong cột này chỉ có duy nhất 1 Record mang tên "Ban Tổng giám đốc"... nếu không bạn sẽ nhận được 2 Record trùng nhau sau khi lọc ---> Vì Advanced Filter luôn luôn tính cell đầu tiên là TIÊU ĐỀ
Bạn cẩn thận nha ---> Không phải lần nào cũng may mắn như lần này đâu

Đúng là hôm qua chỉ chú ý đến vụ Thiếu dữ liệu mà không xem kỹ phần AD này. Khi lọc theo AD cần chú ý cả dòng tiêu đề
Thân
 
Đếm dữ liệu trùng

Vậy bạn tham khảo file đính kèm nhé.
Thân

Cám ơn anh đã coa một lời giải rất hay, nhưng nếu đặt trong vấn đề của tôi, thì nó đã giải quyết được 50% rồi, tức là anh đã tạo một cột mới, có các giá trị không trùng.

Tiếp theo, tôi muốn nhờ anh tao ra một cột nữa tương ứng mà nội dung là số lần một đối tượng trùng lặp như file tôi đính kèm.

Xin cám ơn!
 

File đính kèm

Cám ơn anh đã coa một lời giải rất hay, nhưng nếu đặt trong vấn đề của tôi, thì nó đã giải quyết được 50% rồi, tức là anh đã tạo một cột mới, có các giá trị không trùng.

Tiếp theo, tôi muốn nhờ anh tao ra một cột nữa tương ứng mà nội dung là số lần một đối tượng trùng lặp như file tôi đính kèm.

Xin cám ơn!

Bạn dùng hàm CountIf nhé

Cell H4=COUNTIF(Data!$B$2:$B$21,G4)

Thân
 
Lần chỉnh sửa cuối:
Vừa lọc ra 1 danh sách duy nhất lại vừa đếm số lần trùng ---> Vậy sao không dùng công cụ Consolidate cho nhanh, công thức chi cho rách việc!
 
Đây là công tức mình đang cần . cảm ơn các bác nhiều lắm
 
Em đã làm cách của bác nhưng nó copy y nguyên sang chứ không lọc các số trùng nhau được
Tại bạn làm chưa quen nên mới bị thế, chứ đây là cách nhanh nhất trong các cách đấy ---> Quy trình như sau:
- Vào menu Data\Filter\Advanced Filter
a) Mục Action chọn Filter the lis, in-place
b) Đặt con trỏ vào khung List range rồi quét chọn cột nào đó mà bạn muốn lọc (chỉ quét cột có chứa dử liệu trùng, không quét toàn bộ bảng tính)
c) Khung Criteria rangeCopy to: không dùng
d) Check vào mục Unique Records only
- Sau khi bấm OK, bảng tính sẽ được lọc ra với các phần tử duy nhất ---> Việc còn lại của bạn là copy chúng sang 1 nơi nào đó tùy thích
===> Không làm được, hãy đưa file mẩu lên đây!
-----------
Chứ lọc duy nhất mà dùng công thức hoặc AutoFilter là.. quá dở!
 
Giúp mình trong cái này luôn nhe

Mình muốn sắp xếp theo cột Suburb trong đó trước, sau đó lại tiếp tục sắp xếp theo địa chỉ ....

Mấy sếp giúp tui với nhé
Cách đơn giản nhất thôi
 

File đính kèm

Lọc dữ liệu trong một bảng(mảng hai chiều)

Giúp tôi lọc dữ liệu là thời khóa biểu của các giáo viên! đê kê khai giờ giảng trong tuần! tôi sắp vỡ đầu vì nó rồi+-+-+-++-+-+-++-+-+-+
làm ơn chỉ giáo!**~**
 

File đính kèm

Lần chỉnh sửa cuối:
Giúp Tôi Lọc thời khóa biểu của các giáo viên! để kê khai giờ giảng dạy trong tuần! Tôi sắp chết vì nó rồi không cách nào làm được. Xin cao chỉ giáo!

Giúp tôi lọc dữ liệu là thời khóa biểu của các giáo viên! đê kê khai giờ giảng trong tuần! tôi sắp vỡ đầu vì nó rồi+-+-+-+
làm ơn chỉ giáo!**~**
Thứ nhất: Bài của bạn phạm quy vì chen ngang vô topic có chủ đề hoàn toàn khác. (Sao bạn không qua BOX 'Giáo dục' hỏi vấn đề của bạn; Ở đó đề cập rất nhiều về thời khóa biểu)

Thứ hai: Đúng là bạn đưa ví dụ đó thì muốn hiểu cũng phải đoán thôi thầy/cô à!
Này nha, đây là ví dụ của thầy/cô:
|2|3|4|5|6|7|
| VH13 | VH32 || VH32 | VH13 | VH23 |
| VH32 | VH13 | VH32 | VH13 | VH23 | VH13 |
|VH8|VH8||VH8||VH8|
||| ||VH8|
||||VH14||
||VH31||VH31|||
Khi đó thầy/cô lại thống kê:
Nam|VH13|VH32|VH8|VH14|VH31|(Lớp)
(Số tiết)|8|12|8|2|4|

Thứ nhất: Bạn thiếu lịch lãm, khi bắt người đọc phải suy diễn để hiểu là 1 ô biểu thị 2 tiết học; Bạn nên nhớ rằng không phải ai cũng phải hiểu là 1 ô phải tính là 2 tiết học. Lỗi này sẽ nhỏ, nếu bạn thống kê hoàn toàn đúng, nhưng đằng này sai ở 3 nới khác nữa làm cho 1 số người trong đó có tôi tốn thêm thời gian không cần thiết cho lỗi sai của bạn;

Thứ hai (Ba lỗi đó là:)
(*) VH13 chiếm 5 ô mà thầy/cô thống kê chỉ 8 tiết;
(*) VH23 chiếm 2 ô mà thầy/cô không thống kê;
(*) VH32 lại chỉ chiếm 4 ô, nhưng thầy/cô ghi 12 tiết
Ở đây không thể gọi là nhầm lẫn giữa các lớp trong tuần, Thày/cô Nam được ghi đến 19 ô có tiết giảng, vị chi 38 tiết dạy!

. . . . . . . (Định nói nữa, nhưng thấy nặng lời quá, đành thôi)
 
Macro của bạn đây, xin mời

Giúp tôi lọc dữ liệu là thời khóa biểu của các giáo viên! đê kê khai giờ giảng trong tuần! tôi sắp vỡ đầu vì nó rồi+-+-+-++-+-+-++-+-+-+
làm ơn chỉ giáo!**~**

PHP:
Option Explicit:           Option Base 1
Sub AutoFilter()
 Dim Rng As Range, Clls As Range, sRng As Range, dRng As Range
 Dim MyAdd As String, Lop As String
 Dim Dong As Long
 Dim VTr As Byte, Tiet As Byte, Cot As Byte
 
 Set Rng = Selection:            Set dRng = Rng.Cells(1, 1)
 Dong = dRng.Row:                Cot = dRng.Column
 ReDim MDL(Dong To Dong + Rng.Rows.Count, Cot To Cot + Columns.Count) As Boolean
 Set dRng = Rng.Cells(1, 1).Offset(, 8)
 With dRng
   .Resize(2, 30).ClearContents
   .Value = "Lop":            .Offset(1).Value = "So Tiet"
 End With
 
 For Each Clls In Rng
   If MDL(Clls.Row, Clls.Column) = False Then
      VTr = InStr(Clls.Value, "(")
      If VTr > 0 Then Lop = Left(Clls.Value, VTr - 1)
      Set sRng = Rng.Find(Lop, , xlFormulas, xlPart)
      If Not sRng Is Nothing Then
         Tiet = 0
         If MDL(sRng.Row, sRng.Column) = False Then
            MyAdd = sRng.Address
            Do
               Tiet = Tiet + 1
               MDL(sRng.Row, sRng.Column) = True
               Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
         End If
         If Tiet > 0 Then
            With Cells(dRng.Row, "IV").End(xlToLeft).Offset(, 1)
               .Value = Lop:           .Offset(1).Value = Tiet
            End With
         End If
      End If
   End If
 Next Clls
End Sub

(Đọc kỹ hướng dẫn sử dụng trước khi dùng:)

(*) Chép macro này vô CS VBE & gán nó 1 tổ hợp phím, VD {CTRL}+(SHIFT}+A
(*) Điều quan trong là phải chọn vùng cần lọc;
Thí dụ, bạn hãy chọn vùng 'B15:G18' bằng chuột
& bấm tổ hợp phím mà bạn đã gán cho macro để nó cung cấp cho bạn kết quả ở bên phải liền kề với vùng chọn của bạn

(+) Số tiết mình chưa nhân đôi
(+) Nếu vẫn chưa được thì, hoặc:
. Đọc trên diễ đàn tiếp
. Sẽ đưa file lên để bạn xem, nếu yêu cầu của bạn là chính đán.

Chúc vui!
 
Giúp tôi lọc dữ liệu là thời khóa biểu của các giáo viên! đê kê khai giờ giảng trong tuần! tôi sắp vỡ đầu vì nó rồi+-+-+-++-+-+-++-+-+-+
làm ơn chỉ giáo!**~**
Tại cell K7 bạn gõ vào công thức này xem:
PHP:
=COUNTIF($B$6:$G$11,K$6&"*")*2
Thêm 1 chuyện quan trọng:
- Dử liệu nhập thì ghi là VH32 nhưng vùng thống kê bạn lại gõ VH 32 (có khoảng trắng) thì trời nào tìm ra được ---> Sửa lại cho thống nhất trước!
 
Tôi thây vô cùng xấu hổ với lòng tốt của mọi người, rất mong được sự thông cảm-\\/.
Rất cám ơn sự giúp đơ của mọi người
Ban HYen17 đã cho tôi thấy sự cẩu thả của mình thật sự không còn lời nào để nói, kinh mong bạn ân xá
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom