Tìm đúng mã, thêm dòng, tính tổng - Nhờ giúp đỡ (1 người xem)

Liên hệ QC

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

loinguyen212

Thành viên thường trực
Tham gia
21/2/14
Bài viết
254
Được thích
35
Chào tất cả mọi người,

Trong file em muốn tìm đúng mã ở cột SoPhieu, đưa vào một vùng, thêm dòng, tính tổng. Như trong file đính kèm.

Nhờ mọi người giúp đỡ.
 

File đính kèm

Bạn xem file; Nếu nhiều records thì fải xài dao bén hơn!
 

File đính kèm

Upvote 0
Cảm ơn bác SA_DQ. Cách của bác hay quá.
Dữ liệu của em một tháng có 1000 bản ghi, mỗi bản ghi khoảng 40 cột. Không biết là có ổn không ạ?
 
Upvote 0
Không thấy bác SA_DQ cho mượn dao bén...@$@!^%@$@!^%@$@!^%
Ban đầu em thử sort ngay trên Range, và kết quả là hỏng luôn cả dữ liệu gốc, nhưng không biết có cách nào sort trên mảng được không? Nghĩa là đưa vào mảng, sort rồi tiếp tục (em cạn nghĩ như thế sẽ không hỏng dữ liệu và nếu sort được trên mảng thì sẽ không cần đưa dữ liệu ra ngoài, hè hè). Bác chỉ dẫn thêm cho em với.
 
Upvote 0
Nếu như em muốn tính tổng rồi để ngay dòng của ID đấy như file thì làm như thế nào ạ???
Em thử các kiểu mà chưa ra đáp án, bác gỡ giúp em.
 

File đính kèm

Upvote 0
Không thấy bác SA_DQ cho mượn dao bén...
Ban đầu em thử sort ngay trên Range, và kết quả là hỏng luôn cả dữ liệu gốc,. . . Bác chỉ dẫn thêm cho em với.

1./ Để khỏi hỏng dữ liệu (DL) góc thì trước khi sắp xếp nên cho nó thể cột STT; Để sau đó ta lập lại trật tư như cũ, khi ta muốn.

2./ Trước khi cung cấp cho bạn dao loại khả dĩ hơn, mình có thắc mắc, mong được bạn giải đáp:
trong cột [SoFieu] có 3 nhóm A, B & C, mình cho là vậy;
Chỉ riêng nhóm 'B' bị bạn chia làm 2 fân nhóm; Đó là .B-PXN' & 'B-PNX'
Cho nên macro sau này sẽ f ân tách DL nhóm này làm 2

PHP:
Option Explicit
Sub TH_Arr()
 Dim Arr(), Rng As Range
 Dim Rws As Long, J&, W&, TgN#, TgX#
 Dim Tmp$, SF$, Tong$
 
 Set Rng = [B2].CurrentRegion:          Rws = Rng.Rows.Count
 Rng.Sort Key1:=Range("A3"), Order1:=xlAscending, Key2:=Range("B3") _
    , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom
 Arr() = [A3].Resize(Rws, 4).Value
 ReDim dArr(1 To 2 * Rws, 1 To 6):      Tong = [k3].Value
 For J = 1 To Rws
    Tmp = Left(Arr(J, 2), 1):           SF = Arr(J, 1)
    If SF = "" Then Exit For
    W = W + 1
    dArr(W, 1) = Arr(J, 1):             dArr(W, 2) = Arr(J, 2)
    If Tmp = "N" Then
        dArr(W, 3) = Arr(J, 3):         dArr(W, 4) = Arr(J, 4)
        TgN = TgN + Arr(J, 4)
    ElseIf Tmp = "X" Then
        dArr(W, 5) = Arr(J, 3):         dArr(W, 6) = Arr(J, 4)
        TgX = TgX + Arr(J, 4)
    End If
    If SF <> Arr(J + 1, 1) Then
        W = W + 1:                      dArr(W, 2) = Tong
        dArr(W, 4) = TgN:               TgN = 0
        dArr(W, 6) = TgX:               TgX = 0
    End If
 Next J
 [j5].Resize(W, 6).Value = dArr()
End Sub

Bạn làm rõ điều 2 này, biết đâu sẽ có ai đó cho bạn mượn con dao fẩu thuật xài đỡ!

3./ Trong macro chưa có lệnh xếp lại trật tự DL như cũ đo chưa thêm cột [STT]; Điều này bạn tự làm để đúng í mình & điều này sẽ chỉ có lợi cho bạn.
 
Upvote 0
Là do lỗi của em, ban đầu số là vậy, nhưng sau em thấy không thích hợp nên chỉnh lại, nhưng chưa soát kỹ. Mong bác thông cảm. Cột số phiếu chỉ khác nhau A, B,.. (đuôi sau giống nhau).
Dữ liệu của em đã lên tới mấy tháng, bây giờ sửa lại cũng là câu chuyện dài. Em sẽ chỉnh sửa và vướng mắc sẽ hỏi tiếp.
Thế còn "sort trên mảng" thì được không hả bác??
 
Lần chỉnh sửa cuối:
Upvote 0
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
1./ Để khỏi hỏng dữ liệu (DL) góc thì trước khi sắp xếp nên cho nó thể cột STT; Để sau đó ta lập lại trật tư như cũ, khi ta muốn.
3./ Trong macro chưa có lệnh xếp lại trật tự DL như cũ đo chưa thêm cột [STT]; Điều này bạn tự làm để đúng í mình & điều này sẽ chỉ có lợi cho bạn.
Nếu như bắt buộc chắc em sẽ phải thêm phần số TT như bác nói, vì em đã tạo vùng trên sheet để nhập dữ liệu, nên việc thay đổi để đánh số TT tự động chắc sẽ cần thêm chút thời gian.
Chuyện này cũng cũng có nghe trên diễn đàn rồi; Bạn tìm tiếp xem sao?!
Nếu không được em sẽ gửi dữ liệu lên.

Bài #5 có ai giúp cho em với, phần này hơi giống với câu lệnh SQL group by, em viết chưa được.
 
Upvote 0
Bài #5 có ai giúp cho em với, phần này hơi giống với câu lệnh SQL group by, em viết chưa được.

Làm già mà to tác thế không biết?
Xài hàm DSUM() như tham khảo dưới đây là được mà.

=DSUM(D2:G15,G2,L5:L6)

(Có thể kết hợp với 1 macro; khỏe re.)
 
Upvote 0
Làm già mà to tác thế không biết?
Xài hàm DSUM() như tham khảo dưới đây là được mà.

=DSUM(D2:G15,G2,L5:L6)

(Có thể kết hợp với 1 macro; khỏe re.)
Nếu dùng công thức thì khi em xóa vùng dữ liệu thì còn tính được không ạ. Vùng từ C2:G15 là vùng em vừa dùng advanced filter để lọc ra từ dữ liệu nguồn. (vùng này là vùng tạm, bởi sau khi dùng xong thì em xóa luôn).
Kết hợp với 1 macro ra sao ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Dữ liệu bạn lọc được từ fương thức AdvancedFilter là 1 CSDL, vậy bạn hoàn toàn iên tâm để tính toán; chỉ có điều là cần thiết lập lại vùng Criteria (nếu cần)
 
Upvote 0
Yên tâm tính toán xong mà dữ liệu vừa lọc bị xóa đi thì có ảnh hưởng không hả bác ChanhTQ??
Vùng Criteria em đang nghĩ là sẽ đặt name luôn, còn điều kiện sẽ thay đổi theo lựa chọn để xem kết quả.
Ban đầu em đang nghĩ nó giống như câu lệnh SQL thôi, chứ không làm cách để viết ra câu lệnh, mà đang tìm cách dùng macro đơn giản trong này thôi. Quan trọng vẫn là giải được bài toán. Bác thi triển cho em tham khảo với.
 
Upvote 0
Bạn xem ở trang Sheet3

Khi đỗ dữ liệu lần kế tiếp fải thỏa các iêu cầu sau:

(*) Tiêu đề trường [SoPhieu] fải ở [D2]; [SoLuong] fải ở [G2]

(*) Dữ liệu đỗ xuống fải thỏa iêu cầu của 1 CSDL & có thể chiếm toàn vùng từ [A2:N65500]

(*) Cột [Q:Q] bạn tự tìm cách mà điền vô, nếu thích.
 

File đính kèm

Upvote 0
Em Test thử đã ok rồi, cảm ơn bác HYen17.
Thú thật chiều hnay em cũng đã tìm ra lời giải, nhưng hơi dài lê thê, em phải đánh vật với Dic và mảng tạm mấy ngày rồi, không ngờ có cách dễ dàng và ngắn gọn hơn, em đọc chưa hiểu hết code nên chắc phải ngâm thêm. Cảm ơn bác lần nữa.
 
Upvote 0
Viết bài trong những thời khắc rỗi rãnh!

Thú thật chiều hnay em cũng đã tìm ra lời giải, nhưng hơi dài lê thê, em phải đánh vật với Dic và mảng tạm mấy ngày rồi, không ngờ có cách dễ dàng và ngắn gọn hơn, em đọc chưa hiểu hết code nên chắc phải ngâm thêm. Cảm ơn bác lần nữa.

Nếu xài đến Dictionary thì ta có thể viết hàm (mảng) tự tạo như trong file;
Ta cứ việc đỗ dữ liệu vô vùng cần thiết (hiện tại là vùng [C2:G999] trang tính có tên 'Sheet3') thì hàm (mảng) người dùng sẽ thống kê cho bạn.

Chúc vui!
 

File đính kèm

Upvote 0
Quay lại với bài này dữ liệu nhưng cách trình bày có khác, em cũng thử mọi cách nhưng bó tay, hai biến khác nhau không biết đưa vào mảng như thế nào, nhờ các bác giải giúp.
 

File đính kèm

Upvote 0

File đính kèm

  • bc.jpg
    bc.jpg
    53.8 KB · Đọc: 36
Upvote 0
Quay lại với bài này dữ liệu nhưng cách trình bày có khác, em cũng thử mọi cách nhưng bó tay, hai biến khác nhau không biết đưa vào mảng như thế nào, nhờ các bác giải giúp.

Bảng dữ liệu không Sort nên phải qua thao tác Sort lại trong vùng tạm nào đó.
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim sArr(), dArr(), tArr(), I As Long, Tem As String, Num1 As Long, Num2 As Long, K As Long
'--------------------------------------------------
tArr = Range([A3], [A3].End(xlDown)).Resize(, 4).Value
[P4:S4].Resize(UBound(tArr, 1)) = tArr
[P4:S4].Resize(UBound(tArr, 1)).Sort Key1:=[P4], Key2:=[Q4]
'--------------------------------------------------
sArr = Range("P4:S4").Resize(UBound(tArr, 1) + 1).Value
ReDim dArr(1 To UBound(sArr, 1), 1 To 5)
Tem = sArr(1, 1)
For I = 1 To UBound(sArr, 1)
    If sArr(I, 1) <> Tem Then
        K = IIf(Num1 > Num2, Num1, Num2)
        Num1 = K: Num2 = K
        Tem = sArr(I, 1)
    End If
    If Left(sArr(I, 2), 1) = "N" Then
        Num1 = Num1 + 1
        dArr(Num1, 1) = sArr(I, 1)
        dArr(Num1, 2) = sArr(I, 3)
        dArr(Num1, 3) = sArr(I, 4)
    Else
        Num2 = Num2 + 1
        dArr(Num2, 1) = sArr(I, 1)
        dArr(Num2, 4) = sArr(I, 3)
        dArr(Num2, 5) = sArr(I, 4)
    End If
Next I
[J5].Resize(K, 5) = dArr
[P4:S1000].Clear
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
sao không báo cáo kiểu này nhỉ .
Cảm ơn bác, pivot thì rất ok ạ, nhưng của em dữ liệu nhiều, để ra nhiều dòng khó in ấn và nhất là xếp thích phải bố cục như thế nên em phải tìm cách viết khác.
Bảng dữ liệu không Sort nên phải qua thao tác Sort lại trong vùng tạm nào đó.
Em chưa được học vụ Num1, Num2 này, cảm ơn bác, quá tuyệt.
Em xin được hỏi về sort. Em xin thử dịch là sort theo sophieu rồi sort theo DienGiai. Khi sort Key1 thì em hiểu rồi, nhưng key2 thì vẫn chưa hiểu lắm, nếu dịch ra thì sẽ như thế nào ạ?
 
Upvote 0
Web KT

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

Back
Top Bottom