ฉันจะเชื่อมโยงเซลล์ใน Google Spreadsheets กับเซลล์ในเอกสารอื่นได้อย่างไร


178

ฉันมีสเปรดชีตรายเดือนที่ต้องอาศัยตัวเลขจากเดือนก่อนหน้า ฉันต้องการนำเข้าค่าเหล่านี้แบบไดนามิกแทนที่จะตัดและวางค่าเหล่านั้น เป็นไปได้ไหม ฉันต้องทำอย่างไร?


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

คำตอบ:


183

IMPORTRANGE() ดูเหมือนจะเป็นฟังก์ชั่นที่คุณต้องการ

จากรายการฟังก์ชั่นสเปรดชีตของ Google :

Google Spreadsheets ให้คุณอ้างอิงสมุดงานอื่นในสเปรดชีตที่คุณกำลังแก้ไขโดยใช้ฟังก์ชัน ImportRange ImportRange ให้คุณดึงค่าเซลล์หนึ่งค่าขึ้นไปจากสเปรดชีตหนึ่งไปยังอีกค่าหนึ่ง หากต้องการสร้างสูตร ImportRange ของคุณเองให้ป้อน = importRange (สเปรดชีต - คีย์ช่วง) สำหรับภาษาที่ใช้เครื่องหมายจุลภาคเพื่อคั่นทศนิยมให้ใช้เครื่องหมายอัฒภาคแทนเครื่องหมายจุลภาคเพื่อคั่นอาร์กิวเมนต์ในสูตรของคุณ

Spreadsheet-key คือ STRING ซึ่งเป็นค่าคีย์จาก URL สเปรดชีต

Range คือ STRING ที่แสดงช่วงของเซลล์ที่คุณต้องการนำเข้ารวมถึงชื่อแผ่นงาน (ค่าเริ่มต้นเป็นชีตแรก) คุณสามารถใช้ชื่อช่วงได้หากต้องการ

เนื่องจากอาร์กิวเมนต์สองตัวนั้นเป็น STRING คุณจะต้องใส่เครื่องหมายอัญประกาศหรืออ้างอิงเซลล์ที่มีค่าสตริง

ตัวอย่างเช่น:

= importrange ("abcd123abcd123", "sheet1! A1: C10") "abcd123abcd123" คือค่าในแอตทริบิวต์ "key =" ใน URL ของสเปรดชีตเป้าหมายและ "sheet1! A1: C10" เป็นช่วงที่ต้องการ นำเข้า

= importrange (A1, B1) เซลล์ A1 มีสตริง ABCD123ABCD123 และเซลล์ B1 มีแผ่นงาน 1! A1: C10

หมายเหตุ: เพื่อที่จะใช้ ImportRange คุณจะต้องเพิ่มเป็นตัวแสดงหรือผู้ทำงานร่วมกันในสเปรดชีตที่ ImportRange ดึงข้อมูลอยู่ มิฉะนั้นคุณจะได้รับข้อผิดพลาดนี้: "ข้อผิดพลาด #REF!: ไม่พบคีย์สเปรดชีตชื่อแผ่นงานหรือช่วงเซลล์ที่ร้องขอ"

"คีย์" คือแน่นอนสตริงใน URL สำหรับสเปรดชีตที่ตรงกับkey=พารามิเตอร์

ฉันเพิ่งทดสอบโดยสร้างสเปรดชีตสองตัว ในเซลล์ A1 ตัวแรกฉันใส่สตริง ในเซลล์ A1 ของวินาทีฉันใส่=importRange("tgR2P4UTz_KT0Lc270Ijb_A","A1")แล้วมันจะแสดงสตริงจากสเปรดชีตแรก (รหัสของคุณจะแตกต่างอย่างชัดเจน)

(รูปแบบของฟังก์ชั่นอาจขึ้นอยู่กับสถานที่ของคุณในประเทศฝรั่งเศสสูตรไม่ถูกต้องด้วยเครื่องหมายจุลภาคเพื่อให้คุณจะต้องแทนที่ด้วยลำไส้ใหญ่กึ่ง:. =importRange("tgR2P4UTz_KT0Lc270Ijb_A";"A1"))

หมายเหตุ:

  1. ขณะนี้ Google กำหนดขีด จำกัด อย่างหนัก 50 "สูตรอ้างอิงข้ามสมุดงาน" ต่อสเปรดชีต ที่มา: Google เอกสารชีตและสไลด์ขนาด จำกัด (h / t JJ Rohrer )

  2. สเปรดชีต Google "ใหม่" (เร็ว ๆ นี้จะเป็นมาตรฐาน) จะลบสูตรอ้างอิงข้ามเวิร์กบุ๊ก 50 ขีด จำกัด 50 "( การสนับสนุนของ Google ) (h / t Jacob Jan Tuinstra )

  3. ใน Google ชีต "ใหม่" คุณยังใช้ URL ทั้งหมดเป็นกุญแจ ( ฝ่ายสนับสนุนของ Google ) (h / t  Punchlinern )


