Hàm Max trong VBA (1 người xem)

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

bongmaihung

Thành viên hoạt động
Tham gia
7/8/14
Bài viết
173
Được thích
39
Em có một file đính kèm nếu dùng max trong Excel để tính thì em đã làm được
Nhưng ko biết nếu giờ dùng Max trong VBA thì code thể hiện như thế nào ah
Chi tiết em gửi file đính kèm, Nhờ anh chị giúp đỡ ah. Em cảm ơn
 

File đính kèm

Em có một file đính kèm nếu dùng max trong Excel để tính thì em đã làm được
Nhưng ko biết nếu giờ dùng Max trong VBA thì code thể hiện như thế nào ah
Chi tiết em gửi file đính kèm, Nhờ anh chị giúp đỡ ah. Em cảm ơn
Không xem file nhưng tạm thời có thể trả lời thế này
Trong VBA thì sử dụng thế này : Application.Max()
 
Upvote 0
Không xem file nhưng tạm thời có thể trả lời thế này
Trong VBA thì sử dụng thế này : Application.Max()
Mã:
Sub Max()
Dim Rng As Range, i As Long
With Sheets("sheet1")
Rng = .Range(.[C7].End(xlDown).Row)
For i = 7 To UBound(Rng)
i = i + 1
If Rng(i, 4) <> 0 Then

    Application.WorksheetFunction.Max ([D5].Value + Sum(.Range("D7:D" & i + 7)) - Sum(.Range("E7:E" & i + 7)) - [E5].Value)
End If
End With
End Sub

Em viết kiểu thế này hướng có được ko anh
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub Max()
Dim Rng As Range, i As Long
With Sheets("sheet1")
Rng = .Range(.[C7].End(xlDown).Row)
End With
For i = 7 To UBound(Rng)
i = i + 1
If Rng(i, 4) <> 0 Then
With Sheets("sheet1")
    .WorksheetFunction.Max ([D5].Value + Sum(.Range("D7:D" & i + 7)) - Sum(.Range("E7:E" & i + 7)) - [E5].Value)
End If
End With
End Sub

Em viết kiểu thế này hướng có được ko anh

Chắc là không được, nhìn sơ qua thấy sai tè le thì phải
Thì bạn thử coi sao, nếu bị lỗi là cú pháp sai. Nếu không lỗi nhưng kết quả sai thì cũng là không xài được.
Mình chỉ có cảm giác là code hơi kỳ kỳ
 
Upvote 0
Chắc là không được, nhìn sơ qua thấy sai tè le thì phải
Thì bạn thử coi sao, nếu bị lỗi là cú pháp sai. Nếu không lỗi nhưng kết quả sai thì cũng là không xài được.
Mình chỉ có cảm giác là code hơi kỳ kỳ
Đúng là kỳ kỳ thiệt, em test cũng báo ngay ở Array roài
 
Upvote 0
Đúng là kỳ kỳ thiệt, em test cũng báo ngay ở Array roài
Thử vầy đi nha
PHP:
Sub abc()
Dim Fr, Lr, r, rng1, rng2
Fr = 7: Lr = [C65536].End(3).Row
For r = Fr To Lr
   rng1 = Application.Sum(Range("D7:D" & r))
   rng2 = Application.Sum(Range("E7:E" & r))
   Cells(r, 6) = [D5] + rng1 - rng2 - [E5]
Next
End Sub
 
Upvote 0
Thử vầy đi nha
PHP:
Sub abc()
Dim Fr, Lr, r, rng1, rng2
Fr = 7: Lr = [C65536].End(3).Row
For r = Fr To Lr
   rng1 = Application.Sum(Range("D7:D" & r))
   rng2 = Application.Sum(Range("E7:E" & r))
   Cells(r, 6) = [D5] + rng1 - rng2 - [E5]
Next
End Sub

Em test đã ok
nếu vẫn đề bài như thế, bây h em muốn lấy số dư đó nhưng ở sheet thứ hai thi thế nào hả anh ( em chỉ hỏi phần số dư thôi anh nhé)
Em cảm ơn anh
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thử vầy đi nha
PHP:
Sub abc()
Dim Fr, Lr, r, rng1, rng2
Fr = 7: Lr = [C65536].End(3).Row
For r = Fr To Lr
   rng1 = Application.Sum(Range("D7:D" & r))
   rng2 = Application.Sum(Range("E7:E" & r))
   Cells(r, 6) = [D5] + rng1 - rng2 - [E5]
