Tôi có một sổ làm việc Excel với nhiều bảng tính chứa dữ liệu như:
'DATA_1' 'DATA_2' 'DATA_3'
A B A B A B
1 value1 1.6 1 value1 0.8 1 value1 2.0
2 value2 2.5 2 value2 2.2 2 value2 0.5
3 value3 3.4 3 value3 3.1 3 value3 3.2
Có một bảng tính khác được gọi SUMMARY
, trước mặt tất cả những người khác, trông giống như thế này:
'SUMMARY'
A B C D
5 min max count
6 value1 1.0 1.8
7 value2 1.5 2.5
8 value3 2.0 3.0
Các hàng 1
đến 4
mà không được hiển thị là trống rỗng và ẩn.
Như bạn có thể đã đoán, bây giờ tôi đang cố gắng điền đúng cột count
( D
). Nó nên chứa số lượng của tất cả các value?
giá trị trong các DATA_?
trang tính trong phạm vi tương ứng từ min
đến max
giới hạn (một giá trị bằng một trong hai giới hạn được xem xét trong phạm vi). Vì vậy, những gì tôi đang mong đợi cho dữ liệu mẫu đã cho là:
D
5 count
6 1
7 2
8 0
Những gì tôi có cho đến nay là một hàm do người dùng định nghĩa để lấy một mảng các tên bảng tính, hoạt động tốt:
Function SHEET_NAMES() As Variant
' returns names of all sheets as an array
Dim index As Long, retArray() As String
Application.Volatile True
ReDim retArray(ThisWorkbook.Sheets.Count)
For index = 1& To ThisWorkbook.Sheets.Count
retArray(index) = ThisWorkbook.Sheets.Item(index).Name
Next index
SHEET_NAMES = retArray
End Function
Hơn nữa, tôi có thể truy cập thành công value1
dữ liệu (một cách đại diện) trong tất cả các bảng tính với {=N(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))}
.
Tôi có thể kiểm tra các value1
giá trị so với min
giới hạn của chúng với {=N(N(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))>=B6)}
. Khi chức năng mảng này được kéo dài trên 4 ô, kết quả là:
0 1 0 1
Tôi có thể kiểm tra các value1
giá trị so với max
giới hạn của chúng với {=N(N(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))<=C6)}
. Khi chức năng mảng này được kéo dài trên 4 ô, kết quả là:
1 1 1 0
Cuối cùng, tôi cũng có thể kiểm tra các ô cho các giá trị số với {=N(ISNUMBER(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES()))))}
. Khi chức năng mảng này được kéo dài trên 4 ô, kết quả là:
0 1 1 1
Xuất 0
phát từ SUMMARY
bảng tính có ô B1
trống như đã đề cập.
Ý tưởng của tôi bây giờ là sử dụng chức năng SUMPRODUCT
cuối cùng và vì vậy để có được số lượng cá nhân : {=SUMPRODUCT(N(N(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))>=B6);N(N(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))<=C6);N(ISNUMBER(INDIRECT(ADDRESS(ROW(B1);COLUMN(B1);;;SHEET_NAMES())))))}
.
Tuy nhiên, mặc dù tôi mong đợi 1 = (0 * 1 * 0) + (1 * 1 * 1) + (0 * 1 * 1) + (1 * 0 * 1)
, điều này luôn có kết quả 0
kỳ lạ. Vì vậy, bạn có thể vui lòng cho tôi biết tôi đang làm gì sai ở đây?
(Tôi muốn một giải pháp mà không sử dụng COUNTIF
, COUNTIFS
, SUMIF
, SUMIFS
, và chức năng tương tự khác mà cần điều kiện để được đưa ra như là một chuỗi, nếu có thể.)
value?
tất cả các trang tính trông giống hệt nhau, các giá trị đều ở cùng một vị trí, chỉ có các giá trị là khác nhau; số lượng tờ thay đổi từ 1 đến ~ 30 ...