เป็นไปได้หรือไม่ที่จะใช้ช่วงที่ตั้งชื่อไว้ในคิวรีสเปรดชีตของ Google เพื่อให้คอลัมน์อ้างอิงได้รับการอัปเดตอยู่เสมอ


9

การใช้ Google Spreadsheets คุณสามารถเขียนคำสั่ง อย่างไรก็ตามหากคุณมีตัวอักษรคอลัมน์ในเครื่องหมายคำพูดจะไม่มีการอัปเดตเมื่อมีการเปลี่ยนแปลงลำดับของคอลัมน์

มีวิธีเขียนแบบสอบถามเหล่านี้หรือไม่ดังนั้นจึงไม่จำเป็นต้องอัปเดตทุกครั้งที่มีการเพิ่มหรือลบคอลัมน์?

เป็นไปได้หรือไม่ที่จะใช้ช่วงที่ตั้งชื่อไว้ในแบบสอบถามเพื่อแก้ไขปัญหานี้

นี่คือตัวอย่าง: หากคุณเพิ่มคอลัมน์หลัง 'F' คอลัมน์ 'G' จะถูกผลักไปที่ 'H' และความหมายของสูตรจะเปลี่ยนไป

= Query (B: J, "select avg (J) กลุ่มโดย G")

คำถามที่เกี่ยวข้อง

คำถามนี้ไม่เหมือนกับการใช้ Query กับส่วนหัวคอลัมน์แทนที่จะเป็นตัวอักษรคอลัมน์เพราะคำถามนี้จะเน้นไปที่การใช้ช่วงที่ตั้งชื่อไว้

คำตอบ:


5

มันเป็นเรื่องยาก แต่ก็เป็นไปได้ด้วย Range Helper และการต่อเรียง

สิ่งที่ต้องทำ:

  1. สร้างช่วงที่มีชื่อ COLS เพื่อพกตัวอักษรคอลัมน์ดังนี้:

    A  
    B  
    C  
    D  
    E  
    ...
    

    ทำในแนวตั้งตามที่แสดง

  2. รวบรวมสตริงการสืบค้นดังนี้:

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

1
ช่วงที่ตั้งชื่อจะใช้ได้ทั้งในแนวตั้งหรือแนวนอน
Rubén

@ Rubénอาจถูกต้อง
Oneide

3

มีวิธีเขียนแบบสอบถามเหล่านี้หรือไม่ดังนั้นจึงไม่จำเป็นต้องอัปเดตทุกครั้งที่มีการเพิ่มหรือลบคอลัมน์?

เป็นไปได้หรือไม่ที่จะใช้ช่วงที่ตั้งชื่อไว้ในแบบสอบถามเพื่อแก้ไขปัญหานี้

ใช่คุณสามารถใช้ช่วงที่มีชื่อแทนหัวตัวในคอลัมน์ แต่ความคิดพื้นฐานเป็นเช่นเดียวกับคำตอบอื่น ๆ ในการนี้คำถามที่คล้ายกันอื่น ๆ ในเว็บไซต์นี้แนะนำ: สเปรดชีตควรจะตั้งในการสร้างสตริง SQL แบบไดนามิก

อนุญาตบอกว่าJและGสอดคล้องกับช่วงที่มีชื่อGradesและClassตามลำดับ


วิธีการดังต่อไปนี้ใช้งานได้เฉพาะเมื่อคอลัมน์อยู่ระหว่างคอลัมน์ A และ Z


CELL("address",Grades)"$J:$J"จะกลับมา ที่จะได้รับการอ้างอิงใช้คอลัมน์ที่จะได้รับMID(CELL("address",Grades),2,1) "J"สูตรสุดท้ายคือ

= QUERY (B: J, "SELECT AVG (" &
MID (CELL ( "ที่อยู่" เกรด), 2,1) และ
") จัดกลุ่มตาม" &
MID (CELL ( "ที่อยู่" ชั้น), 2,1))


วิธีการต่อไปนี้ใช้ได้กับทุกกรณี


