Xuất ra nhiều giá trị một lúc(xuất có điều kiện)

Liên hệ QC

Phanvuhaiduong

Thành viên chính thức
Tham gia
18/4/17
Bài viết
65
Được thích
2
Dear các anh , các bác
Làm thế nào để xuất ra nhiều các giá trị thõa mãn một điều kiện như nhau ạ, chi tiết như file đính kèm ạ, rất mong được sự giải đáp của các bậc tiền bối
 

File đính kèm

Nếu đúng kết quả như vầy (2 cột số liệu bên phải):


PĐộ sâu(m)XPĐộ sâu(m)
121.31.50142.3
142.38.50123.3
123.3164.3
164.3185.3
185.3256.3
256.3207.3
207.3158.3
158.3DSTB:4.6375
209.3
Thì xài hàm mảng tự tạo sau:



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))   ' Mói Thêm 2  Dâu NGoat  '
DoSauGH = Arr()
End Function
 
Lần chỉnh sửa cuối:
Nếu đúng kết quả như vầy (2 cột số liệu bên phải):


PĐộ sâu(m)XPĐộ sâu(m)
121.31.50142.3
142.38.50123.3
123.3164.3
164.3185.3
185.3256.3
256.3207.3
207.3158.3
158.3DSTB:6.3
209.3
Thì xài hàm mảng tự tạo sau:


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
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á
 
PHP:
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
 

File đính kèm

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ị đó
Bạn có thể dùng AVERAGEIFS() nếu muốn tính trung bình cộng.
 
Ý 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ưới.
 
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ư
PHP:
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
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 em
Bài đã được tự động gộp:

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ướ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
 

File đính kèm

Bà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
Hê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","")
 

File đính kèm

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. ....
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:

Hê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","")
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:

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
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ụ
 
Lần chỉnh sửa cuối:
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. ....
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?
 
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ụ
Giá trị cột G không chuẩn nên không có kết quả
 
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?
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
 
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
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 ạ
 
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 ạ
Nế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(). :giveup:
 
Nế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(). :giveup:
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 ý em
 
Web KT

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

Back
Top Bottom