Cần giúp đỡ !Tìm giá trị lớn nhất của tổng 3 ngày và chỉ ra đó là ngày nào

  • Thread starter Thread starter ibraa
  • Ngày gửi Ngày gửi
Liên hệ QC

ibraa

Thành viên mới
Tham gia
15/3/11
Bài viết
13
Được thích
0
View attachment 73128View attachment 73129View attachment 73128View attachment 73129Vấn đề của mình là cần tìm được lượng mưa lớn nhất trong 3 ngày liên tục trong nhiều năm và chỉ ra đó là những ngày nào trong năm. Mong các bạn giúp mình với
Số liệu và hình thức mẫu được mình làm bằng tay như mình gửi ở phía dưới
Thanks mọi người trước ^^
 

File đính kèm

Vấn đề của mình là cần tìm được lượng mưa lớn nhất trong 3 ngày liên tục trong nhiều năm và chỉ ra đó là những ngày nào trong năm. Mong các bạn giúp mình với
Số liệu và hình thức mẫu được mình làm bằng tay như mình gửi ở phía dưới
Thanks mọi người trước ^^
Lượng mưa lớn nhất từng năm và lớn nhất qua các năm đã rõ, nhưng lớn nhất 3 ngày liên tục xác định như thế nào? Có phải là xác định 3 ngày liên tục tính từ ngày có lượng mưa lớn nhất hay không? Vậy ô P93 = 133.5 được tính như thế nào?
 
P93= H105+H106+H107, cái đấy chỉ là lượng mưa lớn nhất trong 3 ngày liên tiếp của 1 năm thôi, mình làm được có mấy năm bằng tay nhưng mà toét hết cả mắt để tìm :(
 
P93= H105+H106+H107, cái đấy chỉ là lượng mưa lớn nhất trong 3 ngày liên tiếp của 1 năm thôi, mình làm được có mấy năm bằng tay nhưng mà toét hết cả mắt để tìm :(
Cái nầy chắc chỉ dùng hàm tự tạo thôi.
Xem thử hàm này,
Max3(Dòng đầu trong Vùng muốn tìm)
 

File đính kèm

Lần chỉnh sửa cuối:
Chen chưn với Ba Tê cái nha:

PHP:
Option Explicit
Function Max3Ngay(Dau As Long)
 Dim Tong As Double, jJ As Byte, Temp As Double, Ng As Byte, Thg As Byte
 Dim WF As Object, Rng As Range, Cls As Range
 
 Set WF = Application.WorksheetFunction
 For jJ = 2 To 13
   Set Rng = Cells(Dau, jJ).Resize(28).SpecialCells(xlCellTypeConstants, 1)
   For Each Cls In Rng
      Tong = WF.Sum(Cls.Resize(3))
      If Tong > Temp Then
         Temp = Tong:         Ng = Cells(Cls.Row, "A").Value
         Thg = jJ - 1
      End If
   Next Cls
 Next jJ
 Max3Ngay = Temp & ", Ngày " & Right("0" & CStr(Ng), 2) & "/" & Right("0" & CStr(Thg), 2)
End Function
 
Bài này có thể dùng công thức bình thường được đấy... Ví dụ để tính tổng lượng mưa 3 ngày lớn nhất trong vùng B4:M34 ta dùng công thức sau
PHP:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)))
Công thức mảng, kết thúc bằng tổ hợp phím Ctrl + Shift + Enter
Có giá trị MAX rồi, tra ra ngày tháng hơi phức tạp chút nhưng không phải là không được... Ví dụ: Ta có giá trị MAX đặt tại cell P22, để tra ngày tháng, ta dùng cái này:
PHP:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=$P$22,1*(ROW($1:$29)&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Nếu dùng Name thì công thức sẽ gọn hơn
 

File đính kèm

Lần chỉnh sửa cuối:
mình cảm ơn tất cả mọi người đã giúp đỡ mình:D
Nhưng mà mình cung cấp thiếu thông tin cho mọi người. Sorry.... mưa 3 ngày max là tổng lượng mưa lớn nhất trong 3 ngày có mưa liên tiếp ( 2 ngày có mưa và 1 ngày ko có mưa thì cũng ko phải là giá trị mình cần tìm các bạn ak)
 
Lần chỉnh sửa cuối:
Nếu đây là công việc thường nhật của bạn thì bạn nên có trách nhiệm hơn với nó!

PHP:
Option Explicit
Function Max3Ngay(Dau As Long)
 Dim Tong As Double, jJ As Byte, Temp As Double, Ng As Byte, Thg As Byte
 Dim WF As Object, Rng As Range, Cls As Range
 
 Set WF = Application.WorksheetFunction
 For jJ = 2 To 13
   Set Rng = Cells(Dau, jJ).Resize(28).SpecialCells(xlCellTypeConstants, 1)
   For Each Cls In Rng
      If Cls.Offset(1).Value > 0 And Cls.Offset(2).Value > 0 And Cls.Value > 0 Then
         Tong = WF.Sum(Cls.Resize(3))
         If Tong > Temp Then
            Temp = Tong:         Ng = Cells(Cls.Row, "A").Value
            Thg = jJ - 1
         End If
      End If
   Next Cls
 Next jJ
 If Temp > 0 Then _
   Max3Ngay = Temp & ", Ngày " & Right("0" & CStr(Ng), 2) & "/" & Right("0" & CStr(Thg), 2)
End Function
 
mình cảm ơn tất cả mọi người đã giúp đỡ mình:D
Nhưng mà mình cung cấp thiếu thông tin cho mọi người. Sorry.... mưa 3 ngày max là tổng lượng mưa lớn nhất trong 3 ngày có mưa liên tiếp ( 2 ngày có mưa và 1 ngày ko có mưa thì cũng ko phải là giá trị mình cần tìm các bạn ak)
Tại bạn đưa kết quả không đúng vào file thôi
Sửa lại 1 tí:
PHP:
=MAX(IF(SUBTOTAL(2,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=3,SUBTOTAL(9,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)),""))

PHP:
=TEXT(MAX(IF(IF(SUBTOTAL(2,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=3,SUBTOTAL(9,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)),"")=$P$22,100*ROW($1:$29)+COLUMN($A:$L),"")),"00""/""00")
 

File đính kèm

Tại bạn đưa kết quả không đúng vào file thôi
Sửa lại 1 tí:
PHP:
=MAX(IF(SUBTOTAL(2,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=3,SUBTOTAL(9,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)),""))

PHP:
=TEXT(MAX(IF(IF(SUBTOTAL(2,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=3,SUBTOTAL(9,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)),"")=$P$22,100*ROW($1:$29)+COLUMN($A:$L),"")),"00""/""00")
bạn ơi! mình chạy thử thì thấy lượng mưa 3 ngày max là nằm ở cuối tháng này và đầu tháng kia(31/3+1/4+2/4) thì nó sẽ không ghi nhận kết quả này
 
Ờ hén, đúng là còn chuyện tháng nối tháng nữa

bạn ơi! mình chạy thử thì thấy lượng mưa 3 ngày max là nằm ở cuối tháng này và đầu tháng kia(31/3+1/4+2/4) thì nó sẽ không ghi nhận kết quả này

Hàm này nè bạn:

PHP:
Option Explicit
Function Max3Ngay(Dau As Long, Optional Nhuan As Byte = 0)
 Dim Tong As Double, jJ As Byte, Temp As Double
 Dim SoNg As Byte, Ng As Byte, Thg As Byte, Dem As Byte
 Dim WF As Object, Rng As Range, Cls As Range
 
 Set WF = Application.WorksheetFunction
 For jJ = 2 To 13
   SoNg = Choose(jJ - 1, 31, 28 + Nhuan, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
   Set Rng = Cells(Dau, jJ).Resize(SoNg).SpecialCells(xlCellTypeConstants, 1)
   Dem = 0
   For Each Cls In Rng
      Dem = Dem + 1
      If Dem < SoNg - 1 Then
         If Cls.Offset(1).Value > 0 And Cls.Offset(2).Value > 0 And Cls.Value > 0 Then
            Tong = WF.Sum(Cls.Resize(3))
            If Tong > Temp Then
               Temp = Tong:         Ng = Cells(Cls.Row, "A").Value
               Thg = jJ - 1
            End If
         End If
      ElseIf Dem = SoNg - 1 Then
         If Cls.Value > 0 And Cls.Offset(1).Value > 0 And Cells(Dau, jJ + 1).Value > 0 Then
            Tong = WF.Sum(Union(Cls.Resize(2), Cells(Dau, jJ + 1)))         '<=|'
            If Tong > Temp Then
               Temp = Tong:         Ng = Cells(Cls.Row, "A").Value
               Thg = jJ - 1
            End If
         End If
      ElseIf Dem = SoNg Then                                                               '
         If Cls.Value > 0 And Rng(1).Offset(1).Value > 0 And Rng(1).Offset(1, 1).Value > 0 Then
            Tong = WF.Sum(Union(Cls, Rng(1).Offset(, 1).Resize(2)))
            If Tong > Temp Then
               Temp = Tong:         Ng = Cells(Cls.Row, "A").Value
               Thg = jJ - 1
            End If
         End If
      End If
   Next Cls
 Next jJ
 If Temp > 0 Then _
   Max3Ngay = Temp & ", Ngày " & Right("0" & CStr(Ng), 2) & "/" & Right("0" & CStr(Thg), 2)
End Function
 
bạn ơi! mình chạy thử thì thấy lượng mưa 3 ngày max là nằm ở cuối tháng này và đầu tháng kia(31/3+1/4+2/4) thì nó sẽ không ghi nhận kết quả này
Nếu có yêu cầu kiểu này thì công thức xin thua, chỉ có thể lập trình thôi
Tặng bạn hàm này:
PHP:
Function Max3Ngay(NgayDau As Range, Nam As Long, kieu As Boolean)
  Dim tmpSumMax As Double, SumMax As Double
  Dim tmp1 As Double, tmp2 As Double, tmp3 As Double, lDay As Long
  Application.Volatile
  On Error Resume Next
  For lDay = DateSerial(Nam, 1, 1) To DateSerial(Nam, 12, 29)
    With NgayDau
      tmp1 = CDbl(.Offset(Day(lDay) - 1, Month(lDay) - 1))
      tmp2 = CDbl(.Offset(Day(lDay + 1) - 1, Month(lDay + 1) - 1))
      tmp3 = CDbl(.Offset(Day(lDay + 2) - 1, Month(lDay + 2) - 1))
    End With
    If tmp1 > 0 And tmp2 > 0 And tmp3 > 0 Then
      tmpSumMax = tmp1 + tmp2 + tmp3
      If tmpSumMax > SumMax Then
        SumMax = tmpSumMax
        Max3Ngay = IIf(kieu, lDay, SumMax)
      End If
    End If
  Next
End Function
Cú pháp = Max3Ngay(Ngày đầu tiên của vùng dữ liệu , Dữ liệu thuộc năm mấy, Kiểu xuất kết quả)
Ví dụ
=Max3Ngay(B4,1990,0) nghĩa là:
- Ngày đầu thuộc cell B4
- Năm cần tính là năm 1990
- Kết quả cần xuất là giá trị MAX

=Max3Ngay(B4,1990,1) nghĩa là:
- Ngày đầu thuộc cell B4
- Năm cần tính là năm 1990
- Kết quả cần xuất là giá trị Ngày tháng đạt giá trị MAX
 

File đính kèm

Lần chỉnh sửa cuối:
xin hỏi thêm bác ndu96081631 là muốn tìm max 5 ngày và 7 ngày mưa max thì đổi hàm như thế nào?
 
Bài này có thể dùng công thức bình thường được đấy... Ví dụ để tính tổng lượng mưa 3 ngày lớn nhất trong vùng B4:M34 ta dùng công thức sau
PHP:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1)))
Công thức mảng, kết thúc bằng tổ hợp phím Ctrl + Shift + Enter
Có giá trị MAX rồi, tra ra ngày tháng hơi phức tạp chút nhưng không phải là không được... Ví dụ: Ta có giá trị MAX đặt tại cell P22, để tra ngày tháng, ta dùng cái này:
PHP:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW($1:$29)-1,COLUMN($A:$L)-1,3,1))=$P$22,1*(ROW($1:$29)&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Nếu dùng Name thì công thức sẽ gọn hơn
Nhờ bác xác định hộ em tổng lượng mưa 5 ngày (7 ngày) lớn nhất với. Cám ơn bác
 
nhờ các bác giúp cách xác định tổng lượng mưa 5 ngày (7 ngày) liên tiếp có gí trị lớn nhất và ngày tháng xuất hiện
 

File đính kèm

nhờ các bác giúp cách xác định tổng lượng mưa 5 ngày (7 ngày) liên tiếp có gí trị lớn nhất và ngày tháng xuất hiện

Công thức MAX 3 ngày:
Mã:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]3[/COLOR][/B],1)))
Vậy MAX 5 ngày sẽ là: (công thức tại cell R22)
Mã:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]5[/COLOR][/B],1)))
Lấy ngày MAX (3 ngày):
Mã:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]3[/COLOR][/B],1))=[COLOR=#ff0000][B]$P$22[/B][/COLOR],1*(ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Vậy ngày MAX (5 ngày) là:
Mã:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])-1,COLUMN($A:$L)-1,[COLOR=#ff0000][B]5[/B][/COLOR],1))=[COLOR=#ff0000][B]$R$22[/B][/COLOR],1*(ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Chổ màu đỏ là những cho phải sửa lại
Bạn tự suy ra cách tính MAX 7 ngày nhé
 
Lần chỉnh sửa cuối:
Công thức MAX 3 ngày:
Mã:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]3[/COLOR][/B],1)))
Vậy MAX 5 ngày sẽ là: (công thức tại cell R22)
Mã:
=MAX(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]5[/COLOR][/B],1)))
Lấy ngày MAX (3 ngày):
Mã:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])-1,COLUMN($A:$L)-1,[B][COLOR=#ff0000]3[/COLOR][/B],1))=[COLOR=#ff0000][B]$P$22[/B][/COLOR],1*(ROW([COLOR=#ff0000][B]$1:$29[/B][/COLOR])&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Vậy ngày MAX (5 ngày) là:
Mã:
=TEXT(MAX(IF(SUBTOTAL(109,OFFSET($B$4:$M$34,ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])-1,COLUMN($A:$L)-1,[COLOR=#ff0000][B]5[/B][/COLOR],1))=[COLOR=#ff0000][B]$R$22[/B][/COLOR],1*(ROW([COLOR=#ff0000][B]$1:$27[/B][/COLOR])&TEXT(COLUMN($A:$L),"00")),"")),"00""/""00")
Chổ màu đỏ là những cho phải sửa lại
Bạn tự suy ra cách tính MAX 7 ngày nhé
Rất rất cám ơn bác nhé, may nhờ có bác em làm kịp không teo em, em làm được rồi.
 
View attachment 73128View attachment 73129View attachment 73128View attachment 73129Vấn đề của mình là cần tìm được lượng mưa lớn nhất trong 3 ngày liên tục trong nhiều năm và chỉ ra đó là những ngày nào trong năm. Mong các bạn giúp mình với
Số liệu và hình thức mẫu được mình làm bằng tay như mình gửi ở phía dưới
Thanks mọi người trước ^^

Bài toán này nếu dùng hàm sẽ bị “gãy” trong các trường hợp sau :

  • Tổng lượng mưa lớn nhất rơi vào các ngày chuyển tiếp giữa các tháng
  • Có hơn 1 khoảng thời gian có tổng lượng mưa bằng với lượng mưa lớn nhất
Vì vậy, phải dùng giải pháp VBA để giải quyết các vấn đề này . Với hàm tự tạo này dễ dàng tìm được tổng lượng mưa lớn nhất trong một số ngày bất kỳ (<=31) đồng thời chỉ ra đó là những ngày nào . Mời bạn xem file đính kèm .
 

File đính kèm

Lần chỉnh sửa cuối:
Mến chào các anh chị,

Em đang gặp vấn đề khó trong việc tìm giá trị max có điều kiện của chuỗi mưa trong bảng theo file đính kèm.

Tìm lượng mưa của 1, 3, 5, 7 ngày max trong năm thứ i năm trong chuối mưa từ 1978-2013.

Trong đó lượng mưa 1, 3,5,7 ngày max được giải thích theo file đính kèm.

Nhờ anh chị giúp đỡ xử lý giúp em vấn đề này,

Cảm ơn các anh chị nhiều,
 

File đính kèm

Web KT

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

Back
Top Bottom