Lọc tên khách hàng (1 người xem)

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

allblue8x

Thành viên mới
Tham gia
16/10/13
Bài viết
35
Được thích
0
Hi các bạn,

Ở Sheet Bãi trong file mình đính kèm, mình muốn những khách hàng bên SHeet Nhập dữ liệu, những người nào có tên là "Bãi + ...." thì sẽ tự động nhảy qua bên Sheet Bãi. Trong file chỉ là mình ghi ví dụ thôi nha, thực tế thì sẽ phát sinh nhiều "Bãi + ...." khác nhau. Mọi ng lọc giùm mình chỉ cần là "Bãi +...." thì sẽ tự động nhảy qua bên kia.

Mình cám ơn nhiều lắm.
 

File đính kèm

Tôi thấy bạn đăng topic này trong mục Hàm và công thức nhưng thấy dữ liệu nguồn của bạn tầm hơn 2000 dòng nên tôi đề xuất dùng code nhé vì công thức sẽ ì ạch file! Có
thể lọc cho các đối tượng khác không chỉ Bãi* :
PHP:
Sub locTenKH()
Dim i As Long, k As Long, j As Long
Dim sArr(), dArr()
sArr = Sheet2.Range("A6:O2003").Value
ReDim dArr(1 To UBound(sArr), 1 To 15)

For i = 1 To UBound(sArr)
    If sArr(i, 2) Like Sheet6.Range("G1").Value Then
        k = k + 1
        dArr(k, 1) = k
        For j = 2 To 15
            dArr(k, j) = sArr(i, j)
        Next
    End If
Next
Sheet6.Range("A7:O1000").ClearContents
If k Then Sheet6.[A7].Resize(k, 15) = dArr
      
End Sub
 

File đính kèm

Bạn có thể chỉ mình cách dùng không, sao mình down file của bạn về, khi mình nhập thêm những Bãi khác bên Sheet nhập dữ liệu mà bên Sheet bãi không hiện ra
 
Bạn có thể chỉ mình cách dùng không, sao mình down file của bạn về, khi mình nhập thêm những Bãi khác bên Sheet nhập dữ liệu mà bên Sheet bãi không hiện ra
Hix, thấy file có code mình tưởng bạn biết sử dụng Macro, vậy mình vẽ dùm bạn một cái nút để chạy code nhé, bạn nhập dữ liệu điều kiện vào ô G1 rồi bấm nút RUN, chú ý khi mở file phải Enable Macro nhé, còn cách Enable thì bạn tìm hiểu trên diễn đàn.
 

File đính kèm

