Mong được sự giúp đỡ chương trình lọc dữ liệu (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 chào các thầy, cô và các anh các chị trên diễn đàn Giải pháp Excel.
Nhờ các thành viên của diễn đàn giúp em chương trình lọc dữ liệu. Trong file đính kèm đã có chương trình Code VBA lần trước được các thành viên giúp đỡ nay em muốn thêm một điều kiện là
Nếu lọc đến chủ quản lý nào mà ở cột R (MDSD) Sheets"DATA_SoDC" xuất hiện 1 mã ONT+ ... thì Cột E (Số thửa) tổng thửa của hộ đó cộng thêm 2, xuất hiện 2 mã ONT+ ... thì Cột E (Số thửa) tổng thửa của hộ đó cộng thêm 4, xuất hiện 3 mã ONT+ ... thì Cột E (Số thửa) tổng thửa của hộ đó cộng thêm 6
Mong được các thành viên của diễn đàn giúp đỡ. Em xin được cảm ơn ạ!
 

File đính kèm

Chắc muốn như vậy ah?
Mã:
Public Sub GPE()
Dim Dic As Object, sArr, dArr(1 To 10000, 1 To 3), tArr
Dim Tam, I As Long, Tem, J As Long, K As Long, N As Long
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("DATA_SoDC")
    sArr = .Range("A2", .Range("A65536").End(3)).Resize(, 24).Value
End With
For I = 1 To UBound(sArr)
    Tem = Split(sArr(I, 18), "+")
    For J = 0 To UBound(Tem)
        K = K + 1
        dArr(K, 1) = sArr(I, 4)
        dArr(K, 2) = sArr(I, 1)
        dArr(K, 3) = Tem(J)
    Next J
Next I
ReDim tArr(1 To K, 1 To 5)
For I = 1 To K
    Tam = dArr(I, 1)
    If Not Dic.Exists(Tam) Then
        N = N + 1
        Dic.Add Tam, N
        tArr(N, 1) = N
        tArr(N, 2) = dArr(I, 1)
        tArr(N, 3) = dArr(I, 2)
        tArr(N, 4) = N + 7
        tArr(N, 5) = 1
    Else
        tArr(Dic.Item(Tam), 5) = tArr(Dic.Item(Tam), 5) + 1
    End If
Next I
With Sheets("So_DC")
    .Range("A2:E65536").ClearContents
    .Range("A2").Resize(N, 5).Value = tArr
End With
Set Dic = Nothing
End Sub
Em cảm ơn anh đã giúp đỡ tuy nhiên chương trình đang chạy chưa đúng ở cột 5 Sheets"So_DC"
và cấu trúc hàm
SoTrang = 8
For I = 1 To K
dArr(I, 4) = SoTrang
Trang = dArr(I, 5) \ 24
SoLe = dArr(I, 5) Mod 24
If SoLe > 0 Then Trang = Trang + 1
SoTrang = SoTrang + Trang
Vẫn phải được dữ nguyên chỉ xử lý hảm ở phần Code
Tem = sArr(I, 4)
If Not Dic.Exists(Tem) Then
K = K + 1: Num = Num + 1
Dic.Add Tem, K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 4)
dArr(K, 3) = sArr(I, 1)
dArr(K, 5) = 1
Else
dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
End If
để làm sao khi lọc dữ liệu sang cột 5 Sheets"So_DC" mà chủ quản lý đó có mã ONT ở cột 18 sheets"DATA_SoDC" thì cổng tổng số thửa tìm được của chủ quản lý đó với 2
Cảm ơn anh ạ
 
Upvote 0
Em cảm ơn anh đã giúp đỡ tuy nhiên chương trình đang chạy chưa đúng ở cột 5 Sheets"So_DC"
và cấu trúc hàm

Vẫn phải được dữ nguyên chỉ xử lý hảm ở phần Code

THử thêm 1 dòng trong đoạn này:
PHP:
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 4)
    If Not Dic.Exists(Tem) Then
        K = K + 1
        Dic.Add Tem, K
        dArr(K, 1) = K
        dArr(K, 2) = sArr(I, 4)
        dArr(K, 3) = sArr(I, 1)
        dArr(K, 5) = 1
    Else
        dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
    End If
    If InStr(sArr(I, 18), "+") Then dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1' thêm dòng này'
Next I
 
Upvote 0
THử thêm 1 dòng trong đoạn này:
PHP:
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 4)
    If Not Dic.Exists(Tem) Then
        K = K + 1
        Dic.Add Tem, K
        dArr(K, 1) = K
        dArr(K, 2) = sArr(I, 4)
        dArr(K, 3) = sArr(I, 1)
        dArr(K, 5) = 1
    Else
        dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
    End If
    If InStr(sArr(I, 18), "+") Then dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1' thêm dòng này'
Next I
Em cảm ơn anh Ba Tê và các thành viên trên diễn đàn. Code VBA này trước anh giúp em nên viết cái đúng liền
PHP:
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 4)
    If Not Dic.Exists(Tem) Then
        K = K + 1
        Dic.Add Tem, K
        dArr(K, 1) = K
        dArr(K, 2) = sArr(I, 4)
        dArr(K, 3) = sArr(I, 1)
        dArr(K, 5) = 1
    Else
        dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
    End If
    If InStr(sArr(I, 18), "+") Then dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 2 'Em sửa để công thêm 2 như thế này có đúng không anh vì của anh nó chỉ công thêm 1 thui'
Next I
 
Upvote 0
Em cảm ơn anh Ba Tê và các thành viên trên diễn đàn. Code VBA này trước anh giúp em nên viết cái đúng liền
PHP:
For I = 1 To UBound(sArr, 1)
    Tem = sArr(I, 4)
    If Not Dic.Exists(Tem) Then
        K = K + 1
        Dic.Add Tem, K
        dArr(K, 1) = K
        dArr(K, 2) = sArr(I, 4)
        dArr(K, 3) = sArr(I, 1)
        dArr(K, 5) = 1
    Else
        dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
    End If
    If InStr(sArr(I, 18), "+") Then dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 2 'Em sửa để công thêm 2 như thế này có đúng không anh vì của anh nó chỉ công thêm 1 thui'
Next I

Bạn tự kiểm tra kết quả, cái nào đúng thì xài.
Tôi thấy bên trên mỗi dòng đều cộng 1 rồi, gặp dấu "+" thì cộng thêm 1 nữa, bạn muốn công thêm 2 thì tùy.
 
Upvote 0
Bạn tự kiểm tra kết quả, cái nào đúng thì xài.
Tôi thấy bên trên mỗi dòng đều cộng 1 rồi, gặp dấu "+" thì cộng thêm 1 nữa, bạn muốn công thêm 2 thì tùy.
Vâng tuy nhiên như đề bài em đã nêu nếu lọc đến chủ quản lý nào mà có 1 mã ONT+... thì cộng thêm 2, Có 2 mã ONT+... thì cộng thêm 4, có nghĩa là 1 mã thì công 2, hai mã cộng 4 .... n mã thì cộng n x 2
anh ạ. Anh giúp em câu lệnh này được không ạ
Em cảm ơn anh!
 
Upvote 0
Vâng tuy nhiên như đề bài em đã nêu nếu lọc đến chủ quản lý nào mà có 1 mã ONT+... thì cộng thêm 2, Có 2 mã ONT+... thì cộng thêm 4, có nghĩa là 1 mã thì công 2, hai mã cộng 4 .... n mã thì cộng n x 2
anh ạ. Anh giúp em câu lệnh này được không ạ
Em cảm ơn anh!

Sửa thế này xem thế nào.

For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 4)
If Not Dic.Exists(Tem) Then
K = K + 1: Num = Num + 1
Dic.Add Tem, K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 4)
dArr(K, 3) = sArr(I, 1)
dArr(K, 5) = IIf(InStr(sArr(I, 18), "+"), 2, 1)
Else
dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + IIf(InStr(sArr(I, 18), "+"), 2, 1)
End If
Next I
 
Upvote 0
Sửa thế này xem thế nào.
Em cảm ơn anh đã giúp đỡ tuy nhiên chương trình thực hiện chưa được ạ ở chỗ là khi tìm thấy mã ONT+... thì công thêm 2 câu lệnh của anh thêm vào thì nó + thêm 1 thui
Anh kiểm tra lại giúp em với ạ
 
