Lọc dữ liệu duy nhất, đếm số lần xuất hiện và tính tổng của dữ liệu được lọc (1 người xem)

Liên hệ QC

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

baquang1984

Thành viên tiêu biểu
Tham gia
3/6/10
Bài viết
429
Được thích
44
Nghề nghiệp
Kỹ sư Lâm nghiệp
Em nhờ thầy, cô, các anh, chị và các bạn trên diễn đàn viết giúp Code VBA lọc dữ liệu, với yêu cầu của chương trình như sau:
- Em có Sheets"DATA" là sheets chứa dữ liệu lọc và lọc theo số CMND1, Sheets"TONGHOP" là Sheets kết quả của dữ liệu lọc sang theo thứ tự các cột như file đính kèm.
- Khi lọc dữ liệu sang Sheets"TONGHOP" thì các cột từ CQL đến cột Noi_cap2 là dữ liệu duy nhất, còn 3 cột
+ Cột Thua_dat đếm xem có bao nhiêu thửa ở số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... có 1 Thửa)
+ Cột To_BD đếm xem có bao nhiêu tờ bản đồ ở Số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... có 1 Tờ bản đồ)
+ Cột Dien_Tich tính tổng diện tích của các thửa tìm được ở Số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... Diện tích 174,8)
Trên đây là mô tả về điều kiện của chương trình lọc, hoặc kết quả đã được thể hiện trong file đính kèm.
Mong được mọi người giúp đỡ
 

File đính kèm

bạn cho mình hỏi là có khi nào một số CMND mà có 2 công dân cùng sử dụng không nhỉ. nếu mỗi công dân là một số CMND duy nhất không trùng thi sao không lọc theo số CMND mà lại lọc từ cột CQL đến cột nơi cấp 2 nhỉ
 
Upvote 0
Bạn có thể bấm {CTRL}+{SHIFT}+F để có kết quả mới & kiểm tra.

;;;;;;;;;;; ;;;;;;;;;;; ;;;;;;;;;;; %#^#$ %#^#$ %#^#$
 

File đính kèm

Upvote 0
Em nhờ thầy, cô, các anh, chị và các bạn trên diễn đàn viết giúp Code VBA lọc dữ liệu, với yêu cầu của chương trình như sau:
- Em có Sheets"DATA" là sheets chứa dữ liệu lọc và lọc theo số CMND1, Sheets"TONGHOP" là Sheets kết quả của dữ liệu lọc sang theo thứ tự các cột như file đính kèm.
- Khi lọc dữ liệu sang Sheets"TONGHOP" thì các cột từ CQL đến cột Noi_cap2 là dữ liệu duy nhất, còn 3 cột
+ Cột Thua_dat đếm xem có bao nhiêu thửa ở số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... có 1 Thửa)
+ Cột To_BD đếm xem có bao nhiêu tờ bản đồ ở Số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... có 1 Tờ bản đồ)
+ Cột Dien_Tich tính tổng diện tích của các thửa tìm được ở Số CMND1 (VD Số CMND1 080397392, CQL là ông Lộc Văn Biển ..... Diện tích 174,8)
Trên đây là mô tả về điều kiện của chương trình lọc, hoặc kết quả đã được thể hiện trong file đính kèm.
Mong được mọi người giúp đỡ

Dữ liệu đất đai mà lủng như cái rổ thì làm sao mần đây. Thôi Dzọt lẹ, anh Ba Tê ơi xử vụ này đi. Em biết mấy vụ này anh khéo lắm
 
Upvote 0
Dữ liệu đất đai mà lủng như cái rổ thì làm sao mần đây. Thôi Dzọt lẹ, anh Ba Tê ơi xử vụ này đi. Em biết mấy vụ này anh khéo lắm
Thấy kiểu đất đai như vậy và hình như cũng "bị theo" những bài như thế này nhiều lần rồi.
Khi rảnh rỗi mới theo nữa. Bi giờ thì người ta "tắt đèn" mà mình ngồi đây làm gì.
 