@hoamattroicoi
Bạn ơi xem giùm mình sao mình nhập dữ liệu chỉ có 134 mà bên phần tổng hợp lại ra 135 vậy :( mình ko thể attach file lên được mặc dù đã zip lại rồi, bị thông báo vượt quá dung lượng mình có thể upload, nên bạn vào mega down giùm mình nhé, cám ơn nhiều lắm luôn

File này có code cũng là nhờ các bạn trên GPE giúp mình đó chứ mình có biết làm gì đâu :D

https://mega.co.nz/#!2YUwFAxA!Se3u_gJd1n97ZKJ9IU2LzyP_7rYvbMP0WeOmp_dYofg
 
HIx có bạn nào giúp mình xem tại sao giá trị sum của 2 bên khác nhau không :(
 
HIx có bạn nào giúp mình xem tại sao giá trị sum của 2 bên khác nhau không :(

Lần sau bạn nên nói rõ 2 giá trị đó nằm ở đâu (sheet, dòng, cột). Đừng bắt người giúp mình phải mất thêm thời gian không đáng mất.

Lỗi tại bạn thôi.

Trong sheet NHAP DU LIEU bạn có 2 cột: "K Lượng" - J, và "K Lượng TT" - O
Trong sheet BANG TONG HOP bạn có cột F = "Khối Lượng"

Vậy người ta tính cho bạn theo cột "K Lượng" và ra kết quả 135,5383

Nếu bạn muốn ra kết quả 134,2218 thì có nghĩa là bạn muốn SUM cột "K Lượng TT". Như thế thì bạn phải sửa tên cột F trong sheet BANG TONG HOP thành "Khối Lượng TT" để tránh hiểu lầm
 
Lần chỉnh sửa cuối:
Mình không hiểu bạn chỉ trích điều gì khi ở trên mình đã nói "mình nhập dữ liệu có 134 mà bên sheet tổng hợp lại ra 135", bạn mở file mình ra xem có khó tìm đến mức phải cần thiết nói rõ nó nằm ô nào không? Bạn nhấn vào Sheet NDL sẽ thấy số sum 134 lun, bên Sheet tổng hợp thì chỉ có 1 hàng. Hơn nữa bạn phân tích thì mình cũng không thể biết sửa lại, mình cũng đã nói ở trên là file này là mọi ng trên GPE làm giúp chứ mình có biết tí gì về Macro đâu.
 
Mình không hiểu bạn chỉ trích điều gì khi ở trên mình đã nói "mình nhập dữ liệu có 134 mà bên sheet tổng hợp lại ra 135", bạn mở file mình ra xem có khó tìm đến mức phải cần thiết nói rõ nó nằm ô nào không? Bạn nhấn vào Sheet NDL sẽ thấy số sum 134 lun, bên Sheet tổng hợp thì chỉ có 1 hàng. Hơn nữa bạn phân tích thì mình cũng không thể biết sửa lại, mình cũng đã nói ở trên là file này là mọi ng trên GPE làm giúp chứ mình có biết tí gì về Macro đâu.
Chào bạn allblue8x!

Bạn lại hiểu nhầm ý tốt của bác siwtom rồi, bác ấy chỉ nhắc bạn nên mô tả yêu cầu rõ hơn để người giúp bạn đỡ mất công làm cho bạn, để bạn lại phải đăng lên diễn đàn hỏi lại như thế này, bởi vì không phải lúc nào chúng ta cũng có được sự giúp đỡ như ý, đặc biệt bạn lại không hiểu nhiều về code, bạn sẽ phải phụ thuộc vào người khác khi chẳng may thay đổi dữ liệu code bị lỗi. Theo như bạn mô tả lại là trong sheet Nhập Dữ Liệu bạn muốn SUM cột Khối lượng TT nhưng có thể do bạn mô tả chưa rõ nên người viết code trước cho bạn lại SUM cột Khối lượng số đo dẫn đến kết quả hiển thị chưa chuẩn.

Vậy bạn xem lại file này nhé!
 

File đính kèm

Hi hoamattroicoi,
Bạn có thể giúp mình lần nữa không, trong Sheet CHITIETKH hiện giờ khi mình chọn tên KH thì nó sẽ ra 1 list, list này rất khó để theo dõi, mình muốn sắp xếp nó lại theo thứ tự Loại gỗ, Phân loại, và bên Số từ bé đến lớn như bên Kết Quả mẫu mà mình không biết làm sao. Mình thấy cái Macro này rất hay nên hôm nay đã đặt mua quyển VBA cho người mới trên GPE đề về tự mò học rồi ^^

https://mega.co.nz/#!uI01Vawb!6h6n7A1xIBI33SN0-49XdmrwBy2HXJcMInRAzmzIFo8
 
Mình vừa phát hiện ra 1 vấn đề trong file là bên Sheet Bảng Tổng Hợp, chỗ col Đơn giá, khi mình đánh giá vào, và nhấn Button Tổng Hợp thì đơn giá mình vừa đánh mất tiêu @@, mọi người giúp mình sửa cái này không thì tiêu mất
 
Mình vừa phát hiện ra 1 vấn đề trong file là bên Sheet Bảng Tổng Hợp, chỗ col Đơn giá, khi mình đánh giá vào, và nhấn Button Tổng Hợp thì đơn giá mình vừa đánh mất tiêu @@, mọi người giúp mình sửa cái này không thì tiêu mất
Chép đoạn code này paste lại xem sao
[GPECODE=vb]
Public Sub LOC_BTH()
Application.ScreenUpdating = False
Dim Dic As Object, DSKH(), sArr(), dArr(), N As Long, i As Long, j As Long, k As Long
Dim Tem As String, STT As Long, TCong As String, Tong(1 To 1, 1 To 6), Cll As Range, tam
Set Dic = CreateObject("Scripting.Dictionary")
TCong = Sheets("CHITIET_KH").[O5].Value
With Sheets("TEN KH")
DSKH = .Range(.[B6], .[B6].End(xlDown)).Value
End With
With Sheets("NHAP DU LIEU")
sArr = .Range(.[B6], .[B6].End(xlDown)).Resize(, 13).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
For N = 1 To UBound(DSKH, 1)
STT = 0
For i = 1 To UBound(sArr, 1)
If sArr(i, 1) = DSKH(N, 1) Then
Tem = sArr(i, 1) & sArr(i, 2) & sArr(i, 3)
If Not Dic.Exists(Tem) Then
k = k + 1: STT = STT + 1
Dic.Add Tem, k
dArr(k, 1) = STT
For j = 1 To 3
dArr(k, j + 1) = sArr(i, j)
Next j
dArr(k, 5) = 1
dArr(k, 6) = sArr(i, 13)
dArr(k, 7) = 5 / 100
dArr(k, 8) = "=RC[-2] * 95%"
dArr(k, 10) = "=RC[-2]*RC[-1]"
Else
dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(i, 13)
End If
End If
Next i
If STT > 0 Then
k = k + 1
dArr(k, 3) = TCong
dArr(k, 5) = "=sum(R[-" & STT & "]C:R[-1]C)"
dArr(k, 6) = "=sum(R[-" & STT & "]C:R[-1]C)"
dArr(k, 8) = "=sum(R[-" & STT & "]C:R[-1]C)"
dArr(k, 10) = "=sum(R[-" & STT & "]C:R[-1]C)"
End If
Next N
With Sheets("BANG TONG HOP")
tam = .Range("I5:I1000").Value 'thêm đoạn này
.[A5:J10000].ClearContents
.[A5:J10000].Borders.LineStyle = xlNone
.[A5:J10000].Interior.ColorIndex = 0
If k Then
.[A5].Resize(k, 10).Value = dArr
.Range("I5:I1000").Value = tam 'thêm đoạn này
.[A5].Resize(k, 10).Borders.LineStyle = xlContinuous
For Each Cll In .Range(.[C5], .[C5].End(xlDown))
If Cll.Value = TCong Then
Cll.Offset(, -2).Resize(, 10).Interior.ColorIndex = 36
End If
Next
End If
End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub


[/GPECODE]

Chỗ chú thích là thêm vào theo yêu cầu của bạn
 
Lần chỉnh sửa cuối:
Hi nmhung49,
Mình thử copy đoạn code của bạn paste vào cái Macro Loc_BTH thì mình bấm thử thấy ko có bị mất đơn giá như mình muốn, cám ơn bạn nhiều lắm, vấn đề là lúc này chỉ còn lại cái Macro này nhưng những cái Macro kia thì mất hết :( Bạn có thể chỉ mình từng step để Edit Macro Loc_BTH mà ko mất những cái Macro còn lại không :D
 
Lần chỉnh sửa cuối:
Hi hung,

Mình làm được rồi, thank you very much ^^

Nhưng hình như cái này là chỉ tổng hợp đến cột K lượng sau trừ thôi đúng không, nếu những cái mình làm rồi mà có sửa lại những hàng phía trên khi mình nhấn Tổng Hợp thì nó sẽ nhảy lộn xộn lên :( Có cách nào khi mình nhập đơn giá vào 1 hàng, sẽ save lại, sau đó mình nhấn tổng hợp nếu có thay đổi gì thì đơn giá cũng sẽ thay đổi cùng với hàng mình nhập không?
 
Lần chỉnh sửa cuối:
Mình không hiểu bên Sheet CHITIETKH mỗi lần mình chọn Minh Rạch Giá là bị lỗi, bạn nào giúp mình sửa lỗi với, có phải là nhiều hàng quá đúng không, làm ơn giúp mình sửa lại cho nhiều hàng nhé vì mỗi lần khách hàng nhận thì nhiều lắm. Cám ơn.
https://www.mediafire.com/?ppcp9pppm0e3p59
 
Hi hung,

Mình làm được rồi, thank you very much ^^

Nhưng hình như cái này là chỉ tổng hợp đến cột K lượng sau trừ thôi đúng không, nếu những cái mình làm rồi mà có sửa lại những hàng phía trên khi mình nhấn Tổng Hợp thì nó sẽ nhảy lộn xộn lên :( Có cách nào khi mình nhập đơn giá vào 1 hàng, sẽ save lại, sau đó mình nhấn tổng hợp nếu có thay đổi gì thì đơn giá cũng sẽ thay đổi cùng với hàng mình nhập không?
Thử với code này xem nhé, thêm 1 đoạn macro như tôi ghi chú trong code để lưu lại đơn giá đã nhập trước.
PHP:
Public Sub LOC_BTH()
Application.ScreenUpdating = False
Dim Dic As Object, DSKH(), sArr(), dArr(), N As Long, i As Long, j As Long, k As Long
Dim rSult(), keyItem
Dim Tem As String, STT As Long, TCong As String, Tong(1 To 1, 1 To 6), Cll As Range
Set Dic = CreateObject("Scripting.Dictionary")
TCong = Sheets("CHITIET_KH").[O5].Value
With Sheets("TEN KH")
    DSKH = .Range(.[B6], .[B6].End(xlDown)).Value
End With
With Sheets("NHAP DU LIEU")
    sArr = .Range(.[B6], .[B6].End(xlDown)).Resize(, 13).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
For N = 1 To UBound(DSKH, 1)
    STT = 0
    For i = 1 To UBound(sArr, 1)
        If sArr(i, 1) = DSKH(N, 1) Then
            Tem = sArr(i, 1) & sArr(i, 2) & sArr(i, 3)
            If Not Dic.exists(Tem) Then
                k = k + 1: STT = STT + 1
                Dic.Add Tem, k
                dArr(k, 1) = STT
                For j = 1 To 3
                    dArr(k, j + 1) = sArr(i, j)
                Next j
                dArr(k, 5) = 1
                dArr(k, 6) = sArr(i, 13)
                dArr(k, 7) = 5 / 100
                dArr(k, 8) = "=RC[-2] * 95%"
                dArr(k, 10) = "=RC[-2]*RC[-1]"
            Else
                dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
                dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(i, 13)
            End If
        End If
    Next i
    If STT > 0 Then
        k = k + 1
        dArr(k, 3) = TCong
        dArr(k, 5) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 6) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 8) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 10) = "=sum(R[-" & STT & "]C:R[-1]C)"
    End If
Next N


' Thêm chỗ này ^^
rSult = Sheet4.Range("B5:J" & Sheet4.[J65536].End(xlUp).Row).Value
    For i = 1 To UBound(rSult, 1)
        keyItem = rSult(i, 1) & rSult(i, 2) & rSult(i, 3)
        If Dic.exists(keyItem) Then
            dArr(Dic.Item(keyItem), 9) = rSult(i, 8)
        End If
    Next
  ' Đến chỗ này ^^


With Sheets("BANG TONG HOP")
    .[A5:J10000].ClearContents
    .[A5:J10000].Borders.LineStyle = xlNone
    .[A5:J10000].Interior.ColorIndex = 0
    If k Then
        .[A5].Resize(k, 10).Value = dArr
        .[A5].Resize(k, 10).Borders.LineStyle = xlContinuous
        For Each Cll In .Range(.[C5], .[C5].End(xlDown))
            If Cll.Value = TCong Then
                Cll.Offset(, -2).Resize(, 10).Interior.ColorIndex = 36
            End If
        Next
    End If
End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
@@ : Bạn nên test kỹ và cố gắng tổng hợp các phát sinh hiện có để sửa 1 lần nhé, vì code có người viết trc nên chúng tôi rất ngại phải đọc lại code của người khác và sửa vì như thế còn mất thời gian hơn việc bạn diễn tả luôn yêu cầu cùng phát sinh để chúng tôi viết lại.

Thanks!
 
Mình cám ơn hoamattroicoi nhiều lắm, mình cũng hiểu vấn đề bạn nói mình cố gắng lắm, tại mình không hiểu code nên nhiều khi có phát sinh mình mới thấy ra.
Hiện giờ có 2 vấn đề mình cần sửa (mình nghĩ còn 2 cái này nữa là hết rồi :D)
1. Như mình nói phía trên: Mình không hiểu bên Sheet CHITIETKH mỗi lần mình chọn Minh Rạch Giá là bị lỗi, bạn nào giúp mình sửa lỗi với, có phải là nhiều dòng quá đúng không, làm ơn giúp mình sửa lại cho nhiều hàng nhé vì mỗi lần khách hàng nhận thì nhiều lắm (Có khi đến 500+ dòng như vậy). Cám ơn.
https://www.mediafire.com/?ppcp9pppm0e3p59
2. Bên Sheet BangTongHop, chỗ Trừ %, cái % đó cũng là do mình đánh vào như đơn giá vậy đó, mà bạn giúp mình viết code trước nghĩ chỗ đó là fix 5% nên hiện giờ mỗi lần tổng hợp là ra 5%. Có thể giúp mình sửa lại giống như chỗ đơn giá, mình sẽ đánh % vào và lưu lại. Lần nhấn Tổng Hợp lần sau nó sẽ ko mất đi. Bên K lượng sau trừ sẽ = K lượng - (K lượng * % mình đánh vào).

Cám ơn các bạn.
 
2. Bên Sheet BangTongHop, chỗ Trừ %, cái % đó cũng là do mình đánh vào như đơn giá vậy đó, mà bạn giúp mình viết code trước nghĩ chỗ đó là fix 5% nên hiện giờ mỗi lần tổng hợp là ra 5%. Có thể giúp mình sửa lại giống như chỗ đơn giá, mình sẽ đánh % vào và lưu lại. Lần nhấn Tổng Hợp lần sau nó sẽ ko mất đi. Bên K lượng sau trừ sẽ = K lượng - (K lượng * % mình đánh vào).

Cám ơn các bạn.
Tôi chỉ bổ sung code thôi nhé, thêm cho cột % :
PHP:
Public Sub LOC_BTH()
Application.ScreenUpdating = False
Dim Dic As Object, DSKH(), sArr(), dArr(), N As Long, i As Long, j As Long, k As Long
Dim rSult(), keyItem
Dim Tem As String, STT As Long, TCong As String, Tong(1 To 1, 1 To 6), Cll As Range
Set Dic = CreateObject("Scripting.Dictionary")
TCong = Sheets("CHITIET_KH").[O5].Value
With Sheets("TEN KH")
    DSKH = .Range(.[B6], .[B6].End(xlDown)).Value
End With
With Sheets("NHAP DU LIEU")
    sArr = .Range(.[B6], .[B6].End(xlDown)).Resize(, 13).Value
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
For N = 1 To UBound(DSKH, 1)
    STT = 0
    For i = 1 To UBound(sArr, 1)
        If sArr(i, 1) = DSKH(N, 1) Then
            Tem = sArr(i, 1) & sArr(i, 2) & sArr(i, 3)
            If Not Dic.exists(Tem) Then
                k = k + 1: STT = STT + 1
                Dic.Add Tem, k
                dArr(k, 1) = STT
                For j = 1 To 3
                    dArr(k, j + 1) = sArr(i, j)
                Next j
                dArr(k, 5) = 1
                dArr(k, 6) = sArr(i, 13)
                dArr(k, 8) = "=RC[-2] * (100%-RC[-1])" '====Chinh lai cai nay, bo khong truy xuat cot 7 cua dArr
                dArr(k, 10) = "=RC[-2]*RC[-1]"
            Else
                dArr(Dic.Item(Tem), 5) = dArr(Dic.Item(Tem), 5) + 1
                dArr(Dic.Item(Tem), 6) = dArr(Dic.Item(Tem), 6) + sArr(i, 13)
            End If
        End If
    Next i
    If STT > 0 Then
        k = k + 1
        dArr(k, 3) = TCong
        dArr(k, 5) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 6) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 8) = "=sum(R[-" & STT & "]C:R[-1]C)"
        dArr(k, 10) = "=sum(R[-" & STT & "]C:R[-1]C)"
    End If
Next N


' ========= Thêm cho này ^^
rSult = Sheet4.Range("B5:J" & Sheet4.[J65536].End(xlUp).Row).Value
    For i = 1 To UBound(rSult, 1)
        keyItem = rSult(i, 1) & rSult(i, 2) & rSult(i, 3)
        If Dic.exists(keyItem) Then
            dArr(Dic.Item(keyItem), 9) = rSult(i, 8)
            dArr(Dic.Item(keyItem), 7) = rSult(i, 6)
        End If
    Next
 ' =============Den cho nay


With Sheets("BANG TONG HOP")
    .[A5:J10000].ClearContents
    .[A5:J10000].Borders.LineStyle = xlNone
    .[A5:J10000].Interior.ColorIndex = 0
    If k Then
        .[A5].Resize(k, 10).Value = dArr
        .[A5].Resize(k, 10).Borders.LineStyle = xlContinuous
        For Each Cll In .Range(.[C5], .[C5].End(xlDown))
            If Cll.Value = TCong Then
                Cll.Offset(, -2).Resize(, 10).Interior.ColorIndex = 36
            End If
        Next
    End If
End With
Set Dic = Nothing
Application.ScreenUpdating = True
End Sub
 
Mình không hiểu bên Sheet CHITIETKH mỗi lần mình chọn Minh Rạch Giá là bị lỗi, bạn nào giúp mình sửa lỗi với, có phải là nhiều hàng quá đúng không, làm ơn giúp mình sửa lại cho nhiều hàng nhé vì mỗi lần khách hàng nhận thì nhiều lắm. Cám ơn.
https://www.mediafire.com/?ppcp9pppm0e3p59

Bạn nào làm ơn giúp mình sửa lỗi này với :(

Lỗi là do đối với "Minh Rạch Giá" là do tại dữ liệu cột E ("Số") ở sheet "NHAP DU LIEU" có dữ liệu dạng ký tự: như OS, OS2,... ở tại các ô E47, E96

---

Tuy nhiên tôi đã viết lại toàn bộ SUB này (LOC_CTTKH),giúp tránh lỗi khi gặp ký tự như trên và cải thiện tốc độ nhanh hơn, đúng Format hơn.

Quá trình so sánh sắp xếp, nhóm lại đều suy luật từ code của sub cũ --> bạn cần phải tự kiểm tra kết quả lại một cách cẩn trọng để xem có đúng không

thay toàn bộ sub LOC_CTTKH (từ Sub .... đến ... End Sub) trong Module1 thành:

PHP:
Public Sub LOC_CTTKH()
    ''#by vodoi2x
    Application.ScreenUpdating = False
    Dim sArr(), tArr(), ResArr(), aBold(), tmP, CusName As String
    Dim i As Long, j As Long, k As Long, ii As Long
    Dim nP As Long, m As Long, n As Long, b As Long, NonStop As Boolean
    
    With Sheets("NHAP DU LIEU")
        sArr = .Range(.[B6], .[B65536].End(xlUp)).Resize(, 14).Value
    End With
    CusName = UCase(Sheets("CHITIET_KH").[C2])
    
    ReDim tArr(1 To UBound(sArr, 1), 1 To 3)
    ReDim ResArr(1 To UBound(sArr, 1) + 1, 1 To 14)
    
    ''sort lun mang lay chi so
    k = 0
    For i = 1 To UBound(sArr, 1)
        If sArr(i, 1) <> "" Then
            If UCase(sArr(i, 1)) = CusName Then
                tmP = sArr(i, 2) & "#" & sArr(i, 3)
                k = k + 1
                ii = k - 1 '' sap vao mang da sap xep
                NonStop = ii > 0
                If NonStop Then NonStop = Not (tArr(ii, 1) < tmP Or (tArr(ii, 1) = tmP And Val(tArr(ii, 2)) <= Val(sArr(i, 4))))
                Do While NonStop
                    For j = 1 To 3
                        tArr(ii + 1, j) = tArr(ii, j)
                    Next j
                    ii = ii - 1
                    NonStop = ii > 0
                    If NonStop Then NonStop = Not (tArr(ii, 1) < tmP Or (tArr(ii, 1) = tmP And Val(tArr(ii, 2)) <= Val(sArr(i, 4))))
                Loop
                ii = ii + 1
                tArr(ii, 1) = tmP
                tArr(ii, 2) = sArr(i, 4)
                tArr(ii, 3) = i
            End If
        End If
    Next i
    n = k
    
    ''Gan KQ vao ResArr va xu ly Group
    nP = 0: m = 0: b = 0
    For i = 1 To n
        m = m + 1
        nP = nP + 1
        
        ResArr(m, 1) = i
        For j = 2 To 14
            ResArr(m, j) = sArr(tArr(i, 3), j)
        Next j
        
        If i = n Or tArr(i, 1) <> tArr(i + 1, 1) Then
            m = m + 1
            ResArr(m, 2) = nP
            ResArr(m, 3) = ResArr(m - 1, 2)
            ResArr(m, 4) = ResArr(m - 1, 3)
            ResArr(m, 13) = "=SUM(R[-" & nP & "]C:R[-1]C)"
            
            b = b + 1
            ReDim Preserve aBold(1 To b)
            aBold(b) = m
            nP = 0
        End If
    Next i
   
   ''Gan KQ cuoi cung xuong sheet va format
    With Sheets("CHITIET_KH").Range("A6")
        With .Resize(2000, 14)
            .Borders.LineStyle = xlNone
            .ClearContents
            .Interior.ColorIndex = 0
            .Font.Bold = False
        End With
        
        If m Then
            With .Resize(m, 14)
                .Value = ResArr
                .Borders.LineStyle = xlContinuous
            End With
            
            For i = 1 To b
                .Offset(aBold(i) - 1, 2).Resize(, 12).Interior.ColorIndex = 37
                .Offset(aBold(i) - 1).Resize(, 14).Font.Bold = True
            Next i
        End If
    End With
    Application.ScreenUpdating = True
End Sub

......................................
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom