lexuanhienkttv
Thành viên chính thức
- Tham gia
- 15/8/11
- Bài viết
- 80
- Được thích
- 6
Sub BatDauMuaPQ()
Dim WF As Object, Rng As Range, Cls As Range
Dim J As Long, Rws As Long, ChucNgay As Double, SoNgay As Integer
Set WF = Application.WorksheetFunction
Rws = [B2].CurrentRegion.Rows.Count
For J = 2 To Rws
If Cells(J, "B").Value > 5 Then
Set Rng = Cells(J, "B").Resize(10)
ChucNgay = WF.Sum(Rng)
SoNgay = WF.CountIf(Rng, ">0")
If ChucNgay > 50 And SoNgay > 5 Then
MsgBox Cells(J, "B").Address, , "Ngày BD Mua!"
Exit For
End If
End If
Next J
Cells(J, "B").Resize(10).Select
End Sub
Hình hhư trong code của bác thiếu mất cái này:Đây có thể là 1 tham khảo cho chủ bài đăng:
Option Explicit
Function Rain(dat As Range, RainIndex As Range, loai As Integer) As Date
Dim rng As Range, count&, sum As Double, ce As Range, ce1 As Range
With WorksheetFunction
Select Case loai
Case 1
For Each ce In RainIndex
If ce.Value > 5 And ce.Row > 60 Then
Set rng = ce.Resize(10)
sum = .sum(rng): count = .CountIf(rng, ">0")
If sum > 50 And count >= 5 Then
Set rng = ce.Offset(10, 0).Resize(10): count = 0
For Each ce1 In rng
If ce1 <> 0 Then count = 0 Else count = count + 1
Next
If count < 5 Then
Rain = dat.Cells(ce.Row - 1, 1)
Exit Function
End If
End If
End If
Next
Case 2
For Each ce In RainIndex
If ce.Value = 0 And ce.Row > 300 Then
Set rng = ce.Resize(10)
sum = .sum(rng): count = .CountIf(rng, 0)
If sum < 50 And count >= 5 Then
Set rng = ce.Offset(10, 0).Resize(10): count = 0
For Each ce1 In rng
If ce1 <> 0 Then count = 0 Else count = count + 1
Next
If count >= 5 Then
Rain = dat.Cells(ce.Row - 1, 1)
Exit Function
End If
End If
End If
Next
End Select
End With
Rain = "Khong tim thay"
End Function
" sau thời kỳ này không có chuỗi ngày gián đoạn mưa liên tục quá 5 ngày"Xin chào các anh chị, em có bảng số liệu cần tìm ngày bắt đầu và kết thúc, em có mô tả trong bảng excel. Nhờ anh chị giúp xây dựng công thức hoặc code để tìm các ngày này được thuận tiện. Xin trân trọng cảm ơn!
"If ce.Value > 5 And ce.Row > 60 Then1 cách dùng hàm tự tạo (UDF)
Cấu trúc hàm:
=Rain(Vùng ngày tháng, Vùng lượng mưa, n)
với n=1: bắt đầu; n=2: kết thúc
Cụ thể:
M9:
=rain($A$2:$A$366,$B$2:$B$366,1)
N9:
=rain($A$2:$A$366,$B$2:$B$366,2)
Thay vùng B (trạm PQ) thành vùng C (trạm RG) hay vùng nào đó chưa lượng mưa
Cách dùng:
Chuột phải tên sheet, view code, insert module, sau đó dán code này vào. Lưu file dạng .xlsm
PHP:Option Explicit Function Rain(dat As Range, RainIndex As Range, loai As Integer) As Date Dim rng As Range, count&, sum As Double, ce As Range, ce1 As Range With WorksheetFunction Select Case loai Case 1 For Each ce In RainIndex If ce.Value > 5 And ce.Row > 60 Then Set rng = ce.Resize(10) sum = .sum(rng): count = .CountIf(rng, ">0") If sum > 50 And count >= 5 Then Set rng = ce.Offset(10, 0).Resize(10): count = 0 For Each ce1 In rng If ce1 <> 0 Then count = 0 Else count = count + 1 Next If count < 5 Then Rain = dat.Cells(ce.Row - 1, 1) Exit Function End If End If End If Next Case 2 For Each ce In RainIndex If ce.Value = 0 And ce.Row > 300 Then Set rng = ce.Resize(10) sum = .sum(rng): count = .CountIf(rng, 0) If sum < 50 And count >= 5 Then Set rng = ce.Offset(10, 0).Resize(10): count = 0 For Each ce1 In rng If ce1 <> 0 Then count = 0 Else count = count + 1 Next If count >= 5 Then Rain = dat.Cells(ce.Row - 1, 1) Exit Function End If End If End If Next End Select End With Rain = "Khong tim thay" End Function
Cảm ơn góp ý của anh. Chỗ "sau thời kỳ này không có chuỗi ngày gián đoạn mưa liên tục quá 5 ngày" có nghĩa là sau 10 ngày thỏa mãn các điều kiện về lượng mưa ngày bắt đầu và tổng lượng mưa của 10 ngày đó. Ở đây đầy đủ phải là "không có quá 5 ngày liên tiếp không mưa, trong chuỗi 30 ngày tiếp theo kể từ ngày bắt đầu mùa mưa". Liên quan đến năm nhuần thì em loại bỏ, vì ngày 29/2 cơ bản là rất ít mưa. Con số >60 là vì tìm ngày bắt đầu mưa từ tháng 3 (theo số liệu thống kê khu vực không thể mùa mưa đến sớm hơn được), còn số >300 có thể anh bebo021999 nhầm (từ tháng 10 tương ứng >274). Còn phần kết thúc mùa mưa ngoài phần ngày bắt đầu và tổng lượng mưa 10 ngày <50, thì 5 ngày không mưa liên tục phải nối tiếp chuỗi tổng 10 ngày có lượng mưa <50. Nhờ các anh chị sửa lại cho phù hợp giúp." sau thời kỳ này không có chuỗi ngày gián đoạn mưa liên tục quá 5 ngày"
Với ví dụ trạm "PQ" nói rỏ thời gian cụ thể từ ngày nào tới ngày nào?
"If ce.Value > 5 And ce.Row > 60 Then
....
If ce.Value = 0 And ce.Row > 300 Then"
Con số 60 và 300 có thể làm kết quả sai lệch trong năm nhuần và trên file thực tế có thứ tự dòng khác file bài #1