Có thể sử dụng phạm vi được đặt tên trong các truy vấn bảng tính của Google để các tham chiếu cột được cập nhật không?


9

Sử dụng Bảng tính Google, bạn có thể viết truy vấn . Tuy nhiên, nếu bạn có các ký tự cột trong dấu ngoặc kép thì chúng không được cập nhật khi thay đổi thứ tự cột.

Có cách nào để viết các truy vấn này để chúng không cần được cập nhật mỗi khi một cột được thêm hoặc xóa không?

Có thể sử dụng phạm vi được đặt tên trong các truy vấn để giải quyết vấn đề này?

Đây là một ví dụ: Nếu bạn thêm một cột sau 'F', thì cột 'G' sẽ được đẩy thành 'H' và ý nghĩa của công thức thay đổi.

= Truy vấn (B: J, "chọn nhóm avg (J) theo G")

Câu hỏi liên quan

Câu hỏi này không giống như Sử dụng Truy vấn với các tiêu đề cột thay vì các chữ cái cột vì câu hỏi này tập trung vào việc sử dụng các phạm vi được đặt tên.

Câu trả lời:


5

Đó là một loại khó khăn, nhưng có thể với Phạm vi người trợ giúp và một số kết nối.

Những gì cần phải được thực hiện:

  1. Tạo một phạm vi được đặt tên, COLS, để mang các chữ cái cột như thế này:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Làm theo cách dọc như hình.

  2. Lắp ráp chuỗi truy vấn như thế này:

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    

1
Phạm vi được đặt tên sẽ hoạt động cả trong hình dạng dọc hoặc ngang.
Rubén

@ Rubén có lẽ đúng.
Oneide

3

Có cách nào để viết các truy vấn này để chúng không cần được cập nhật mỗi khi một cột được thêm hoặc xóa không?

Có thể sử dụng phạm vi được đặt tên trong các truy vấn để giải quyết vấn đề này?

Có, bạn có thể sử dụng các phạm vi được đặt tên thay vì các tiêu đề cột tích hợp nhưng ý tưởng cơ bản giống như các câu trả lời khác cho câu hỏi tương tự khác trong trang web này được đề xuất: bảng tính nên được đặt để xây dựng chuỗi SQL động .

Hãy nói rằng JGtương ứng với phạm vi được đặt tên GradesClasstương ứng.


Cách tiếp cận sau chỉ hoạt động khi các cột nằm giữa các cột A và Z


CELL("address",Grades)sẽ trở lại "$J:$J". Để có được tham chiếu cột sử dụng MID(CELL("address",Grades),2,1)để có được "J". Công thức cuối cùng là

= QUERY (B: J, "CHỌN AVG (" &
TRUNG (CELL ("địa chỉ", Lớp), 2.1) &
") NHÓM THEO" &
TRUNG (CELL ("địa chỉ", Lớp), 2.1))


Cách tiếp cận sau đây hoạt động cho tất cả các trường hợp


COLUMN(Grades)sẽ trả về một số nguyên (một số dạng 1,2,3, v.v.) Để đơn giản hóa công thức tạo đối số câu lệnh SQL tôi đề nghị buộc SQL sử dụng các tham chiếu cột có dạng COL1, COL2, v.v. bằng cách sử dụng mảng ký hiệu ( {B:J}). Công thức cuối cùng là

= QUERY ({B: J}, "CHỌN AVG (Col" & COLUMN (Lớp) -1 & ") NHÓM THEO Col" & COLUMN (Lớp) -1)

Bảng tính demo

Người giới thiệu

Sử dụng mảng trong Google Sheets - Trình chỉnh sửa Google Docs Trợ giúp


1

Câu trả lời của Ruben không giải quyết được vấn đề cho tất cả các trường hợp vì MID(CELL("address",Grades),2,1)không thành công nếu Gradesphạm vi được chuyển sang cột hai chữ cái như thế nào $AA:$AA.

Trong trường hợp đó, công thức MID(CELL("address",Grades),2,2)là cần thiết. Đối với các phạm vi được đặt tên kéo dài hoặc tiếp giáp $Z:$AAphạm vi, công thức này trở nên có vấn đề.

Công thức REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")giải quyết vấn đề cho trường hợp chung, nhưng tôi đặt câu hỏi mạnh mẽ về hiệu quả CPU của nó khi được sử dụng trên một bảng tính lớn.


Trong câu trả lời của tôi có hai cách tiếp cận nhưng câu trả lời này chỉ phê phán một trong số đó. Cách tiếp cận thứ hai nên làm việc cho tất cả các trường hợp.
Rubén

Tôi không nghĩ rằng điều này sẽ làm việc cho các phạm vi được đặt tên trên các tờ khác nhau. Tự hỏi nếu +2 năm kể từ khi, nếu có giải pháp tốt hơn cho việc này ... chẳng hạn như chỉ có thể tham chiếu các phạm vi được đặt tên trong chính truy vấn
mike01010

0

Tôi đã xem qua trang này tại infoinspired.com giải thích một cách làm việc đó. Tôi đã kiểm tra nó chính xác như trong ví dụ anh ấy đưa ra và nó đã hoạt động. Các thiết lập:

      A        B        F                                     G
 1  names     Age   =left(address(row(B1),column(B1),4))   =QUERY(A:B,"Select "&Age)
 2  joey      32
 3  nicole    26
 4  sally     66

Giải thích của ông về F1: Công thức ADDRESS bao gồm các hàm ROW và COLUMN trả về địa chỉ ô của B1. Hàm LEFT trích xuất chữ cái đầu tiên là tiêu đề cột từ nó.

--- Nhấp vào ô F1 và sau đó chuyển đến trình đơn Dữ liệu> Phạm vi được đặt tên và đặt tên cho phạm vi "Tuổi" (không có dấu ngoặc kép)

Bây giờ bạn có thể tạo truy vấn của mình dưới dạng: =QUERY(A:B,"Select "&Age)

Anh ta có nhiều ví dụ phức tạp hơn trong trang của mình mà tôi sắp kiểm tra, nhưng tôi khuyến khích rằng ví dụ đầu tiên đã hoạt động!

Chỉnh sửa - xin lỗi nếu đây là chính xác những gì người khác đã đề xuất với câu trả lời của họ. Tôi chỉ tìm thấy ví dụ này rõ ràng và có thể tìm ra nó. Nghĩ rằng nó có thể giúp những người khác có cùng câu hỏi.

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.