Next
Set Rng = Nothing
End Sub
Thọt lét cái.
Chạy code đó thì còn gì là Max? số âm nó cũng thành âm...........
Ké vào 1 Sub cho vui chớ hổng biết trúng trật
[GPECODE=vb]Public Sub MaxXXX()
Dim Rng As Range, Cll As Range, Tem As Double
Set Rng = Range([C7], [C50000].End(xlUp))
Tem = [D5].Value
For Each Cll In Rng
Tem = Tem + Cll.Offset(, 1) - Cll.Offset(, 2)
Cll.Offset(, 3) = IIf(Tem > 0, Tem, 0)
Cll.Offset(, 4) = IIf(Tem < 0, Abs(Tem), 0)
Next Cll
Set Rng = Nothing
End Sub[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Thọt lét cái.
Chạy code đó thì còn gì là Max? số âm nó cũng thành âm...........
Ké vào 1 Sub cho vui chớ hổng biết trúng trật
[GPECODE=vb]Public Sub MaxXXX()
Dim Rng As Range, Cll As Range, Tem As Double
Set Rng = Range([C7], [C50000].End(xlUp))
Tem = [D5].Value
For Each Cll In Rng
Tem = Tem + Cll.Offset(, 1) - Cll.Offset(, 2)
Cll.Offset(, 3) = IIf(Tem > 0, Tem, 0)
Cll.Offset(, 4) = IIf(Tem < 0, Abs(Tem), 0)
Next Cll
Set Rng = Nothing
End Sub[/GPECODE]

Công thức của Thầy đã khắc phục được số âm ah, em cảm ơn thấy nhiều
 
Upvote 0
Thọt lét cái.
Chạy code đó thì còn gì là Max? số âm nó cũng thành âm...........
Ké vào 1 Sub cho vui chớ hổng biết trúng trật
[GPECODE=vb]Public Sub MaxXXX()
Dim Rng As Range, Cll As Range, Tem As Double
Set Rng = Range([C7], [C50000].End(xlUp))
Tem = [D5].Value
For Each Cll In Rng
Tem = Tem + Cll.Offset(, 1) - Cll.Offset(, 2)
Cll.Offset(, 3) = IIf(Tem > 0, Tem, 0)
Cll.Offset(, 4) = IIf(Tem < 0, Abs(Tem), 0)
Next Cll
Set Rng = Nothing
End Sub[/GPECODE]
Ở bài 7 em có nêu, nếu h em để số dư ở sheet thứ hai thì sửa thế nào ah
 
Upvote 0
Thọt lét cái.
Chạy code đó thì còn gì là Max? số âm nó cũng thành âm...........
Ké vào 1 Sub cho vui chớ hổng biết trúng trật
[GPECODE=vb]Public Sub MaxXXX()
Dim Rng As Range, Cll As Range, Tem As Double
Set Rng = Range([C7], [C50000].End(xlUp))
Tem = [D5].Value
For Each Cll In Rng
Tem = Tem + Cll.Offset(, 1) - Cll.Offset(, 2)
Cll.Offset(, 3) = IIf(Tem > 0, Tem, 0)
Cll.Offset(, 4) = IIf(Tem < 0, Abs(Tem), 0)
Next Cll
Set Rng = Nothing
End Sub[/GPECODE]

Ai biểu cung cấp dữ liệu bèo nhèo có 3 dòng thì chơi theo 3 dòng. Nói rồi mà, tối thiểu 3 bài trả lời cho 1 câu hỏi. Anh không thấy thắm thoát mà em đã lên 4 sao rồi đó ư?
 
Upvote 0
Ai biểu cung cấp dữ liệu bèo nhèo có 3 dòng thì chơi theo 3 dòng. Nói rồi mà, tối thiểu 3 bài trả lời cho 1 câu hỏi. Anh không thấy thắm thoát mà em đã lên 4 sao rồi đó ư?

Em cảm ơn anh, lần sau nếu nhờ bác giúp em sẽ đưa bài giả định tổng quát hơn--=0
 
Upvote 0
Cái dòng Tem=[D5].Value nếu viết đầy đủ phải là Tem=Sheet1.[D5].Value
Bạn tự "ngâm kiếu" đi.

Cảm ơn thầy và anh Quang Hải, em đã làm được rồi ah
Mã:
Sub Hung()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 7), k As Long
Dim  Tem As Double
With Sheets("Sheet1")
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value2
End With
With Sheets("Sheet2")
    Tem = .[D5].Value

    .Range("C7:G10").ClearContents
   k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 2) = .Range("E3").Value2 Then
        k = k + 1
        KQ(k, 1) = Rng(i, 1)
        KQ(k, 2) = Rng(i, 3)
        KQ(k, 3) = Rng(i, 4)
        Tem = Tem + KQ(k, 2) - KQ(k, 3)
        KQ(k, 4) = IIf(Tem > 0, Tem, 0)
        KQ(k, 5) = IIf(Tem < 0, Abs(Tem), 0)
     End If
     If k Then
    .Range("C7").Resize(k, 7).Value = KQ
    End If
