Giúp sửa code: Trích rút từ Tổng hợp cho kết qủa ở các Sh Chi tiết theo điều kiện! (1 người xem)

Liên hệ QC

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

Hong.Van

Busy
Tham gia
7/5/12
Bài viết
2,330
Được thích
1,767
Em chào Thầy cô & anh chị!
Em có đọan code sau: (Code này do Thầy cô & anh chị viết giúp)
Tại Sheet MA, cột BF:BH KH, Tên KHTháng. Trong đó dữ liệu trong cột Tháng sẽ tương ứng với Tên các Sheet Chi tiết là CNT01 (Nghĩa là Công nợ tháng 01), CNT02, CNT03 ... cho đến CNT12

Khi đứng tại Sheet MA chạy code(Bấm vào nút: Thêm Mã vào CNT)sẽ cho kết qủa tạm tại các cột phụ từ CA:CG, và nó dựa vào hằng số ở cell CA1

1/Hằng số này có ý nghĩa như sau: số 2 thì sẽ cho kết qủa ở Sheet CNT01 & CNT02. Số 13 sẽ cho kết qủa từ CNT01 đến CNT13

2/Kết qủa của các sheet CNT sau khi chạy code là:
a/ Sheet CNT01 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là CNT01
b/ Sheet CNT02 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT02
....
c/ Sheet CNT10 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT10
d/ Sheet CNT12 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT12
e/ Và Sheet CNT13 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT12

Nói tóm lại Sheet CNTn sẽ lấy các dòng có từ CNTn đến CNT01!
----------------------
Sau 1 thời gian sử dụng code trên thì có bất tiện là, Ví dụ bây giờ là tháng 10, thì nó cập nhật lại toàn bộ các sheet từ CNT01 đến CNT10, như vậy em fải cập nhật lại hết toàn bộ các số liệu khác của các sheet nói trên
-------------------
Thầy cô & anh chị giúp em sửa code như sau:
Các điều kiện lấy số liệu vẫn như trên.
Khi đứng tại Sheet CNT09 để chạy code thì chỉ có CNT09 là có kết qủa chạy code, còn các sheet khác thì không ảnh hưởng!
Em cảm ơn!
Mã:
Sub InsertRows_SS()' code insert cac dong ben cac sheet CNT


    Application.ScreenUpdating = False
    Dim Sh As Worksheet, Rng As Range, SRng As Range, Cls As Range
    Dim Rws As Long, jJ As Byte, fF As Byte
    Dim ShName As String, MyAdd As String, Th As String


    Sheets("MA").Select
    Rws = [BG9].CurrentRegion.Rows.Count
    Set Rng = [BH9].CurrentRegion
    For jJ = 1 To [CA1].Value
        ShName = "CNT" & Right("0" & CStr(jJ), 2)
        Set Sh = ThisWorkbook.Worksheets(ShName)
        Sh.[A11].Resize(500, 10).ClearContents
        [CG10].Resize(12).ClearContents
        On Error Resume Next
        ActiveWorkbook.Names("Criteria").Delete
        Err = 0
        For fF = 1 To jJ
            Th = "CNT" & Right("0" & CStr(fF), 2)
            [CG9].Offset(fF).Value = Th
        Next fF
        Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[CG9].Resize(fF), CopyToRange:=Range("CA9:CB9")
        [CB10].CurrentRegion.Offset(1).Copy Destination:=Sh.[B11]
        Range("Cuoi").Copy Destination:=Sh.[B9999].End(xlUp).Offset(, -1)
    Next jJ
    Sh.Activate
    Range("B11").Select
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

Em chào Thầy cô & anh chị!
Em có đọan code sau: (Code này do Thầy cô & anh chị viết giúp)
Tại Sheet MA, cột BF:BH KH, Tên KHTháng. Trong đó dữ liệu trong cột Tháng sẽ tương ứng với Tên các Sheet Chi tiết là CNT01 (Nghĩa là Công nợ tháng 01), CNT02, CNT03 ... cho đến CNT12

Khi đứng tại Sheet MA chạy code(Bấm vào nút: Thêm Mã vào CNT)sẽ cho kết qủa tạm tại các cột phụ từ CA:CG, và nó dựa vào hằng số ở cell CA1

1/Hằng số này có ý nghĩa như sau: số 2 thì sẽ cho kết qủa ở Sheet CNT01 & CNT02. Số 13 sẽ cho kết qủa từ CNT01 đến CNT13

2/Kết qủa của các sheet CNT sau khi chạy code là:
a/ Sheet CNT01 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là CNT01
b/ Sheet CNT02 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT02
....
c/ Sheet CNT10 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT10
d/ Sheet CNT12 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT12
e/ Và Sheet CNT13 sẽ lấy Mã KH và Tên KH tương ứng với dòng tại cột BH có dữ liệu là từ CNT01 đến CNT12

Nói tóm lại Sheet CNTn sẽ lấy các dòng có từ CNTn đến CNT01!
----------------------
Sau 1 thời gian sử dụng code trên thì có bất tiện là, Ví dụ bây giờ là tháng 10, thì nó cập nhật lại toàn bộ các sheet từ CNT01 đến CNT10, như vậy em fải cập nhật lại hết toàn bộ các số liệu khác của các sheet nói trên
-------------------
Thầy cô & anh chị giúp em sửa code như sau:
Các điều kiện lấy số liệu vẫn như trên.
Khi đứng tại Sheet CNT09 để chạy code thì chỉ có CNT09 là có kết qủa chạy code, còn các sheet khác thì không ảnh hưởng!
Em cảm ơn!
Mã:
Sub InsertRows_SS()' code insert cac dong ben cac sheet CNT


    Application.ScreenUpdating = False
    Dim Sh As Worksheet, Rng As Range, SRng As Range, Cls As Range
    Dim Rws As Long, jJ As Byte, fF As Byte
    Dim ShName As String, MyAdd As String, Th As String


    Sheets("MA").Select
    Rws = [BG9].CurrentRegion.Rows.Count
    Set Rng = [BH9].CurrentRegion
    For jJ = 1 To [CA1].Value
        ShName = "CNT" & Right("0" & CStr(jJ), 2)
        Set Sh = ThisWorkbook.Worksheets(ShName)
        Sh.[A11].Resize(500, 10).ClearContents
        [CG10].Resize(12).ClearContents
        On Error Resume Next
        ActiveWorkbook.Names("Criteria").Delete
        Err = 0
        For fF = 1 To jJ
            Th = "CNT" & Right("0" & CStr(fF), 2)
            [CG9].Offset(fF).Value = Th
        Next fF
        Rng.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[CG9].Resize(fF), CopyToRange:=Range("CA9:CB9")
        [CB10].CurrentRegion.Offset(1).Copy Destination:=Sh.[B11]
        Range("Cuoi").Copy Destination:=Sh.[B9999].End(xlUp).Offset(, -1)
    Next jJ
    Sh.Activate
    Range("B11").Select
    Application.ScreenUpdating = True
End Sub
Thì dẹp cái vòng lặp xem sao. Lấy giá trị của CA1 làm điều kiện.
 
Upvote 0
HI hi, Anh giúp em nói rõ 1 tý, em thử rồi chưa được?
For nào? For jJ = 1 To [CA1].Value hay For fF = 1 To jJ? & cell CA1 lấy tên Sheet làm điều kiện hả anh!
Em cảm ơn!
Phải vầy không. Hên xui nha, vì không hiểu rõ lắm
PHP:
Sub InsertRows_SS()
    Application.ScreenUpdating = False
    Dim Sh As Worksheet, Rng As Range
    Dim Rws As Long, ShName As String
    Sheets("MA").Select
    Rws = [BG9].CurrentRegion.Rows.Count
    Set Rng = [BH9].CurrentRegion
        ShName = "CNT" & Right("0" & CStr([CA1]), 2)
        Set Sh = ThisWorkbook.Worksheets(ShName)
        Sh.[A11].Resize(500, 10).ClearContents
        [CG10].Resize(12).ClearContents
         [CG10] = "CNT" & Right("0" & CStr([CA1]), 2)
        Rng.AdvancedFilter 2, [CG10], Range("CA9:CB9")
        [CB10].CurrentRegion.Offset(1).Copy Sh.[B11]
    Sh.Activate
    Range("B11").Select
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Phải vầy không. Hên xui nha, vì không hiểu rõ lắm
PHP:
Sub InsertRows_SS()
    Application.ScreenUpdating = False
    Dim Sh As Worksheet, Rng As Range
    Dim Rws As Long, ShName As String
    Sheets("MA").Select
    Rws = [BG9].CurrentRegion.Rows.Count
    Set Rng = [BH9].CurrentRegion
        ShName = "CNT" & Right("0" & CStr([CA1]), 2)
        Set Sh = ThisWorkbook.Worksheets(ShName)
        Sh.[A11].Resize(500, 10).ClearContents
        [CG10].Resize(12).ClearContents
         [CG10] = "CNT" & Right("0" & CStr([CA1]), 2)
        Rng.AdvancedFilter 2, [CG10], Range("CA9:CB9")
        [CB10].CurrentRegion.Offset(1).Copy Sh.[B11]
    Sh.Activate
    Range("B11").Select
    Application.ScreenUpdating = True
End Sub
Nó vẫn chưa chuẩn anh à!
1/ Em nghĩ bỏ luôn Cell CA1 ở Sheet MA, vì đứng ở sheet nào thì chạy code ở sheet đó, khỏi fải thay đổi hằng số này mỗi khi chạy code!
2/ Code của anh nó lấy đủ bộ của khối BF10:BG92 (không bỏ sót em nào). Điều kiện của em là chỉ lấy số liệu so với cột BH , ví dụ: chạy code cho Sheet CNT03 thì chỉ lấy từ CNT01 đến CNT03 mà thôi. Mặc khác Mấy chiếc xe ở cột tháng nó chỉ có dấu x chứ kg có CNT mấy, nên cũng không lấy các chiếc xe này vào các Sheet CNT!
Ở đây em sử dụng cthức này để xác định số lượng Mã KH và tên KH sẽ được lấy
VD: chạy code cho CNT03 thì tổng số lượng được lấy từ Sheet MA sang Sheet CNT03 là
Mã:
=SUMPRODUCT((RIGHT($BH$10:$BH$87;2)*1<=[B][COLOR=#ff0000]3[/COLOR][/B])*1)
là tương ứng là 39 kết quả
Anh thử Xóa các số liệu ở các Sheet CNT, rồi chạy thử code của em là anh sẽ hiểu!
Mong anh chỉnh code giúp em. Em cảm ơn!
 
Upvote 0
Nó vẫn chưa chuẩn anh à!
1/ Em nghĩ bỏ luôn Cell CA1 ở Sheet MA, vì đứng ở sheet nào thì chạy code ở sheet đó, khỏi fải thay đổi hằng số này mỗi khi chạy code!
2/ Code của anh nó lấy đủ bộ của khối BF10:BG92 (không bỏ sót em nào). Điều kiện của em là chỉ lấy số liệu so với cột BH , ví dụ: chạy code cho Sheet CNT03 thì chỉ lấy từ CNT01 đến CNT03 mà thôi. Mặc khác Mấy chiếc xe ở cột tháng nó chỉ có dấu x chứ kg có CNT mấy, nên cũng không lấy các chiếc xe này vào các Sheet CNT!
Ở đây em sử dụng cthức này để xác định số lượng Mã KH và tên KH sẽ được lấy
VD: chạy code cho CNT03 thì tổng số lượng được lấy từ Sheet MA sang Sheet CNT03 là
Mã:
=SUMPRODUCT((RIGHT($BH$10:$BH$87;2)*1<=[B][COLOR=#ff0000]3[/COLOR][/B])*1)
là tương ứng là 39 kết quả
Anh thử Xóa các số liệu ở các Sheet CNT, rồi chạy thử code của em là anh sẽ hiểu!
Mong anh chỉnh code giúp em. Em cảm ơn!
Mình mà hiểu thì ngày mai tận thế. Híc.
Cái dòng Range("cuoi") là có nghĩa gì chẳng hiểu. Tóm lại là càng đọc càng điếc.
 
Upvote 0
Nó vẫn chưa chuẩn anh à!
1/ Em nghĩ bỏ luôn Cell CA1 ở Sheet MA, vì đứng ở sheet nào thì chạy code ở sheet đó, khỏi fải thay đổi hằng số này mỗi khi chạy code!
2/ Code của anh nó lấy đủ bộ của khối BF10:BG92 (không bỏ sót em nào). Điều kiện của em là chỉ lấy số liệu so với cột BH , ví dụ: chạy code cho Sheet CNT03 thì chỉ lấy từ CNT01 đến CNT03 mà thôi. Mặc khác Mấy chiếc xe ở cột tháng nó chỉ có dấu x chứ kg có CNT mấy, nên cũng không lấy các chiếc xe này vào các Sheet CNT!
Ở đây em sử dụng cthức này để xác định số lượng Mã KH và tên KH sẽ được lấy
VD: chạy code cho CNT03 thì tổng số lượng được lấy từ Sheet MA sang Sheet CNT03 là
Mã:
=SUMPRODUCT((RIGHT($BH$10:$BH$87;2)*1<=[B][COLOR=#ff0000]3[/COLOR][/B])*1)
là tương ứng là 39 kết quả
Anh thử Xóa các số liệu ở các Sheet CNT, rồi chạy thử code của em là anh sẽ hiểu!
Mong anh chỉnh code giúp em. Em cảm ơn!
Hiểu "thí thí" rồi cũng làm "thí thí".
Đang ở sheet nào mà chạy code thì lấy dữ liệu từ sheet Ma (Cột BF:BI) vào sheet Activate.
PHP:
Public Sub GPE()
Dim Rng(), Arr(), NumWs As Long, I As Long, K As Long, Tem As Long
NumWs = Right(ActiveSheet.Name, 2) * 1
With Sheets("MA")
    Rng = .Range(.[BF10], .[BF65000].End(xlUp)).Resize(, 3).Value
End With
ReDim Arr(1 To UBound(Rng, 1), 1 To 2)
For I = 1 To UBound(Rng, 1)
    If IsNumeric(Right(Rng(I, 3), 2)) Then
    Tem = Right(Rng(I, 3), 2) * 1
    If IsNumeric(Rng(I, 1)) Or Tem <= NumWs Then
        K = K + 1
        Arr(K, 1) = Rng(I, 1)
        Arr(K, 2) = Rng(I, 2)
    End If
    End If
Next I
[B11].Resize(K, 2).Value = Arr
End Sub
 
Upvote 0
Hiểu "thí thí" rồi cũng làm "thí thí".
Đang ở sheet nào mà chạy code thì lấy dữ liệu từ sheet Ma (Cột BF:BI) vào sheet Activate.
PHP:
Public Sub GPE()
Dim Rng(), Arr(), NumWs As Long, I As Long, K As Long, Tem As Long
NumWs = Right(ActiveSheet.Name, 2) * 1
With Sheets("MA")
    Rng = .Range(.[BF10], .[BF65000].End(xlUp)).Resize(, 3).Value
End With
ReDim Arr(1 To UBound(Rng, 1), 1 To 2)
For I = 1 To UBound(Rng, 1)
    If IsNumeric(Right(Rng(I, 3), 2)) Then
    Tem = Right(Rng(I, 3), 2) * 1
    If IsNumeric(Rng(I, 1)) Or Tem <= NumWs Then
        K = K + 1
        Arr(K, 1) = Rng(I, 1)
        Arr(K, 2) = Rng(I, 2)
    End If
    End If
Next I
[B11].Resize(K, 2).Value = Arr
End Sub
Em đã Test, code của Thầy chạy rất chính xác
Em xin cảm ơn Thầy & anh Hải!
 
Upvote 0
Em đã Test, code của Thầy chạy rất chính xác
Em xin cảm ơn Thầy & anh Hải!

Tình hình chỉ có như thế vậy mà .... Đúng là giuơng đông kích tây. Mình vẫn không hiểu trong code của HV có câu lệnh Range("cuoi").. . hỏng biết nó là cái gì vậy. Không biết là vùng nào nữa.
 
Upvote 0
Tình hình chỉ có như thế vậy mà .... Đúng là giuơng đông kích tây. Mình vẫn không hiểu trong code của HV có câu lệnh Range("cuoi").. . hỏng biết nó là cái gì vậy. Không biết là vùng nào nữa.
Khà khà...
Nhiều lúc đọc xong một bài giải thích kiểu "Tam Quốc Chí" rồi híc híc... luôn.
Làm thí thí hên xui.
 
Upvote 0
Web KT

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

Back
Top Bottom