COLUMN(Grades)จะส่งกลับจำนวนเต็ม (จำนวนของแบบฟอร์ม 1,2,3 ฯลฯ ) เพื่อให้สูตรเพื่อสร้างอาร์กิวเมนต์คำสั่ง SQL ให้ง่ายขึ้นฉันแนะนำให้บังคับให้ SQL ใช้การอ้างอิงคอลัมน์ของแบบฟอร์ม COL1, COL2 และอื่น ๆ โดยใช้อาร์เรย์ สัญกรณ์ ( {B:J}) สูตรสุดท้ายคือ

= QUERY ({B: J}, "เลือก AVG (Col" & COLUMN (เกรด) -1 & ") จัดกลุ่มตาม Col" & คอลัมน์ (Class) -1)

สเปรดชีตสาธิต

อ้างอิง

การใช้อาร์เรย์ใน Google ชีต - Google Docs editor ความช่วยเหลือ


1

คำตอบของรูเบนไม่ได้แก้ปัญหาที่เกิดขึ้นทุกกรณีเพราะMID(CELL("address",Grades),2,1)ล้มเหลวหากช่วงถูกย้ายไปยังคอลัมน์คู่ตัวอักษรเช่นGrades$AA:$AA

ในกรณีMID(CELL("address",Grades),2,2)นั้นจำเป็นต้องใช้สูตร สำหรับช่วงที่มีชื่อที่ขยายหรือปิด$Z:$AAช่วงสูตรนี้จะมีปัญหา

สูตรREGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")แก้ปัญหาสำหรับกรณีทั่วไป แต่ฉันตั้งคำถามอย่างมากกับประสิทธิภาพของ CPU เมื่อใช้กับสเปรดชีตขนาดใหญ่


ในคำตอบของฉันมีสองวิธี แต่คำตอบนี้เป็นการวิพากษ์วิจารณ์อย่างใดอย่างหนึ่งเท่านั้น วิธีที่สองควรใช้กับทุกกรณี
Rubén

ฉันไม่คิดว่าจะใช้งานได้กับช่วงที่ตั้งชื่อซึ่งอยู่บนแผ่นงานที่แตกต่างกัน สงสัยว่าจะเป็น +2 ปีหรือไม่หากมีวิธีแก้ปัญหาที่ดีกว่านี้ ... เช่นสามารถอ้างอิงช่วงที่มีชื่อยี้
อี้

0

ฉันเจอหน้านี้ที่ infoinspired.com ซึ่งอธิบายวิธีหนึ่งในการทำเช่นนั้น ฉันทดสอบตรงตามตัวอย่างที่เขาให้มาและมันใช้ได้ การตั้งค่า:

      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

คำอธิบายของเขาเกี่ยวกับ F1: สูตร ADDRESS ซึ่งรวมถึงฟังก์ชัน ROW และ COLUMN จะส่งคืนที่อยู่เซลล์ของ B1 ฟังก์ชัน LEFT จะแยกตัวอักษรตัวแรกที่เป็นส่วนหัวของคอลัมน์

--- คลิกที่เซลล์ F1 จากนั้นไปที่เมนูข้อมูล> ช่วงที่มีชื่อและตั้งชื่อช่วง "อายุ" (โดยไม่ใส่เครื่องหมายอัญประกาศ)

ตอนนี้คุณสามารถกำหนดคิวรีของคุณเป็น: =QUERY(A:B,"Select "&Age)

เขามีตัวอย่างที่ซับซ้อนมากขึ้นในหน้าของเขาที่ฉันกำลังจะทำการทดสอบในขณะนี้ แต่ฉันสนับสนุนให้ตัวอย่างแรกใช้งานได้!

แก้ไข - ขออภัยหากนี่เป็นสิ่งที่คนอื่น ๆ เสนอมาพร้อมกับคำตอบของพวกเขา ฉันเพิ่งพบตัวอย่างนี้ใสและสามารถคิดออก คิดว่าอาจช่วยผู้อื่นด้วยคำถามเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.