Cách sử dụng ARRAYFORMULA với QUERY trong Google Sheets


10

Tôi có một truy vấn cần được chạy cho mỗi hàng trong danh sách. Nó hoạt động độc đáo khi được viết cho một hàng duy nhất:

QUERY(MaraRankData,
  "select J,I,H,G,F,E where 
    A='"&E3&"' and 
    B='"&B3&"' and 
    C="&C3&" and 
    D="&D3&"",
  0
)

Điều đó tạo ra một hàng dữ liệu, như mong muốn. Nhưng khi tôi gói nó trong ARRAYFORMULA, nó vẫn chỉ xuất ra một hàng thay vì nhiều hàng:

=ARRAYFORMULA(
  QUERY(MaraRankData,
    "select J,I,H,G,F,E where 
      A='"&E3:E&"' and 
      B='"&B3:B&"' and 
      C="&C3:C&" and 
      D="&D3:D&"",
    0)
)

Google Sheets không đưa ra bất kỳ lỗi nào, vì vậy tôi không biết mình đang làm gì sai. Làm cách nào tôi có thể khiến ARRAYFORMULA hoạt động với QUERY của mình để tôi không phải lặp lại công thức trên mỗi hàng?


Để hỗ trợ nhận xét bằng rượu vang đỏ về việc gói công thức Truy vấn () bằng một Arrayformula. Không cần thiết phải bọc bất kỳ công thức nào đã trả về / tạo kết quả kiểu mảng. Tức là không áp dụng Arrayformula cho "Bộ lọc", Unique "," Transpose ", v.v.
Xzila

1
Ngoài ra, hầu hết thời gian bạn có thể sử dụng Truy vấn, công thức Bộ lọc sẽ hoạt động. Tôi cá là bạn có thể giải quyết vấn đề của mình dễ dàng hơn theo cách đó.
Xzila

@Xzila Nếu bạn có cách làm việc này với filter, xin vui lòng gửi câu trả lời: Tôi sẽ quan tâm đến một giải pháp như vậy.

2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)Phần đầu tiên chỉ là để sắp xếp lại các cột trong dấu ngoặc nhọn. Thứ hai là bởi vì A đến E có vẻ như là cột duy nhất quan trọng khi B nhìn vào chính nó, C nhìn vào chính nó, v.v ... Thực sự mặc dù một tập dữ liệu sẽ tốt và có lẽ giải thích thêm về vấn đề. Có lẽ tôi không hiểu.
Xzila

Câu trả lời:


10

Sự arrayformula(query(...))kết hợp không được hỗ trợ; không có khái niệm queryxử lý một mảng các mảng hoặc thực hiện một mảng các chuỗi truy vấn.

Bạn có hai tùy chọn: (a) lặp lại querytrên mỗi hàng; (b) sử dụng vlookupđể truy xuất các cột dữ liệu, như được giải thích dưới đây. Ví dụ:

=arrayformula(vlookup(E3:E, {A3:A, J3:J}, 2, false))

lấy một phần tử của E3: E tại một thời điểm, tìm phần tử này trong cột A và lấy phần tử tương ứng của cột J. Với cách tiếp cận này, bạn sẽ cần sáu vlookup riêng biệt để có được các cột J, I, H, G, F, E, nhưng bạn sẽ không cần một lệnh riêng cho mỗi hàng.

Một điều phức tạp là vlookupchỉ chấp nhận một khóa tìm kiếm và bạn muốn tìm kiếm theo 4 tham số,

A='"&E3&"' and 
B='"&B3&"' and 
C="&C3&" and 
D="&D3&

Điều này có thể được giải quyết bằng cách ghép chúng thành một khóa tìm kiếm: bạn có thể có một cột như Z,

=arrayformula(E3:E & "|" & B3:B & "|" & C3:C & "|" & D3:D)

nối bốn tham số tìm kiếm thành một khóa tìm kiếm được phân định bằng đường ống. Làm tương tự cho bảng được tìm kiếm, và sau đó so sánh các phím này bằng cách sử dụng vlookup.


3
Về câu lệnh đầu tiên, truy vấn Nesting bên trong mảng định dạng hoạt động cho đối số đầu tiên. Xem webapps.stackexchange.com/a/97658/88163
Rubén
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.