Apakah mungkin menggunakan rentang bernama dalam kueri spreadsheet Google sehingga referensi kolom tetap terbaru?

9

Menggunakan Google Spreadsheets, Anda dapat menulis kueri . Namun, jika Anda memiliki huruf kolom dalam tanda kutip, maka tidak diperbarui sebagai perubahan urutan kolom.

Apakah ada cara untuk menulis kueri ini sehingga tidak perlu diperbarui setiap kali kolom ditambahkan atau dihapus?

Apakah mungkin menggunakan rentang bernama dalam kueri untuk mengatasi masalah ini?

Berikut ini sebuah contoh: Jika Anda menambahkan kolom setelah 'F', maka kolom 'G' akan didorong ke 'H' dan arti dari rumus berubah.

= Permintaan (B: J, "pilih grup avg (J) oleh G")

Pertanyaan-pertanyaan Terkait

Pertanyaan ini tidak sama dengan Menggunakan Kueri dengan tajuk kolom alih-alih huruf kolom karena yang ini difokuskan pada penggunaan rentang bernama.

Alex B
sumber

Jawaban:

5

Ini agak rumit, tetapi mungkin dengan Range penolong dan beberapa gabungan.

Apa yang perlu dilakukan:

  1. Buat rentang bernama, COLS, untuk membawa huruf kolom seperti ini:

    A  
    B  
    C  
    D  
    E  
    ...
    

    Lakukan dengan cara vertikal seperti yang ditunjukkan.

  2. Pasang string kueri seperti ini:

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    
Oneide
sumber
1
Kisaran bernama akan bekerja baik dalam bentuk vertikal maupun horizontal.
Rubén
@ Rubén mungkin benar.
Oneide
3

Apakah ada cara untuk menulis kueri ini sehingga tidak perlu diperbarui setiap kali kolom ditambahkan atau dihapus?

Apakah mungkin menggunakan rentang bernama dalam kueri untuk mengatasi masalah ini?

Ya, Anda bisa menggunakan rentang bernama alih-alih tajuk kolom bawaan, tetapi ide dasarnya sama dengan jawaban lain, pertanyaan serupa lainnya di situs ini menyarankan: spreadsheet harus disetel untuk membuat string SQL dinamis .

Katakanlah itu Jdan Gsesuai dengan rentang yang disebutkan Gradesdan Classmasing - masing.


Pendekatan berikut hanya berfungsi ketika kolom berada di antara kolom A dan Z


CELL("address",Grades)akan kembali "$J:$J". Untuk mendapatkan referensi kolom, gunakan MID(CELL("address",Grades),2,1)untuk mendapatkan "J". Rumus terakhirnya adalah

= QUERY (B: J, "SELECT AVG (" &
MID (CELL ("address", Grades), 2,1) &
") KELOMPOK OLEH" &
MID (CELL ("address", Class), 2,1))


Pendekatan berikut berfungsi untuk semua kasus


COLUMN(Grades)akan mengembalikan integer (sejumlah bentuk 1,2,3 dll.) Untuk menyederhanakan rumus untuk membuat argumen pernyataan SQL saya sarankan untuk memaksa SQL untuk menggunakan referensi kolom dari bentuk COL1, COL2, dll. dengan menggunakan array notasi ( {B:J}). Rumus terakhirnya adalah

= QUERY ({B: J}, "SELECT AVG (Col" & COLUMN (Grade) -1 & ") GROUP BY Col" & COLUMN (Kelas) -1)

Lembar Kerja Demo

Referensi

Menggunakan array di Google Sheets - Bantuan editor Google Documents

Rubén
sumber
1

Jawaban Ruben tidak menyelesaikan masalah untuk semua kasus karena MID(CELL("address",Grades),2,1)gagal jika Gradesrentang dipindahkan ke kolom dua huruf seperti $AA:$AA.

Dalam hal ini, formula MID(CELL("address",Grades),2,2)diperlukan. Untuk rentang bernama rentang atau batas $Z:$AArentang, rumus ini menjadi bermasalah.

Formula REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")memecahkan masalah untuk kasus umum, tapi saya sangat mempertanyakan efisiensi CPU-nya ketika digunakan di seluruh spreadsheet besar.

Stobber
sumber
Dalam jawaban saya ada dua pendekatan tetapi jawaban ini hanya mengkritik salah satunya. Pendekatan kedua harus bekerja untuk semua kasus.
Rubén
Saya tidak berpikir ini akan bekerja untuk rentang bernama yang ada di lembar yang berbeda. Bertanya-tanya jika +2 tahun sejak itu, jika ada solusi yang lebih baik untuk ini ... seperti hanya dapat mereferensikan rentang bernama darn dalam kueri itu sendiri
mike01010
0

Saya menemukan halaman ini di infoinspired.com yang menjelaskan salah satu cara melakukannya. Saya mengujinya persis seperti pada contoh yang dia berikan dan berhasil. Pengaturan:

      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

Penjelasannya tentang F1: Formula ADDRESS yang mencakup fungsi ROW dan COLUMN mengembalikan alamat sel B1. Fungsi LEFT mengekstrak huruf pertama yang merupakan judul kolom dari itu.

--- Klik pada sel F1 dan kemudian pergi ke menu Data> Rentang yang dinamai dan beri nama rentang "Usia" (tanpa tanda kutip)

Sekarang Anda dapat merumuskan permintaan Anda sebagai: =QUERY(A:B,"Select "&Age)

Dia punya contoh yang lebih rumit di halamannya yang akan saya uji sekarang, tapi saya didorong bahwa contoh pertama berhasil!

Sunting - maaf jika ini persis seperti yang diajukan orang lain dengan jawaban mereka. Saya baru saja menemukan contoh ini sebening kristal dan dapat mengetahuinya. Kupikir itu bisa membantu orang lain dengan pertanyaan yang sama.

Lise
sumber