Upvote 0
Em cảm ơn anh đã giúp đỡ tuy nhiên chương trình thực hiện chưa được ạ ở chỗ là khi tìm thấy mã ONT+... thì công thêm 2 câu lệnh của anh thêm vào thì nó + thêm 1 thui
Anh kiểm tra lại giúp em với ạ
Bạn đã test chưa vậy ? Cụ thể là dòng nào chưa cộng ?
cụ thể là trường hợp của "Triệu văn cương"
dữ liệu có tất cả 6 dòng thì có 2 dòng có "ONT+..."
như vậy kết quả là 8 hay là bao nhiêu ?
nếu là 8 thì sửa code đã đúng, còn không phải 8 thì cần xem lại cách giải thích của bạn.
trieuvancuong.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn đã test chưa vậy ? Cụ thể là dòng nào chưa cộng ?
cụ thể là trường hợp của "Triệu văn cương"
dữ liệu có tất cả 6 dòng thì có 2 dòng có "ONT+..."
như vậy kết quả là 8 hay là bao nhiêu ?
nếu là 8 thì sửa code đã đúng, còn không phải 8 thì cần xem lại cách giải thích của bạn.
View attachment 160346

Vâng em cảm ơn anh, em đã kiểm tra rồi ạ, em cũng giải thích ở trên là nếu lọc chủa quản lý nào mà thấy 1 mã ONT+... thì công thêm 2 nếu 2 mã ONT+... thì cộng thêm 4
DO vậy hộ ông Triệu Văn Cương có tổng 6 thửa và có 2 mã ONT+... do vậy kết quả đúng là 6 + 4 = 10, câu lệnh anh viết là bằng 8
Hộ Triệu Sinh Phượng tổng có 2 thửa, có một thửa mã ONT+... kết quả đúng là 2 + 2 = 4 câu lệnh của anh ra kết quả là 2 + 1 = 3
Mong được anh kiểm tra lại và giúp đỡ hoàn thiện chương trình ạ
Em cảm ơn anh!
 
Upvote 0
Vâng em cảm ơn anh, em đã kiểm tra rồi ạ, em cũng giải thích ở trên là nếu lọc chủa quản lý nào mà thấy 1 mã ONT+... thì công thêm 2 nếu 2 mã ONT+... thì cộng thêm 4
DO vậy hộ ông Triệu Văn Cương có tổng 6 thửa và có 2 mã ONT+... do vậy kết quả đúng là 6 + 4 = 10, câu lệnh anh viết là bằng 8
Hộ Triệu Sinh Phượng tổng có 2 thửa, có một thửa mã ONT+... kết quả đúng là 2 + 2 = 4 câu lệnh của anh ra kết quả là 2 + 1 = 3
Mong được anh kiểm tra lại và giúp đỡ hoàn thiện chương trình ạ
Em cảm ơn anh!
Thế thì sửa số 2 thành 3 là ok
nhớ là sửa cả trên 2 dòng code


For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 4)
If Not Dic.Exists(Tem) Then
K = K + 1: Num = Num + 1
Dic.Add Tem, K
dArr(K, 1) = K
dArr(K, 2) = sArr(I, 4)
dArr(K, 3) = sArr(I, 1)
dArr(K, 5) = IIf(InStr(sArr(I, 18), "+"), 3, 1)
Else
dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + IIf(InStr(sArr(I, 18), "+"), 3, 1)
End If
 
Upvote 0
Bài 5 bạn sửa +1 thành +2 kết quả thế nào.
Cảm ơn anh Ba Tê em đã thử + 2 nhưng kết quả là những trường hợp > 2 mã ONT+... thì nó vẫn chỉ cộng thêm 2 thôi anh ạ và em có bài #7 để hỏi lại anh mà
Mong được sự giúp đỡ của anh
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh Ba Tê em đã thử + 2 nhưng kết quả là những trường hợp > 2 mã ONT+... thì nó vẫn chỉ cộng thêm 2 thôi anh ạ và em có bài #7 để hỏi lại anh mà
Mong được sự giúp đỡ của anh

Không hiểu luôn.
Bạn xem thử trong file này, kết quả của Tên nào sai, kết quả đúng mà bạn muốn là bao nhiêu.
 

File đính kèm

Upvote 0
Không hiểu luôn.
Bạn xem thử trong file này, kết quả của Tên nào sai, kết quả đúng mà bạn muốn là bao nhiêu.
Em cảm ơn anh Ba Tê đã nhiệt tình giúp đỡ em xem file của anh chạy đúng và em đã hiểu tại sao em sai. Xin lỗi anh nhiều nhé
Đúng là Bể dột mênh mông, quay đầu là bờ nhưng do trình độ về khoản VBA này dốt quá nên cũng đanh không quay đầu nữa mà muốn được tìm hiểu để hiểu thêm.
Cảm ơn anh nhiều nhiều!!
 
Upvote 0
Web KT

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

Back
Top Bottom