bongmaihung
Thành viên hoạt động



- Tham gia
- 7/8/14
- Bài viết
- 173
- Được thích
- 39







Không xem file nhưng tạm thời có thể trả lời thế nàyEm 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()
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




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



Đúng là kỳ kỳ thiệt, em test cũng báo ngay ở Array roàiChắ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ỳ




Thử vầy đi nhaĐúng là kỳ kỳ thiệt, em test cũng báo ngay ở Array roài
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



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
Thọt lét cá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 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...........



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 ahThọ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á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.




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 đó ư?




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.
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




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 đó.
Giữ nguyên các tên biến của bạn.Dạ vâng, em test thì cũng đã ok. Có gì nhờ các anh chỉ bảo thêm ah. Em cảm ơnMã: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
[GPECODE=vb]Public Sub Hung()Nhìn tổng quát cũng hơi kỳ cục chút. Chướng chướng sao đó.



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
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
[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ã:[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]
=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)
[COLOR=#0000cd]=MAX($F$7+SUM($D$8:D8)-SUM($E$8:E80)-$G$7,0[/COLOR])
=[COLOR=#0000cd]MAX($G$7+SUM($E$8:E8)-SUM($D$8:D8)-F7,0[/COLOR])
[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]
Thử chạy sub này coi saoMì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
thì với hướng dẫn của Thầy Bate vẫn ra bình thườngMã:=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)
Mã:[COLOR=#0000cd]=MAX($F$7+SUM($D$8:D8)-SUM($E$8:E80)-$G$7,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ôngMã:=[COLOR=#0000cd]MAX($G$7+SUM($E$8:E8)-SUM($D$8:D8)-F7,0[/COLOR])
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
hay kiểu R1C1Mã:[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]
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]
No = KQ(K, 4): Co = KQ(K, 5)