Phanvuhaiduong
Thành viên chính thức
- Tham gia
- 18/4/17
- Bài viết
- 65
- Được thích
- 2
P | Độ sâu(m) | X | P | Độ sâu(m) | |||||||||
12 | 1.3 | 1.50 | 14 | 2.3 | |||||||||
14 | 2.3 | 8.50 | 12 | 3.3 | |||||||||
12 | 3.3 | 16 | 4.3 | ||||||||||
16 | 4.3 | 18 | 5.3 | ||||||||||
18 | 5.3 | 25 | 6.3 | ||||||||||
25 | 6.3 | 20 | 7.3 | ||||||||||
20 | 7.3 | 15 | 8.3 | ||||||||||
15 | 8.3 | DSTB: | 4.6375 | ||||||||||
20 | 9.3 |
Function DoSauGH(Rng As Range, Optional GHD As Double = 1.5, Optional GHT As Double = 8.5)
ReDim Arr(1 To Rng.Rows.Count + 3, 1 To 2) As String
Dim J As Long, Tg As Double, Dm As Integer
Arr(1, 1) = "P": Arr(1, 2) = Rng(2).Value
For J = 2 To Rng.Rows.Count
If Rng.Cells(J, 2).Value >= GHD And Rng.Cells(J, 2) <= GHT Then
Dm = Dm + 1: Tg = Tg + Rng.Cells(J, 2).Value
Arr(Dm + 1, 1) = CStr(Rng.Cells(J, 1).Value)
Arr(Dm + 1, 2) = CStr(Rng.Cells(J, 2).Value)
End If
Next J
Arr(Dm + 2, 1) = "DSTB:": Arr(Dm + 2, 2) = CStr(Tg / (Dm + 1)) ' Mói Thêm 2 Dâu NGoat '
DoSauGH = Arr()
End Function
Em cảm ơn bác, nhưng khi vào công việc, độ sâu của em thay đổi, dài hơn, hoặc ngắn lại, giá trị X cũng thay đổi thì làm thế nào ạ, dạng mảng này em lại dốt quáNếu đúng kết quả như vầy (2 cột số liệu bên phải):
Thì xài hàm mảng tự tạo sau:
P Độ sâu(m) X P Độ sâu(m) 12 1.3 1.50 14 2.3 14 2.3 8.50 12 3.3 12 3.3 16 4.3 16 4.3 18 5.3 18 5.3 25 6.3 25 6.3 20 7.3 20 7.3 15 8.3 15 8.3 DSTB: 6.3 20 9.3
PHP:Function DoSauGH(Rng As Range, Optional GHD As Double = 1.5, Optional GHT As Double = 8.5) ReDim Arr(1 To Rng.Rows.Count + 3, 1 To 2) As String Dim J As Long, Tg As Double, Dm As Integer Arr(1, 1) = "P": Arr(1, 2) = Rng(2).Value For J = 2 To Rng.Rows.Count If Rng.Cells(J, 2).Value >= GHD And Rng.Cells(J, 2) <= GHT Then Dm = Dm + 1: Tg = Tg + Rng.Cells(J, 2).Value Arr(Dm + 1, 1) = CStr(Rng.Cells(J, 1).Value) Arr(Dm + 1, 2) = CStr(Rng.Cells(J, 2).Value) End If Next J Arr(Dm + 2, 1) = "DSTB:": Arr(Dm + 2, 2) = CStr(Tg / Dm + 1) DoSauGH = Arr() End Function
Function DoSauGH(Rng As Range, Optional GHD As Double = 1.5, Optional GHT As Double = 8.5)
' . . . . .
End Function[php]
2 trị nhập vô tham biến nếu khác với mặc định, như cú pháp =DoSauGH(F8:G17, ,9) Tăng giới hạn trên đến 9.0
& nhớ là hàm mảng nha:
(1) Không thể thay 1 vài thành tố trong mảng, mà phải thay cả
(2) CTRL+SHIFT + ENTER
Bạn có thể dùng AVERAGEIFS() nếu muốn tính trung bình cộng.Hàm nào đưa ra được giá trị nằm trong khoảng từ 1.5-8.5, ứng với mỗi giá trị độ sâu đó=> giá trị P(cái này dùng Vlook thì em biết ạ),
sau khi đưa ra giá trị P đó thì tính trung bình cộng của tất cả giá trị đó
Ý em là làm thế nào xuất nhiều giá trị một lúc mà thỏa mãn điều kiện ấy ạ, chứ tính trung bình cộng thì ok ạBạn có thể dùng AVERAGEIFS() nếu muốn tính trung bình cộng.
Thử công thức này trong I9:Ý em là làm thế nào xuất nhiều giá trị một lúc mà thỏa mãn điều kiện ấy ạ, chứ tính trung bình cộng thì ok ạ
Thử công thức này trong I9:
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($G$9:$G$17)/($G$9:$G$17>=$I$9)/($G$9:$G$17<=$I$10),ROWS(J$9:J9))),"")
Sao chép qua phải và xuống dư
Em vẫn chưa hiểu bác ạ, ở đây em có rất nhiều điều kiện xảy ra cùng lúc và cùng tính GTTB, nếu như vậy mỗi lần thay đổi điều kiện lại phải vào code để chỉnh sửa ạ. File cụ thể của em đây ạ, bác xem dùng emPHP:Function DoSauGH(Rng As Range, Optional GHD As Double = 1.5, Optional GHT As Double = 8.5) ' . . . . . End Function[php] 2 trị nhập vô tham biến nếu khác với mặc định, như cú pháp =DoSauGH(F8:G17, ,9) Tăng giới hạn trên đến 9.0 & nhớ là hàm mảng nha: (1) Không thể thay 1 vài thành tố trong mảng, mà phải thay cả (2) CTRL+SHIFT + ENTER
Cái này của bác không được bác ơi, file cụ thể em đây, vấn đề nhiều khoảng điều kiện X xảy ra cùng lúc và cùng tính GTTBThử công thức này trong I9:
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($G$9:$G$17)/($G$9:$G$17>=$I$9)/($G$9:$G$17<=$I$10),ROWS(J$9:J9))),"")
Sao chép qua phải và xuống dưới.
Cái này của bác không được bác ơi, file cụ thể em đây, vấn đề nhiều khoảng điều kiện X xảy ra cùng lúc và cùng tính GTTB
Vậy dạng tìm kiếm này thì có cách nào không anh, em xem file em trình bày bên trong ạ
Hỏi vài chục bài nữa mới hiểu!Vậy dạng tìm kiếm này thì có cách nào không anh, em xem file em trình bày bên trong ạ
Hên xuiBài đã được tự động gộp:
Cái này của bác không được bác ơi, file cụ thể em đây, vấn đề nhiều khoảng điều kiện X xảy ra cùng lúc và cùng tính GTTB
F11 =SUBSTITUTE(SUMPRODUCT((ROUND(($A$11:$A$23+$A$12:$A$24)/2,1)=G11)*$A$11:$A$23)&"-"&SUMPRODUCT((ROUND(($A$11:$A$23+$A$12:$A$24)/2,1)=G11)*$A$12:$A$24),"0-0","")
Bác vẫn chưa hiểu ý em, dù sao cũng cảm ơn bác ạHỏi vài chục bài nữa mới hiểu!
1.Tại sao 1.8 lại có kết quả là 0
2. 1.9 có kết quả là bao nhiêu?
3. 0.1 có kết quả là bao nhiêu?
4. ....
Là như thế nào, hàm của bác khi kéo từ F11 xuống các giá trị có chạy đâu, toàn ra số 0Hên xui
Mã:F11 =SUBSTITUTE(SUMPRODUCT((ROUND(($A$11:$A$23+$A$12:$A$24)/2,1)=G11)*$A$11:$A$23)&"-"&SUMPRODUCT((ROUND(($A$11:$A$23+$A$12:$A$24)/2,1)=G11)*$A$12:$A$24),"0-0","")
Nhập vào ô F11 để xuất ra được giá trị có kết quả như hàng G, (kết quả hàng G đó là em ví dụ ạ, cái đó là cái cần tìm), dữ liệu ban đầu là 3 cột dữ liệu A,B,C thôi ạ, X sẽ chạy từng khoảng một giống như trong ví dụBác vẫn chưa hiểu ý em, dù sao cũng cảm ơn bác ạ
Bài đã được tự động gộp:
Là như thế nào, hàm của bác khi kéo từ F11 xuống các giá trị có chạy đâu, toàn ra số 0
1.8 Vì bên bảng số liệu cột B,C 1.8 có giá trị nào tương ứng đâu, úng với mỗi giá trị cột C( 1.3,2.3,3.3.....) là ứng với mỗi giá trị cột B.(2,3,4)Hỏi vài chục bài nữa mới hiểu!
1.Tại sao 1.8 lại có kết quả là 0
2. 1.9 có kết quả là bao nhiêu?
3. 0.1 có kết quả là bao nhiêu?
4. ....
Giá trị cột G không chuẩn nên không có kết quảBác vẫn chưa hiểu ý em, dù sao cũng cảm ơn bác ạ
Bài đã được tự động gộp:
Là như thế nào, hàm của bác khi kéo từ F11 xuống các giá trị có chạy đâu, toàn ra số 0
Bài đã được tự động gộp:
Nhập vào ô F11 để xuất ra được giá trị có kết quả như hàng G, (kết quả hàng G đó là em ví dụ ạ, cái đó là cái cần tìm), dữ liệu ban đầu là 3 cột dữ liệu A,B,C thôi ạ, X sẽ chạy từng khoảng một giống như trong ví dụ
Thử công thức lập theo hướng dẫn bôi đậm ở trên.1.8 Vì bên bảng số liệu cột B,C 1.8 có giá trị nào tương ứng đâu, úng với mỗi giá trị cột C( 1.3,2.3,3.3.....) là ứng với mỗi giá trị cột B.(2,3,4)
X là khoảng điều kiện để xét, ví dụ : 2.7<X<5.8 => các giá trị cột C thỏa mãn là 3.3,4.3,5.3 từ đó tìm kiếm giá trị tương ứng bên cột B sẽ được là
3.3=> 4; 4.3=>6; 5.3=4; . Cuối cùng tính trung bình cộng (4+6+4)/3 =4.3 .
Bác hiểu ý em không?
F11=SUMPRODUCT(($C$11:$C$42>=A11)*($C$11:$C$42<=A12)*$B$11:$B$42)/COUNTIFS($C$11:$C$42,">="&A11,$C$11:$C$42,"<="&A12)
Tuyệt vời bác ạ, đúng ý em rồi, em vừa đập bàn làm con bé đồng nghiệp giật mình bác ạThử công thức lập theo hướng dẫn bôi đậm ở trên.
Dấu "<=" hoặc ">=" có thể thay đổi thành "<" hoặc ">" tùy bạn
---Mã:F11=SUMPRODUCT(($C$11:$C$42>=A11)*($C$11:$C$42<=A12)*$B$11:$B$42)/COUNTIFS($C$11:$C$42,">="&A11,$C$11:$C$42,"<="&A12)
"Cuối cùng tính trung bình cộng (4+6+4)/3 =4.3" <--có lẽ chưa đúng. --> 14/3=4.66667
Nếu công thức này đúng, thì công thức dưới đây cũng đúng:F11=SUMPRODUCT(($C$11:$C$42>=A11)*($C$11:$C$42<=A12)*$B$11:$B$42)/COUNTIFS($C$11:$C$42,">="&A11,$C$11:$C$42,"<="&A12)
Tuyệt vời bác ạ, đúng ý em rồi, em vừa đập bàn làm con bé đồng nghiệp giật mình bác ạ
Mà sao lúc em lắp vào nó không chạy, rồi bác lại hỏi thêm mấy hàng nữa , em đoán bác không hiểu ý emNếu công thức này đúng, thì công thức dưới đây cũng đúng:
=AVERAGEIFS($B$11:$B$42,$C$11:$C$42,">="&A11,$C$11:$C$42,"<="&A12)
Bái số 5, tôi đã gợi ý xài AVERAGEIFS().