3
@Al: ใช่! แค่นั้นแหละ! ขอบคุณ
Jeff Yates

+1 โอ้โห! ฉันไม่ทราบว่ามีรุ่นในบรรทัด ตัวเลือกอื่นคือใช้สคริปต์ของ Google Apps สร้างฟังก์ชั่นที่ใช้ SpreadsheetApp.openById ([ID]) getRange () และตั้งค่าช่วงท้องถิ่นด้วย
Evan Plaice

3
อาจเป็นเรื่องน่าสังเกตว่าคุณจะถูก จำกัด ที่ 50 ของสิ่งเหล่านี้ (ต่อสเปรดชีตหรือไม่) (ขีด จำกัด ของ Google อย่างหนัก): support.google.com/drive/answer/37603?hl=th
JJ Rohrer

4
ในสเปรดชีต Google ใหม่ (เร็ว ๆ นี้จะเป็นมาตรฐาน) ขีด จำกัด ที่ 50 ได้ถูกลบออก: support.google.com/drive/answer/3093340?hl=th
Jacob Jan Tuinstra

4
นอกจากนี้ใน Google ชีตใหม่คุณใช้URL ทั้งหมดเป็นหลัก นอกจากนี้คุณจะได้รับพร้อมท์ให้อนุญาตการเข้าถึงแผ่นงานที่ร้องขอเมื่อคุณเข้าใช้งานฟังก์ชันเป็นครั้งแรก
Punchlinern

29

FYI หากคุณต้องการอ้างอิงชีตอื่นภายในสเปรดชีตอื่นไม่ควรอ้างชื่อชีตอีกครั้ง:

ใช้

=importRange("tgR2P4UTz_KT0Lc270Ijb_A","Sheet Name!A1:A10")

แทน

=importRange("tgR2P4UTz_KT0Lc270Ijb_A","'Sheet Name'!A1:A10")


6
ขอบคุณ คุณควรเพิ่มนี่เป็นความคิดเห็นในคำตอบอื่น ๆ หรือแม้แต่เพียงแค่แก้ไขคำตอบนั้น
studgeek

10

ในอินเทอร์เฟซใหม่คุณควรจะสามารถพิมพ์=ในเซลล์จากนั้นไปที่ชีทอื่นแล้วเลือกเซลล์ที่คุณต้องการ หากคุณต้องการทำด้วยตนเองหรือใช้อินเทอร์เฟซเก่าคุณสามารถทำได้=Sheet1!A1โดยที่Sheet1ชื่อของแผ่นงานและA1เป็นเซลล์บนแผ่นงานที่คุณสนใจ สิ่งนี้เหมือนกับ Microsoft Excel


6
หากชื่อแผ่นมีช่องว่างภายในให้ใช้ 'แผ่นงานนี้'! A1
akira

12
สิ่งที่เกี่ยวกับจากเอกสารที่แตกต่างอย่างสิ้นเชิงขณะที่ฉันถามคำถาม
Jeff Yates

@jeff ขออภัย; คุณไม่ได้พูดถึง "เอกสาร" ในร่างกายและด้วยเหตุผลบางอย่างในหัวของฉันฉันคิดว่า "แผ่นงาน" เท่าที่ผมรู้ว่าคุณไม่สามารถเชื่อมโยงแบบไดนามิกไปยังอีกเอกสาร แต่คุณสามารถใช้หลาย ๆ แผ่นได้มากกว่าที่จะเป็นเอกสารหลาย ๆ จุดซึ่งคุณสามารถทำสิ่งที่ฉันแนะนำได้ นี่คือวิธีที่ฉันใช้การเงินรายเดือนของตัวเองด้วยเหตุผลนี้
Benjamin Pollack

ไม่เป็นไร :) ฉันรู้ว่ามีวิธีที่จะทำอย่างที่ฉันทำเอง แต่ฉันลืมไปแล้วและฉันไม่สามารถหาแผ่นที่ฉันทำมันได้
Jeff Yates

สิ่งนี้ไม่ตอบคำถามที่โพสต์ - มันกำลังพูดถึงแผ่นงานอื่น ๆ ในเอกสารเดียวกัน
เบรนแดน

4

ฉันพบไวยากรณ์นี้โดยใช้ส่วนแทรก -> กำหนดช่วงใหม่

ช่วงสำหรับการอ้างอิงอื่น ๆ ของ SPREADSHEET:

คอลัมน์ A ทั้งหมด: 'สเปรดชีตที่มีช่องว่างในชื่อ'! A: A

คอลัมน์ B ทั้งหมด: 'สเปรดชีตที่มีช่องว่างในชื่อ'! B: B

เป็นต้น

จากนั้นคุณสามารถใช้มันเป็น:

=COUNTIF('First Page'!B:B, "valueToMatch")

1
เป็นไปได้ไหมที่จะอ้างอิงนอกสเปรดชีต
จาค็อบ ม.ค. Tuinstra

@JacobJanTuinstra คุณหมายถึง 'นอก' สเปรดชีต?
Tom Roggero

6
Well, IMPORTRANGEฟังก์ชั่นสามารถนำเข้าข้อมูลจากอีกสเปรดชีต ช่วงการตั้งค่ามีความหมาย (เป็นไปได้) ภายในสเปรดชีตเท่านั้น นั่นคือสิ่งที่ฉันหมายถึงภายนอก
จาค็อบ ม.ค. Tuinstra

สิ่งนี้ไม่ตอบคำถามที่โพสต์ - อธิบายถึงวิธีอ้างอิงถึงชีตอื่นในเอกสารเดียวกันเท่านั้น
เบรนแดน

@brendan ใช้IMPORTRANGEเป็น Jacob กล่าวว่า
Tom Roggero

2

นี่คือวิธีที่ฉันทำ (ปรับใช้ 'importrange ()') อีกครั้ง:

  • เปิดเครื่องมือแก้ไขสคริปต์ ("เครื่องมือ" -> "สคริปต์" -> "เครื่องมือแก้ไขสคริปต์")
  • ให้ฟังก์ชั่นเช่นนี้ (โดยไม่มีการตรวจสอบใด ๆ สิ่งนี้จะต้องได้รับการปรับปรุง แต่คุณจะได้รับแนวคิดทั่วไป):
ฟังก์ชัน REMOTEDATA (inKey, inRange) {

  var outData;  
  var ss = SpreadsheetApp.openById (inKey);

  ถ้า (ss) {
     outData = ss.getRange (inRange) .getValues ​​();
  }

  คืน outData;
}
  • ใช้สูตรนี้เช่นนี้ในสเปรดชีตของคุณ:
= SUM (REMOTEDATA ("key", "SheetName! A1: A10"))

"key" เป็นกุญแจสำคัญของเอกสารคุณจะพบได้ในพารามิเตอร์ "key = xyz" ของ URL เอกสาร

เอกสารสำหรับ ' บริการสเปรดชีต ' ให้ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อ


4
อะไรจะได้ประโยชน์จากการใช้สิ่งนี้ด้วยตัวคุณเองแทนที่จะใช้ฟังก์ชั่นที่มีอยู่?
Jeff Yates

1
@Jeff Yates: ไม่มีฉันเพิ่งนำไปใช้โดยไม่ทราบว่านำเข้า () กีฬาคุณรู้หรือไม่ ทั้งหมดในทางของ just- เพราะฉันสามารถ :)
akira

1
น่าเสียดายที่ฟังก์ชั่นที่กำหนดเองของสเปรดชีตไม่สามารถเปิดสเปรดชีตอื่น ๆ ได้อีกต่อไปโดยใช้SpreadsheetApp.openById()หรือSpreadsheetApp.openByUrl()-> developers.google.com/apps-script/guides/sheets/…
Francesco Vadicamo

-2

ฉันทำได้ง่ายๆด้วยการใช้ Query ตัวอย่างเช่นฉันมี 2 แผ่น ABC และ XYZ และฉันต้องการนำเข้าช่วงจาก A1 ถึง C30 จาก Abc ไปยัง XYZ คลิกเซลล์ที่คุณต้องการให้ช่วงปรากฏและเขียนสิ่งนี้:

=QUERY(ABC!A1:C30)

หมายเหตุ: หากชื่อแผ่นงานของคุณมีช่องว่างแน่นอนว่าคุณเขียนสิ่งนี้:

=QUERY('ABC 1'!A1:C30)


7
สหกรณ์ถามว่าจะนำเข้าเซลล์จากที่อื่นเอกสาร สามารถQUERYทำเช่นนั้น?
Vidar S. Ramdal

4
@ VidarS.Ramdal มันสามารถทำได้ แต่มันต้องการimportrange("abcd123abcd123", "sheet1!A1:C10")เช่น=query(importrange("abcd123abcd123", "sheet1!A1:C10"));-)
Fuhrmanator
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.