Next
End With
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn thầy và anh Quang Hải, em đã làm được rồi ah
Mã:
Sub Hung()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 7), k As Long
Dim clls As Range, Tem As Double
With Sheets("Sheet1")
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value2
End With
With Sheets("Sheet2")
    Tem = .[D5].Value

    .Range("C7:G10").ClearContents
   k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 2) = .Range("E3").Value2 Then
        k = k + 1
        KQ(k, 1) = Rng(i, 1)
        KQ(k, 2) = Rng(i, 3)
        KQ(k, 3) = Rng(i, 4)
        Tem = Tem + KQ(k, 2) - KQ(k, 3)
        KQ(k, 4) = IIf(Tem > 0, Tem, 0)
        KQ(k, 5) = IIf(Tem < 0, Abs(Tem), 0)
     End If
     If k Then
    .Range("C7").Resize(k, 7).Value = KQ
    End If
Next
End With
End Sub

Nhìn tổng quát cũng hơi kỳ cục chút. Chướng chướng sao đó.
 
Upvote 0
Dạ vâng, em test thì cũng đã ok. Có gì nhờ các anh chỉ bảo thêm ah. Em cảm ơn
Mã:
Sub Hung()
Dim Rng(), i As Long, KQ(1 To 10000, 1 To 7), k As Long
Dim  Tem As Double
With Sheets("Sheet1")
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value2
End With
With Sheets("Sheet2")
    Tem = .[D5].Value

    .Range("C7:G10").ClearContents
   k = 0
For i = 1 To UBound(Rng)
    If Rng(i, 2) = .Range("E3").Value2 Then
        k = k + 1
        KQ(k, 1) = Rng(i, 1)
        KQ(k, 2) = Rng(i, 3)
        KQ(k, 3) = Rng(i, 4)
        Tem = Tem + KQ(k, 2) - KQ(k, 3)
        KQ(k, 4) = IIf(Tem > 0, Tem, 0)
        KQ(k, 5) = IIf(Tem < 0, Abs(Tem), 0)
     End If
     If k Then
    .Range("C7").Resize(k, 7).Value = KQ
    End If
