Nhờ mọi người tìm lượng mưa 3 ngày max trong năm.

Liên hệ QC

lechuongduong

Thành viên mới
Tham gia
26/4/14
Bài viết
9
Được thích
0
Cụ thể là thế này trong 1 năm mình cần tìm ra 3 ngày mưa liên tiếp nhau cộng lại sẽ là lượng mưa lớn nhất trong năm.
Và 3 ngày này có thể là từ tháng này sang tháng sau, VD: từ ngày 30/4-2/5 mà cộng lại lớn nhất cũng vẫn tính.
Sau đó là tìm ra 3 ngày đấy là những ngày mùng mấy.
File đính kèm của mình là Mưa ngày trạm Phú Xuyên. Số liệu lượng mưa sẽ là vùng từ ô B5:M35
 

File đính kèm

Mình xem link của bạn thì thấy có hai cách.
Cách dùng hàm thì khi chuyển tiếp các tháng k được. excel sẽ không hiểu.
Còn tải giải pháp VBA của bạn thanhtrg thì bị lỗi #NAME? đấy là mình vẫn xem trên số liệu trong file của bạn ấy chứ mình chưa nhập số liệu của mình./
 
Mình không gửi file lên cho bạn được! bạn có thể đặt tên cho dữ liệu từng tháng rồi săp xếp dữ liệp lại từng ngày chuyển về 1 cột dữ liệu của cả năm (chuyễn tiếp được các tháng)! Rồi lấy ngày dữ liệu thứ 03/01-01/01 kéo xuống hết năm ^_^ tiếp điến dùng hàm max cho dãy dữ liệu vừa tạo ra bạn sẽ có Max lớn nhất 3 ngày liên tiếp trong năm! Muốn trả về ngày nào đến ngày nào thì có thể dụng hạm sumif trả lại ngày có giá trị lớn nhất và 3 ngày liên tiếp là từ ngày có cuối cùng đạt giá trị Max -2 ( như trong dữ liệu bạn đưa thì Max 3 ngày liên tiếp là 164.00 từ ngày 22/08 đến 24/08/1995
 
Cụ thể là thế này trong 1 năm mình cần tìm ra 3 ngày mưa liên tiếp nhau cộng lại sẽ là lượng mưa lớn nhất trong năm.
Và 3 ngày này có thể là từ tháng này sang tháng sau, VD: từ ngày 30/4-2/5 mà cộng lại lớn nhất cũng vẫn tính.
Sau đó là tìm ra 3 ngày đấy là những ngày mùng mấy.
File đính kèm của mình là Mưa ngày trạm Phú Xuyên. Số liệu lượng mưa sẽ là vùng từ ô B5:M35

Tặng bạn code này tùy nghi sử dụng:
PHP:
Public Sub GPE()
Dim sArr(), tArr(), I As Long, J As Long, K As Long, Max_ As Double, Tong As Double, Tem As String
sArr = Range("A4:M35").Value
ReDim tArr(1 To 372, 1 To 2)
For J = 2 To 13
    For I = 2 To 32
        K = K + 1
        tArr(K, 1) = sArr(I, 1) & "/" & sArr(1, J)
        tArr(K, 2) = sArr(I, J)
    Next I
Next J
For I = 1 To 370
    If tArr(I, 2) <> "" Then
        If tArr(I + 1, 2) <> "" Then
            If tArr(I + 2, 2) <> "" Then
                Tong = tArr(I, 2) + tArr(I + 1, 2) + tArr(I + 2, 2)
                If Max_ < Tong Then
                    Max_ = Tong
                    Tem = tArr(I, 1) & "; " & tArr(I + 1, 1) & "; " & tArr(I + 2, 1)
                End If
            End If
        End If
    End If
Next I
[P3].Value = Max_
[P4].Value = Tem
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Có thể viết hàm người dùng (Cạnh tranh với thầy giáo cái chơi!)

PHP:
Option Explicit
Function Max3(Rng As Range, Nam As Integer, Optional BaNgày As Boolean = True)
 Dim Rg0 As Range, Cls As Range
 Dim StrC As String, Tmp$
 Dim J As Integer, SoNgay As Integer, Mua#, Max_#, N1#, N2#, N3#    
 For J = 1 To 12
    SoNgay = Day(DateSerial(Nam, J + 1, 0))
    If J = 1 Then
        Set Rg0 = Rng(1).Resize(SoNgay)
    Else
        Set Rg0 = Union(Rg0, Rng(J).Resize(SoNgay))
    End If
 Next J
 For Each Cls In Rg0
    StrC = StrC & Right("000" & CStr(Cls.Value), 4) & ";"
 Next Cls
 On Error Resume Next
 For J = 1 To Len(StrC) Step 6
    N1 = CDbl(Mid(StrC, J, 4))
    N2 = CDbl(Mid(StrC, J + 5, 4))
    N3 = CDbl(Mid(StrC, J + 10, 4))
    If N1 > 0 And N2 > 0 And N3 > 0 Then
        Mua = N1 + N2 + N3
        If Mua > Max_ Then
            Max_ = Mua
            Tmp = CStr(N1) & Str(N2) & Str(N3)
        End If
    End If
 Next J
 If BaNgày Then Max3 = Max_ Else Max3 = Tmp
End Function

2 cách xài:
=Max3(B5:M35,G3,FALSE)
=Max3(B5:M35,G3)

.


 
Chỉnh sửa lần cuối bởi điều hành viên:
Cụ thể là thế này trong 1 năm mình cần tìm ra 3 ngày mưa liên tiếp nhau cộng lại sẽ là lượng mưa lớn nhất trong năm.
Và 3 ngày này có thể là từ tháng này sang tháng sau, VD: từ ngày 30/4-2/5 mà cộng lại lớn nhất cũng vẫn tính.
Sau đó là tìm ra 3 ngày đấy là những ngày mùng mấy.
File đính kèm của mình là Mưa ngày trạm Phú Xuyên. Số liệu lượng mưa sẽ là vùng từ ô B5:M35
Góp thêm hàm tự tạo
Mã:
Function Max_X_Ngay(ViTri As Range, Nam As Long, n As Integer) As String
  Dim LuongMua As Double, NgayMua As Date, DuLieu
  Dim TamLuongMua As Double, i As Long, j As Long
  DuLieu = ViTri.Resize(31, 12).Value2
  Application.Volatile
  On Error Resume Next
  For i = DateSerial(Nam, 1, 1) To DateSerial(Nam + 1, 1, 1) - n
  TamLuongMua = 0
    If DuLieu(Day(i), Month(i)) > 0 Then
        For j = i To (i + n - 1)
            If DuLieu(Day(j), Month(j)) > 0 Then
                TamLuongMua = TamLuongMua + DuLieu(Day(j), Month(j))
            Else
                TamLuongMua = 0
                Exit For
            End If
        Next j
        If LuongMua < TamLuongMua Then
            LuongMua = TamLuongMua
            NgayMua = i
        End If
    End If
  Next i
  If LuongMua > 0 Then
    Max_X_Ngay = "Luong Mua " & LuongMua & ", Ngày bat dau mua " & Format(NgayMua, "dd/mm/yyyy")
  Else
    Max_X_Ngay = "Khong co"
  End If
End Function
Cách dùng:
=Max_X_Ngay($B$5,1995,3)
-$B$5 -> ô bắt đầu trong năm
-1995 -> năm tính lượng mưa
- 3 -> số ngày liên tiếp cần tính
 

File đính kèm

Web KT

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

Back
Top Bottom