Upvote 0
Không ngủ được làm thử, chẳng trúng thì trượt
Mã:
Sub TongHop()
    Dim Arr, Res, i As Long, j As Long, Tmp As Long, k As Long
    Arr = Sheets("DATA").Range("B2:O" & Sheets("DATA").Range("B65536").End(3).Row)
    ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2) + 1)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(Arr, 1)
            If Not .Exists(Arr(i, 4)) Then
                Debug.Print Arr(i, 4)
                k = k + 1
                .Add Arr(i, 4), k
                For j = 1 To 11
                    Res(k, j) = Arr(i, j)
                Next
                Res(k, 12) = 1
                Res(k, 13) = 1
                Res(k, 14) = Arr(i, 14)
                Res(k, 15) = Arr(i, 13)
            Else
                Tmp = .Item(Arr(i, 4))
                Res(Tmp, 12) = Res(Tmp, 12) + 1
                Res(Tmp, 14) = Res(Tmp, 14) + Arr(i, 14)
                If InStr(1, Res(Tmp, 15), Arr(i, 13)) = 0 Then
                    Res(Tmp, 15) = Res(Tmp, 15) & "," & Arr(i, 13)
                    Res(Tmp, 13) = Res(Tmp, 13) + 1
                End If
            End If
        Next
    End With
    Sheets("TONGHOP").[A2:N65536].ClearContents
    Sheets("TONGHOP").Range("A2").Resize(k, 14) = Res
End Sub
 
Upvote 0
Em cảm ơn các bác đã nhiệt tình giúp đỡ, số liệu đất đai của em không phải là lủng củng mà em đưa một phần dữ liệu lên vì khối lượng dữ liệu thì nhiều quá!
 
Upvote 0
bạn cho mình hỏi là có khi nào một số CMND mà có 2 công dân cùng sử dụng không nhỉ. nếu mỗi công dân là một số CMND duy nhất không trùng thi sao không lọc theo số CMND mà lại lọc từ cột CQL đến cột nơi cấp 2 nhỉ
Em cảm ơn anh diemhuyenanh đúng là mỗi công dân có 1 CMND do vậy ở đầu bài em đã yêu cầu là lọc theo số CMND mà "và lọc theo số CMND1"
 
Upvote 0
Thấy kiểu đất đai như vậy và hình như cũng "bị theo" những bài như thế này nhiều lần rồi.
Khi rảnh rỗi mới theo nữa. Bi giờ thì người ta "tắt đèn" mà mình ngồi đây làm gì.
Về vấn đề này mấy chương trình anh Ba Tê viết lần trước thật là tuyệt vời. Giờ trời đã sáng rồi anh Ba Tê có thể bớt chút thời gian giúp em được không ạ.
Thanks anh và mọi người trên diễn đàn nhiều!
 
Upvote 0
Không ngủ được làm thử, chẳng trúng thì trượt
Mã:
Sub TongHop()
    Dim Arr, Res, i As Long, j As Long, Tmp As Long, k As Long
    Arr = Sheets("DATA").Range("B2:O" & Sheets("DATA").Range("B65536").End(3).Row)
    ReDim Res(1 To UBound(Arr, 1), 1 To UBound(Arr, 2) + 1)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(Arr, 1)
            If Not .Exists(Arr(i, 4)) Then
                Debug.Print Arr(i, 4)
                k = k + 1
                .Add Arr(i, 4), k
                For j = 1 To 11
                    Res(k, j) = Arr(i, j)
                Next
                Res(k, 12) = 1
                Res(k, 13) = 1
                Res(k, 14) = Arr(i, 14)
                Res(k, 15) = Arr(i, 13)
            Else
                Tmp = .Item(Arr(i, 4))
                Res(Tmp, 12) = Res(Tmp, 12) + 1
                Res(Tmp, 14) = Res(Tmp, 14) + Arr(i, 14)
                If InStr(1, Res(Tmp, 15), Arr(i, 13)) = 0 Then
                    Res(Tmp, 15) = Res(Tmp, 15) & "," & Arr(i, 13)
                    Res(Tmp, 13) = Res(Tmp, 13) + 1
                End If
            End If
        Next
    End With
    Sheets("TONGHOP").[A2:N65536].ClearContents
    Sheets("TONGHOP").Range("A2").Resize(k, 14) = Res
End Sub
Em cảm ơn anh dhn46! Với Code này của anh dhn46 thì cơ bản đáp ứng được công việc và dữ liệu hiện tai, tuy nhiên dữ liệu của e có đến 43 cột và có 3 cột nữa cũng làm công việc tương tự như cột 12, 13, 14 Sheets"TONGHOP". Vậy em muốn sửa Code của anh để thêm 3 cột nữa thì cần phải sửa như thế nào ạ, xem code của anh khó quá.
(em gửi file có đủ 43 cột và có thêm 3 cột nữa là cột 15, 16, 17 làm công việc tưng tự như cột 12, 13 ,14 Sheets"TONGHOP" các cột 15, 16, 17 được truy xuất dữ liệu từ cột 28, 29, 30 Sheets"DaTA", tuy nhiên cột 16 Sheets"TONGHOP" khi lọc có khác một chút là đếm số thửa có cả dấu "+" VD như có 3 thửa như sau (157+158+159) và được tính làm 3 thửa có 2 thửa nhưa sau (174+156) và được tính là 2 thửa).
Em làm VD một chủ hộ có Số CMND1 = 080791895 trong file đính kèm!
Mong được anh và mọi người trên diễn đàn giúp đỡ. Em cảm ơn mọi người nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ngoài cách dùng VBA, mình thấy dùng Pivot Table cũng nhẹ nhàng và cho độ chính xác cao
 

File đính kèm

Upvote 0
Ngoài cách dùng VBA, mình thấy dùng Pivot Table cũng nhẹ nhàng và cho độ chính xác cao
Em cảm ơn anh sealand dùng Pivot Table thì cũng được tuy nhiên một việc quan trong là Pivot Table không đếm được các Cell có dự liệu kiểu 157+158+159 như em mô tả ở bài #10. Do vây em muốn nhờ các thầy, cô, các anh, chị và các bạn giúp đỡ xử lý chương trình bằng VBA.
Em cảm ơn mọi người nhiều!
 
Upvote 0
Em cảm ơn anh sealand dùng Pivot Table thì cũng được tuy nhiên một việc quan trong là Pivot Table không đếm được các Cell có dự liệu kiểu 157+158+159 như em mô tả ở bài #10. Do vây em muốn nhờ các thầy, cô, các anh, chị và các bạn giúp đỡ xử lý chương trình bằng VBA.
Em cảm ơn mọi người nhiều!
Mình nói rồi, dạng bài này chỉ có anh Ba Tê làm là ngon lành nhất thôi. Đợi đi, khuya khuya làm anh Ba Tê nhào vô hà.
 
Upvote 0
Mình nói rồi, dạng bài này chỉ có anh Ba Tê làm là ngon lành nhất thôi. Đợi đi, khuya khuya làm anh Ba Tê nhào vô hà.
Vâng em cảm ơn anh!. Em cũng được Bác Ba Tê xử lý giúp mấy chương trình, bác ấy xử lý về lĩnh vực quản lý đất đai cũng oki lắm không biết anh có làm trong ngành quản lý đất đai không???
 
Upvote 0
Lọc dữ liệu duy nhất, đếm số lần xuất hiện và tính tổng của dữ liệu được lọc

Những cái bạn cần tôi đã làm qua hết rồi, nhưng những bài viết trước đây tôi có góp ý cách thực hiện 1 File theo dõi từ khâu đăng ký, đến khâu xét duyệt, và lập thủ tục cấp giấy chứng nhận quyền sử dụng đất, nhưng bạn không có ý kiến (hình như không có thành ý với cách tôi góp ý). Tính tôi là vậy, nếu tôi góp ý mà không thấy ý kiến là những bài tiếp theo tôi chỉ đọc qua mà không có ý kiến trả lời. Nhưng hôm nay bạn hỏi Quanghai1969

không biết anh có làm trong ngành quản lý đất đai không???

Thì hôm nay tôi viết bài này để bạn biết ai làm trong ngành Tài nguyên và Môi trường.
 
Lần chỉnh sửa cuối:
Upvote 0
Những cái bạn cần tôi đã làm qua hết rồi, nhưng những bài viết trước đây tôi có góp ý cách thực hiện 1 File theo dõi từ khâu đăng ký, đến khâu xét duyệt, và lập thủ tục cấp giấy chứng nhận quyền sử dụng đất, nhưng bạn không có ý kiến (hình như không có thành ý với cách tôi góp ý). Tính tôi là vậy, nếu tôi góp ý mà không thấy ý kiến là những bài tiếp theo tôi chỉ đọc qua mà không có ý kiến trả lời. Nhưng hôm nay bạn hỏi Quanghai1969
Thì hôm nay tôi viết bài này để bạn biết ai làm trong ngành Tài nguyên và Môi trường.
Vâng em cảm ơn anh đã góp ý, em đã cảm ơn những bài góp ý của anh tuy nhiên các vấn đề của anh góp ý là đối với những người làm trong ngành tài nguyên môi trường liên quan trực tiếp đến công tác quản lý đất đai, và cấp giấy chứng nhận quyền sử dụng đất. Còn vấn đề của em là em hình dùng được vấn đề mình làm là cần cái gì nhưng trình độ về VBA trong excel em lại không có do vậy rất khó cho việc tiếp theo. Nêm phải nhờ đến Thầy, cô, các anh, chị và các bạn trên diễn đàn giúp đỡ về Tạo một chương trình bằng VBA.
Một lần nữa cảm ơn anh đã góp ý!
 
Upvote 0
Những cái bạn cần tôi đã làm qua hết rồi, nhưng những bài viết trước đây tôi có góp ý cách thực hiện 1 File theo dõi từ khâu đăng ký, đến khâu xét duyệt, và lập thủ tục cấp giấy chứng nhận quyền sử dụng đất, nhưng bạn không có ý kiến (hình như không có thành ý với cách tôi góp ý). Tính tôi là vậy, nếu tôi góp ý mà không thấy ý kiến là những bài tiếp theo tôi chỉ đọc qua mà không có ý kiến trả lời. Nhưng hôm nay bạn hỏi Quanghai1969



Thì hôm nay tôi viết bài này để bạn biết ai làm trong ngành Tài nguyên và Môi trường.

Bạn đừng buồn. Bạn đã phí sức cho sai đối tượng.
Có những người đánh giá cao khả năng thiết kế bảng. Khi gặp vấn đề, người ta sửa lại cách thiết kế thế nào cho dễ kiểm soát và phân tích dữ liệu.
Có những người đánh giá cao khả năng làm việc với dữ liệu "thiết kế thế nào cũng được". Khi gặp vấn đề, người ta dựa vào năng lực của VBA để làm việc.

Loại 1 bị người ta khinh rể vì dùng công thức và mấy cái bảng Pivot nó không được "pờ rồ"
Loại 2 được trong vọng hơn, bởi vì chỉ cần hỏi và lấy giải đáp thôi
 
Upvote 0
Bạn đừng buồn. Bạn đã phí sức cho sai đối tượng.
Có những người đánh giá cao khả năng thiết kế bảng. Khi gặp vấn đề, người ta sửa lại cách thiết kế thế nào cho dễ kiểm soát và phân tích dữ liệu.
Có những người đánh giá cao khả năng làm việc với dữ liệu "thiết kế thế nào cũng được". Khi gặp vấn đề, người ta dựa vào năng lực của VBA để làm việc.

Loại 1 bị người ta khinh rể vì dùng công thức và mấy cái bảng Pivot nó không được "pờ rồ"
Loại 2 được trong vọng hơn, bởi vì chỉ cần hỏi và lấy giải đáp thôi

Theo kinh nghiệm của tôi, thì để tiết kiệm Quota tôi cần trả lời có trọng tâm vấn đề, nghĩa là:

- Trước tiên tải File, đọc tiêu đề cột, nội dung trong File và so sánh với nội dung yêu cầu của chủ Topic.

- Góp ý những vấn để cần sửa đổi, bổ sung hoặc thay đổi cấu trúc.

- Khi chủ Topic đã sửa đổi, bổ sung theo yêu cầu và kèm theo vài chục dòng dữ liệu thì lúc đó tôi mới tính đến chuyện giúp (chỉ trả lời 1 đến 2 lần là cao lắm rồi), chứ có nhiều bạn hỏi bâng quơ không cụ thể thì có trường hợp phải trả lời nhiều lần mất rất nhiều thời gian và tốn rất nhiều Quota không đáng có. Chính vì vậy mà thời gian gần đây tôi thường góp ý cho các bài viết như đã nêu trên.

Đối với nội dung bạn ấy hỏi, thì giải pháp như sau:

- Sử dụng Advanced Filter để trích lọc tên chủ hoặc số CMND.

- Sử dụng VBA để chuyển đổi dữ liệu cột số thửa cũ đồng thời chạy PivotTable (theo ý kiến của bạn) là có kết quả tổng số thửa của từng chủ sử dụng.
 
Upvote 0
Web KT

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

Back
Top Bottom