Next
End With
End Sub
Giữ nguyên các tên biến của bạn.
Túm gọn lại một chút đi kẻo có người bảo "chướng chướng"
Nhìn tổng quát cũng hơi kỳ cục chút. Chướng chướng sao đó.
[GPECODE=vb]Public Sub Hung()
Dim Rng(), KQ(), I As Long, Tem As Double, Ma As String, K As Long
With Sheet1
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value
End With
ReDim KQ(1 To UBound(Rng, 1), 1 To 5)
With Sheet2
Tem = .[D5].Value
Ma = UCase(.[E3])
For I = 1 To UBound(Rng, 1)
If UCase(Rng(I, 2)) = Ma Then
K = K + 1
Tem = Tem + Rng(I, 3) - Rng(I, 4)
KQ(K, 1) = Rng(I, 1)
KQ(K, 2) = Rng(I, 3)
KQ(K, 3) = Rng(I, 4)
KQ(K, 4) = IIf(Tem > 0, Tem, 0)
KQ(K, 5) = IIf(Tem < 0, Abs(Tem), 0)
End If
Next I
.[C7:G1000].ClearContents
If K Then .[C7].Resize(K, 5) = KQ
End With
End Sub[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
 Sub Hung()
Dim Rng(), KQ(), I As Long, Tem As Double, Ma As String, K As Long
With Sheet1
    Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value
End With
ReDim KQ(1 To UBound(Rng, 1), 1 To 5)
With Sheet2
    Tem = .[F7].Value
    Ma = UCase(.[E3])
    For I = 1 To UBound(Rng, 1)
        If UCase(Rng(I, 2)) = Ma Then
            K = K + 1
           
                KQ(K, 1) = Rng(I, 1)
                KQ(K, 2) = Rng(I, 3)
                KQ(K, 3) = Rng(I, 4)
            Tem = Tem + Rng(I, 3) - Rng(I, 4) - [G7]
            Tem1 = [G7] + Rng(I, 4) - Rng(I, 3) - Tem
            KQ(K, 4) = Application.Max(Tem, 0)
            KQ(K, 5) = Application.Max(Tem1, 0)
        End If
    Next I
    .[C8:G1000].ClearContents
    If K Then .[C8].Resize(K, 5) = KQ
End With
End Sub
Với sự trợ giúp của Thầy Bate và anh Quang Hải em đã giải quyết đuợc bài toàn trên
Giờ em muốn mở rộng bài toàn một chút
Nếu giờ số dư có 2 cột, và em muốn chỉ sử dụng hàm Max
Em thử đoạn code trên như chưa được
Nhờ mọi người trợ giúp ah
 

File đính kèm

Upvote 0
Em có một file đính kèm nếu dùng max trong Excel để tính thì em đã làm được
Nhưng ko biết nếu giờ dùng Max trong VBA thì code thể hiện như thế nào ah
Chi tiết em gửi file đính kèm, Nhờ anh chị giúp đỡ ah. Em cảm ơn
Mã:
[COLOR=#000000][COLOR=#0000BB]Sub abc[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim Fr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Lr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]rng1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]rng2
Fr [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]7[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Lr [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]C65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row
[/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]r [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Fr To Lr
   rng1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"D7:D" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))
   [/COLOR][COLOR=#0000BB]rng2 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"E7:E" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))
   [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]6[/COLOR][COLOR=#007700]) = [[/COLOR][COLOR=#0000BB]D5[/COLOR][COLOR=#007700]] + [/COLOR][COLOR=#0000BB]rng1 [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]rng2 [/COLOR][COLOR=#007700]- [[/COLOR][COLOR=#0000BB]E5[/COLOR][COLOR=#007700]]
[/COLOR][COLOR=#0000BB]Next
End Sub  [/COLOR][/COLOR]
Bạn thử bài này kết hợp với Application.Max xem sao nhé
 
Upvote 0
Mã:
[COLOR=#000000][COLOR=#0000BB]Sub abc[/COLOR][COLOR=#007700]()
[/COLOR][COLOR=#0000BB]Dim Fr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]Lr[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]rng1[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]rng2
Fr [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]7[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]Lr [/COLOR][COLOR=#007700]= [[/COLOR][COLOR=#0000BB]C65536[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#0000BB]End[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Row
[/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000BB]r [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Fr To Lr
   rng1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"D7:D" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))
   [/COLOR][COLOR=#0000BB]rng2 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"E7:E" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))
   [/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]6[/COLOR][COLOR=#007700]) = [[/COLOR][COLOR=#0000BB]D5[/COLOR][COLOR=#007700]] + [/COLOR][COLOR=#0000BB]rng1 [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]rng2 [/COLOR][COLOR=#007700]- [[/COLOR][COLOR=#0000BB]E5[/COLOR][COLOR=#007700]]
[/COLOR][COLOR=#0000BB]Next
End Sub  [/COLOR][/COLOR]
Bạn thử bài này kết hợp với Application.Max xem sao nhé

Mình cũng đã làm thử rồi nhưng không được.
Như bài 20 mình có nói là mình muốn sử dụng hàm Max, còn nếu trường hợp có số dư ở hai bên mình chế lại một chút phần số dư đầu kỳ thế này
Mã:
=IFERROR(IF(VLOOKUP(E3,sodu_dau!$A$5:$C$6,3,0)<>0,-VLOOKUP(E3,sodu_dau!$A$5:$C$6,3,0),VLOOKUP(E3,sodu_dau!$A$5:$C$6,2,0)),0)
thì với hướng dẫn của Thầy Bate vẫn ra bình thường
Mã:
[COLOR=#0000cd]=MAX($F$7+SUM($D$8:D8)-SUM($E$8:E80)-$G$7,0[/COLOR])
Mã:
=[COLOR=#0000cd]MAX($G$7+SUM($E$8:E8)-SUM($D$8:D8)-F7,0[/COLOR])
Và mình muốn hỏi không biết hai công thức này trong VBA có sử dụng được địa chỉ tuyệt đối và tương đối giống như Excel hay không
Nếu áp dụng cho bài 20 thì giải quyết thế nào.
Không biết có phải kiểu thế này
Mã:
[COLOR=#000000][COLOR=#0000BB]rng1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"D7:D" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))[/COLOR][/COLOR]
hay kiểu R1C1
Nhờ các bác giúp em
 
Upvote 0
Mình cũng đã làm thử rồi nhưng không được.
Như bài 20 mình có nói là mình muốn sử dụng hàm Max, còn nếu trường hợp có số dư ở hai bên mình chế lại một chút phần số dư đầu kỳ thế này
Mã:
=IFERROR(IF(VLOOKUP(E3,sodu_dau!$A$5:$C$6,3,0)<>0,-VLOOKUP(E3,sodu_dau!$A$5:$C$6,3,0),VLOOKUP(E3,sodu_dau!$A$5:$C$6,2,0)),0)
thì với hướng dẫn của Thầy Bate vẫn ra bình thường
Mã:
[COLOR=#0000cd]=MAX($F$7+SUM($D$8:D8)-SUM($E$8:E80)-$G$7,0[/COLOR])
Mã:
=[COLOR=#0000cd]MAX($G$7+SUM($E$8:E8)-SUM($D$8:D8)-F7,0[/COLOR])
Và mình muốn hỏi không biết hai công thức này trong VBA có sử dụng được địa chỉ tuyệt đối và tương đối giống như Excel hay không
Nếu áp dụng cho bài 20 thì giải quyết thế nào.
Không biết có phải kiểu thế này
Mã:
[COLOR=#000000][COLOR=#0000BB]rng1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Application[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Sum[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]Range[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"D7:D" [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]r[/COLOR][COLOR=#007700]))[/COLOR][/COLOR]
hay kiểu R1C1
Nhờ các bác giúp em
Thử chạy sub này coi sao
[GPECODE=vb]Sub Hung()
Dim Rng(), KQ(), I As Long, No As Double, Co As Double, Ma As String, K As Long
With Sheet1
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value
End With
ReDim KQ(1 To UBound(Rng, 1), 1 To 5)
With Sheet2
No = .[F7].Value
Co = .[G7].Value
Ma = UCase(.[E3])
For I = 1 To UBound(Rng, 1)
If UCase(Rng(I, 2)) = Ma Then
K = K + 1
KQ(K, 1) = Rng(I, 1)
KQ(K, 2) = Rng(I, 3)
KQ(K, 3) = Rng(I, 4)
KQ(K, 4) = WorksheetFunction.Max(No + Rng(I, 3) - Co - Rng(I, 4), 0)
KQ(K, 5) = WorksheetFunction.Max(Co + Rng(I, 4) - No - Rng(I, 3), 0)
No = KQ(K, 4): Co = KQ(K, 5)
End If
Next I
.[C8:G1000].ClearContents
If K Then .[C8].Resize(K, 5) = KQ
End With
End Sub[/GPECODE]
 
Upvote 0
Thử chạy sub này coi sao
[GPECODE=vb]Sub Hung()
Dim Rng(), KQ(), I As Long, No As Double, Co As Double, Ma As String, K As Long
With Sheet1
Rng = .Range(.[C7], .[C50000].End(xlUp)).Resize(, 4).Value
End With
ReDim KQ(1 To UBound(Rng, 1), 1 To 5)
With Sheet2
No = .[F7].Value
Co = .[G7].Value
Ma = UCase(.[E3])
For I = 1 To UBound(Rng, 1)
If UCase(Rng(I, 2)) = Ma Then
K = K + 1
KQ(K, 1) = Rng(I, 1)
KQ(K, 2) = Rng(I, 3)
KQ(K, 3) = Rng(I, 4)
KQ(K, 4) = WorksheetFunction.Max(No + Rng(I, 3) - Co - Rng(I, 4), 0)
KQ(K, 5) = WorksheetFunction.Max(Co + Rng(I, 4) - No - Rng(I, 3), 0)
No = KQ(K, 4): Co = KQ(K, 5)
End If
Next I
.[C8:G1000].ClearContents
If K Then .[C8].Resize(K, 5) = KQ
End With
End Sub[/GPECODE]

Mã:
 No = KQ(K, 4): Co = KQ(K, 5)
Đoạn này thật là hay đấy ah
Em đã thử thành công
File thật của em nó khá lằng nhằng nhưng khi chế thêm với code của Thầy kết quả thật tuyệt vời ah
Cảm ơn thấy nhiều ah
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom