Cần Code tìm dữ liệu theo 3 điều kiện (ngày tháng, số, dữ liệu khác) (1 người xem)

Liên hệ QC

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

do.phuong

Thành viên hoạt động
Tham gia
28/9/12
Bài viết
127
Được thích
165
Chào anh chị, em muốn tính tổng có nhiều điều kiện cho bảng kèm theo. Em đã đăng bài trong khu vực khác để xin công thức, nhưng sau khi được tư vấn, có vẻ VBA dùng cho bảng của em tốt hơn.
Nhờ a chị viết code cho bảng này giúp em với (e dùng office 2013, còn bảng này đang save ở 97-2003)
Em cảm ơn ạ.
 
Lần chỉnh sửa cuối:
/-(ình như fải nặng lời với bạn rồi thì fải!

Bác ơi, có cách nào dùng luôn dữ liệu từ dữ liệu gốc của cháu không, chứ sắp xếp lại như thế khó lắm.

(1) Không dưng mà các chương trình bảng tính đều có số dòng lớn hơn nhiều lần số cột, ở mọi lúc, mọi nơi.

(2) Bạn sẽ gặp khó vì ban đầu bạn đã thiết kế CSDL tùy tiện & không đúng chuẩn

(3) Với CSDL của bạn thì mình đành chào thua
Còn nếu bạn mô tả công việc file 1 cách hoàn chỉnh, mình hay người khác trên cộng đồng sẽ tiếp tục giúp bạn, đúng ngay từ đầu.
 
Upvote 0
(1) Không dưng mà các chương trình bảng tính đều có số dòng lớn hơn nhiều lần số cột, ở mọi lúc, mọi nơi.

(2) Bạn sẽ gặp khó vì ban đầu bạn đã thiết kế CSDL tùy tiện & không đúng chuẩn

(3) Với CSDL của bạn thì mình đành chào thua
Còn nếu bạn mô tả công việc file 1 cách hoàn chỉnh, mình hay người khác trên cộng đồng sẽ tiếp tục giúp bạn, đúng ngay từ đầu.

Bác cố gắng giúp đỡ bạn dophuong nhé, em cám ơn!
 
Upvote 0
[THongBao]Bác cố gắng giúp đỡ bạn dophuong nhé, em cám ơn![/ThongBao]

Bạn hãy tự xem file & . . . .
 

File đính kèm

Upvote 0
(1) Không dưng mà các chương trình bảng tính đều có số dòng lớn hơn nhiều lần số cột, ở mọi lúc, mọi nơi.

(2) Bạn sẽ gặp khó vì ban đầu bạn đã thiết kế CSDL tùy tiện & không đúng chuẩn

(3) Với CSDL của bạn thì mình đành chào thua
Còn nếu bạn mô tả công việc file 1 cách hoàn chỉnh, mình hay người khác trên cộng đồng sẽ tiếp tục giúp bạn, đúng ngay từ đầu.
Cháu xin lỗi bác HYen. Lúc đầu cháu chủ quan, cứ nghĩ có thể dùng được công thức nhưng mình còn kém, không làm được nên mới đưa 1 bảng dữ liệu ngắn lên để hỏi công thức. Lần sau cháu sẽ rút kinh nghiệm ạ.
 
Upvote 0
Macro này đã chỉnh sửa 2 chổ & làm việc chắc chắn cũng như nhanh hơn xíu nè:
PHP:
Option Explicit
Sub ThongKeNgay()
 Dim Sh As Worksheet, Rng As Range, Arr(), sRng As Range, Arr0()
 Dim Rws As Long, J As Long, Col As Integer, W As Integer, Z As Integer, Tmr As Double
  
 Tmr = Timer()
 Sheets("Thong Ke NG Hang Ngay").Select
 Arr0() = Range([c3], [c3].End(xlToRight)).Value
 Rws = [b4].CurrentRegion.Rows.Count
 Range("C4:iV4").Resize(Rws).ClearContents      '<=|'
 
 Set Sh = ThisWorkbook.Worksheets("Theo Doi Loc, Sua")
 Col = Sh.[iv5].End(xlToLeft).Columns
 Rws = Sh.[F5].End(xlDown).Row
 Arr() = Sh.[F6].Resize(Rws, Col).Value
 Set Rng = Range([b4], [b4].End(xlDown))
 For J = 1 To Rws
    If Arr(J, 10) <> "" Then
        Set sRng = Rng.Find(Arr(J, 1), , xlFormulas, xlWhole)
        If sRng Is Nothing Then             '<=|'
            MsgBox "Nothing":               Exit Sub
        Else
            sRng.Offset(, -1).Interior.ColorIndex = 38
        End If                              '*'
        For W = 10 To (Col + 10) Step 4
            If Arr(J, W) = "" Then
                Exit For
            Else
                For Z = 1 To UBound(Arr0(), 2)
                    If Arr(J, W) = Arr0(1, Z) Then
                        With Cells(sRng.Row, Z + 2)
                            .Value = .Value + Arr(J, W + 2)
                        End With
                        Exit For            '<=|'
                    End If
                Next Z
            End If
        Next W
    End If
 Next J
 [cw1].Value = Timer() - Tmr
End Sub
 
Upvote 0
Macro này đã chỉnh sửa 2 chổ & làm việc chắc chắn cũng như nhanh hơn xíu nè:[/php]
Cháu cảm ơn bác HYen.
trong file này cháu đã mạn phép sửa vùng chọn từ IV --> NM, và cho thêm 1 nút Macro, hi vọng là không phá hoại gì !$@!!
Cháu vừa nhập thử dữ liệu và có vấn đề phát sinh như sau: Đối với 1 dòng hàng, khi dữ liệu cho các ngày sửa không xuất hiện liên tục (bắt đầu từ ngày 1) thì sẽ không thực hiện được lệnh. Ví dụ cháu nhập 5 ngày liền, bỏ hoàn toàn ngày 4, thì số liệu ngày 5 sẽ không hiện ra nữa. Nếu bỏ ngày 1 thì tất cả các ngày sau sẽ không hiện ra.
Đây là cháu tính cho trường hợp có thật là hì hục sửa 2 ngày liền nhưng ngày 1 ko thu được kết quả nào, hôm thứ 2 mới tìm ra cách sửa. Cháu thử khắc phục là ngày 1 ít nhất vẫn nhập ngày (1/4 chẳng hạn) thì lệnh vẫn được thực hiện.
Có lẽ nên khắc phục như vậy thôi, cứ được voi đòi tiên, nhờ các bác mãi.

Chúc bác và các thành viên GPE có ngày nghỉ cuối tuần vui vẻ.:fishing1:
 
Lần chỉnh sửa cuối:
Upvote 0
Đó là do câu lệnh này nè:

Mã:
[B]If Arr(J, 10) <> "" Then[/B]

Bỏ đi thì được số liệu, nhưng tốc độ sẽ như rùa!

(Mà nhớ bỏ cả cặp đó nha!)
 
Upvote 0
nhờ mọi người xem giúp em/cháu file này với ạ, vẫn dùng code ngay phía trên của bác HYen. Năm 2015 dùng ok, không hiểu sao năm nay em/cháu cho số liệu mới vào cứ bị trả về Nothing, tìm mãi không ra lỗi.
Xin cảm ơn ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Hãy thử Với đoạn code này xem sao....

chào hpkhuong, mình thử cho vào file nhưng code báo không chạy được. Mình cần lấy dữ liệu từ sheet 1 sang sheet 2.
Bạn có thể xem giúp xem mình sai cái gì mà code của bác HYen chạy lại trả về Nothing không? Mình thấy vẫn lấy được 1 đoạn số liệu, đoạn sau không được, cả phần tính thời gian chạy cũng biến mất luôn.
Dữ liệu của mình kiểm tra thử định dạng ko thấy sai chỗ nào **~**
 
Upvote 0
Xin lỗi bạn nhé. Mình cho code vào nhưng quên không chỉnh lại nút Click nên nó cứ báo lỗi. Code chạy được rồi.
Cảm ơn bạn.
"Có phải kết quả chiếu theo số mã hàng tại cột B/và ngày tại dòng 3 sheet 2...Lấy số liễu cộng dồn theo ngày tại cột NG của sheet1 đúng không? Nếu như vậy thì code tôi viết ở trên nó đang làm vấn đề đó đó....
a32.gif
"
--> đúng rồi bạn. Mình nói thật là đọc code của bạn mình chả hiểu gì, chỉ biết ra kết quả đúng là đúng! Nhưng có mấy vấn đề này nhờ bạn xem:
1. có phải code này có thể áp dụng cho đến 65,000 dòng cột F ở sheet 1 đúng không?
2. Tại sao dòng 102 ở sheet 2 (mã 118-a17) lại hiện ra số liệu = 0 ở 3 ngày 6, 7, 8/1 vậy bạn? Hầu hết ko tự hiện ra số 0 như thế?
3. Khi mình chuyển mã 118-A17 ra vị trí B250 thì số liệu lại hiện ra ở dòng 249 bạn ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
3. Khi mình chuyển mã 118-A17 ra vị trí B250 thì số liệu lại hiện ra ở dòng 249 bạn ạ.

=> Cái này không hiểu bạn nói gì nữa...Tại sao phải chuyển...
-> Lưu ý rằng cột B sheet 2 phải là mã duy nhất...

Mình thử chuyển vị trí và thêm mã xem có vấn đề gì không. Mã 118-A17 vốn ở vị trí B102, mình thử chuyển ra B250, và xóa ở B102 thì thấy dữ liệu của nó lại hiện ra ở dòng 249 (đúng ra phải ở dòng 250)
Mình đã thử 1 loạt, có vẽ lỗi xuât hiện khi thêm mã từ vị trí B248 về sau (B249, 250...)
 
Lần chỉnh sửa cuối:
Upvote 0
Cột B sheet2 của bạn phải là mã duy nhất....Sao lại thêm vào làm gì....Thêm vào thì còn gì ý nghĩa với mục đích của bạn được...Mã phải là duy nhât....
Khi thử mình đã xóa dòng 102 đi rồi nên nó vẫn là duy nhất. Mình hiểu điều này mà nên đã dùng lệnh tô màu cho những mã lặp, mã nào lặp xóa đi ngay, tránh sai sót.
Mình thử thêm mã mới, cho vào cột B ở sheet 2. Và nhận thấy từ vị trí B248 sẽ có lỗi như vậy. VD mã cho vào B248 thì dữ liệu của nó lại hiện ra ở dòng 247, tức là dữ liệu bị lùi 1 dòng so với dòng đúng.
 
Upvote 0
Dữ liệu cột B phải liên tục (không có dòng trống tại cột B) thì mới chạy đúng...Thế thôi...

Chứ chẳng ai làm báo cáo mà lại để dòng trống xen giữa làm gì .... Vô duyên lắm....
Mình không để trống đâu.
Miwnhf vừa thêm vào dữ liệu cho hàng mới 102-3359 (sheet 1 là dòng 68, sheet 2 là dòng 253), thì dữ liệu của nó lại hiện ra ở dòng 252. bị sai 1 dòng. Bạn kiểm tra giúp mình với.
 

File đính kèm

Upvote 0
Mình không để trống đâu.
Miwnhf vừa thêm vào dữ liệu cho hàng mới 102-3359 (sheet 1 là dòng 68, sheet 2 là dòng 253), thì dữ liệu của nó lại hiện ra ở dòng 252. bị sai 1 dòng. Bạn kiểm tra giúp mình với.

Làm biếng xem code của người khác, viết thí thí theo kiểu mình hiểu, bạn xem sao nhé.
 

File đính kèm

Upvote 0
Làm biếng xem code của người khác, viết thí thí theo kiểu mình hiểu, bạn xem sao nhé.
Bác Ba Tê ơi, hôm nay cháu làm thì hiện ra lỗi này "subscript out of range"
Cháu thử dùng help của office, họ bảo tìm mấy chỗ như may array thay bằng Dim, redim,... cháu thấy bác ok hết rồi, nên cháu không hiểu sai ở chỗ nào.
Bác xem hộ cháu lỗi này với.
Cảm ơn bác
 

File đính kèm

Upvote 0
22/02/2016:
Cháu chạy thử ok rồi. cháu vừa tìm hiểu cả câu lệnh có chữ xfd3 của bác, Vùng chọn rộng như vậy thì không còn lo gì nữa. Cảm ơn bác Ba Tê.

Hơn 1 tháng bạn nghĩ là người khác vẫn hiểu bạn muốn gì? Kết quả vì sao bị lỗi? ...
Tháng trước tôi gặp bạn lần đầu nhậu "đứt bóng", chưa chắc hôm nay gặp lại mà "nhìn ra nhau". Cái lu xu bu không giải thích lại ai biết "cái gì là cái gì".

Bác Ba Tê ơi, hôm nay cháu làm thì hiện ra lỗi này "subscript out of range"
Cháu thử dùng help của office, họ bảo tìm mấy chỗ như may array thay bằng Dim, redim,... cháu thấy bác ok hết rồi, nên cháu không hiểu sai ở chỗ nào.
Bác xem hộ cháu lỗi này với.
Cảm ơn bác
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom