Chào các bạn !!
Mình có một mảng dữ liệu từ A1:L31. Mình muốn tìm vị trí của giá trị lớn nhất trong chuỗi giá trị đó (325.9) sau đó lấy giá trì vừa tìm được cộng với 2 giá trị liền kề trở về trước (325.9 + 10.6 + 16.5 ). Các bạn giúp mình với nhé.
Cám ơn rất nhiều.
Option Explicit
Function SumMax(Rng As Range)
Dim sRng As Range, WF As Object
Dim Max_ As Double
Set WF = Application.WorksheetFunction
Max_ = WF.Max(Rng)
Set sRng = Rng.Find(Max_, , xlFormulas, xlWhole)
SumMax = WF.Sum(Range(sRng, sRng.Offset(-2)))
End Function
Option Explicit
Function SumMax(Rng As Range)
Dim sRng As Range, WF As Object
Dim Max_ As Double
Set WF = Application.WorksheetFunction
Max_ = WF.Max(Rng)
Set sRng = Rng.Find(Max_, , xlFormulas, xlWhole)
SumMax = WF.Sum(Range(sRng, sRng.Offset(-2)))
End Function
Chào các bạn !!
Mình có một mảng dữ liệu từ A1:L31. Mình muốn tìm vị trí của giá trị lớn nhất trong chuỗi giá trị đó (325.9) sau đó lấy giá trì vừa tìm được cộng với 2 giá trị liền kề trở về trước (325.9 + 10.6 + 16.5 ). Các bạn giúp mình với nhé.
Cám ơn rất nhiều.
tôi thử giải bằng cthức
C33=MAX(A1:L31)
A32=COUNTIF(A4:A31,$C$33)--->kéo qua phải (làm hàng phụ,để xác định cột nào chứa giá trị cần tìm)
c34=SUM(OFFSET($A$4,MATCH(C33,OFFSET($A$4:$A$30,,MATCH(1,A32:L32,0)-1),0)-1,MATCH(1,A32:L32,0)-1,-3))
E34=OFFSET($A$4,MATCH(C33,OFFSET($A$4:$A$30,,MATCH(1,A32:L32,0)-1),0)-2,MATCH(1,A32:L32,0)-1)
Chào bạn. Rất mong bạn thông cảm vì sự trình bày không rõ ràng. Mình đã bổ sung vào trong bảng excel giá trị cột là tháng và giá trị hàng là ngày. Do đó khi dịch giá trị liền kề thì tức là dịch "liền kề cùng cột về quá khứ". Tuy nhiên nếu giá trị max đó tìm được ở dòng 2 hoặc 1 thì chắc phải dịch sang giá trị cuối cùng của cột liền kề bên trái. Ngoài ra nếu có 2 giá trị max thì mình lấy giá max cuối cùng ( tức là giá trị cuối cùng trong chuỗi số).
Cám ơn bạn đã có những nhận xét đúng.
Chào bạn. Rất mong bạn thông cảm vì sự trình bày không rõ ràng. Mình đã bổ sung vào trong bảng excel giá trị cột là tháng và giá trị hàng là ngày. Do đó khi dịch giá trị liền kề thì tức là dịch "liền kề cùng cột về quá khứ". Tuy nhiên nếu giá trị max đó tìm được ở dòng 2 hoặc 1 thì chắc phải dịch sang giá trị cuối cùng của cột liền kề bên trái. Ngoài ra nếu có 2 giá trị max thì mình lấy giá max cuối cùng ( tức là giá trị cuối cùng trong chuỗi số).
Cám ơn bạn đã có những nhận xét đúng.
Nếu dùng hàm thì công thức cho D35 =MaxAndSum(B2:M32)
Mã:
Function MaxAndSum(Rng As Range)
Dim cell_ As Range, maxValue As Double, ds As String, us As Boolean
With Application
ds = .DecimalSeparator
us = .UseSystemSeparators
.DecimalSeparator = "."
.UseSystemSeparators = False
End With
maxValue = WorksheetFunction.Max(Rng)
Set cell_ = Rng.Find(maxValue, , xlFormulas, xlWhole, xlByColumns, xlPrevious)
If cell_.Row >= 4 Then
MaxAndSum = WorksheetFunction.Sum(cell_.Offset(-2).Resize(3))
Else
MaxAndSum = WorksheetFunction.Sum(cell_.Offset(2 - cell_.Row).Resize(cell_.Row - 1))
[COLOR=#0000ff]If cell_.Column > 2 Then MaxAndSum = MaxAndSum + WorksheetFunction.Sum(cell_.Offset(29, -1).Resize(4 - cell_.Row))[/COLOR]
End If
With Application
.DecimalSeparator = ds
.UseSystemSeparators = us
End With
End Function
Nếu dùng hàm thì công thức cho D35 =MaxAndSum(B2:M32)
Mã:
Function MaxAndSum(Rng As Range)
Dim cell_ As Range, maxValue As Double, ds As String, us As Boolean
With Application
ds = .DecimalSeparator
us = .UseSystemSeparators
.DecimalSeparator = "."
.UseSystemSeparators = False
End With
maxValue = WorksheetFunction.Max(Rng)
Set cell_ = Rng.Find(maxValue, , xlFormulas, xlWhole, xlByColumns, xlPrevious)
If cell_.Row >= 4 Then
MaxAndSum = WorksheetFunction.Sum(cell_.Offset(-2).Resize(3))
Else
MaxAndSum = WorksheetFunction.Sum(cell_.Offset(2 - cell_.Row).Resize(cell_.Row - 1))
End If
With Application
.DecimalSeparator = ds
.UseSystemSeparators = us
End With
End Function