จะป้องกันการตัดและวางข้อมูลที่อ้างอิงการเปลี่ยนแปลงในสูตรได้อย่างไร?


49

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

ฉันต้องการที่จะตัดและวางข้อมูลของฉันโดยไม่ต้องเปลี่ยนสูตร

ฉันเคยทำสิ่งที่น่าเกลียดในอดีตที่เกี่ยวข้องกับINDIRECT()ฟังก์ชั่นเพื่อแก้ไขคุณลักษณะนี้ แต่ดูเหมือนว่าจะต้องมีวิธีที่ง่ายกว่า ข้อเสนอแนะใด ๆ


2
ตลก ... ฉันไม่เคยคิดว่าคุณสมบัตินี้จะเป็นข้อผิดพลาด มันทำงานได้ดีใน Excel มานานหลายทศวรรษ
mhoran_psprep

1
คุณหาเวลาตรวจสอบคำตอบที่ให้มาหรือไม่? บางทีคุณอาจทำเครื่องหมายหนึ่งในนั้นเป็นคำตอบที่ดีที่สุด
จาค็อบ ม.ค. Tuinstra

1
ตอบคำถามต่าง ๆ มากมายด้านล่าง คำถามนี้จะหมดไปได้ไหม ฉันคิดว่าตัวอย่างของปัญหาของคุณจะเป็นเช่นนี้: เซลล์ A2 มีสูตรเช่น "= B1 + 5" B1 มี "42" A2 แสดง "47" ตามที่คาดไว้ แต่คุณได้ตระหนักว่า B1 ไม่ควรมี "42" อยู่ในนั้น C1 ควรมี "42" และ B1 ควรมี "58" คุณคลิกที่ B1 "ตัด" คลิกที่ C1 วาง B1 ว่างเปล่า (คาดว่า), C1 คือตอนนี้ "42" (คาดว่า) แต่ A2 ยังคงแสดง "47" เนื่องจาก A2 ได้อัปเดตโดยอัตโนมัติเป็น "= C1 + 5" เพื่อติดตามการตัดและวาง (ไม่คาดคิด) สิ่งที่คุณต้องการคือ A2 ที่จะอยู่ "= B1 + 5" ฉันถูกไหม?
cesoid

คำตอบ:


22

=$A$1สัญกรณ์ยังสามารถเคลื่อนย้ายได้โดยอัตโนมัติหากค่าใน (พูด) A1มีการเปลี่ยนแปลง

ทางออกเดียวที่ surefire คือการใส่การอ้างอิงของคุณทั้งหมดในINDIRECTเช่นหรือแม้เพียงแค่=INDIRECT("$A$1")=INDIRECT("A1")

ความยากในการแก้ปัญหาอย่างใดอย่างหนึ่งเหล่านี้คือที่ที่คุณมีสูตรเดียวกันหลายสูตรเช่น

=A1
=A2
=A3
...
=A99

โดยปกติคุณจะต้องกรอกข้อมูลแรก=A1แล้วคัดลอกและวาง (หรือลากลงโดยใช้การป้อนอัตโนมัติ) เพื่อกรอกสูตรติดต่อกันโดยอัตโนมัติ อย่างไรก็ตามหากสูตรแรกนั้นใช้=$A$1หรือไม่=INDIRECT("A1")ก็เคล็ดลับนี้ใช้ไม่ได้ (อันที่จริงนี่คือสิ่งที่$มีไว้สำหรับ - เพื่อป้องกันไม่ให้มีการเปลี่ยนแปลงโดยอัตโนมัติ)

หากคุณมีสูตรติดต่อกันหลายวิธีทางออกหนึ่งคือ:

  1. สร้างสูตรตามปกติ (ใช้แบบธรรมดา=A1และป้อนอัตโนมัติ)
  2. ใช้แทนที่โต้ตอบ ( Ctrl+ H) และการใช้ "การค้นหาในสูตร" เพื่อห่อทั้งหมด=A1, =A2... =A99ใน=INDIRECT("A1")ฯลฯ หมายเหตุคุณมีตัวเลือกที่จะใช้การแสดงออกปกติเมื่อทำหาและแทนที่

อัปเดตคำตอบเพื่อแนะนำการใช้งานการค้นหาและแทนที่ที่ดีขึ้นในสเปรดชีต Google ใหม่ซึ่งสามารถทำการแทนที่ในสูตรและใช้ regexps
Motti Strom

1
คุณสามารถยกตัวอย่างว่าพารามิเตอร์การค้นหา / แทนที่จะห่อการอ้างอิงเซลล์ทั้งหมดในสูตรด้วย INDIRECT หรือไม่
Michael

คุณสามารถใช้ INDIRECT ร่วมกับ ROW () เพื่อให้มีสูตรที่ทำงานกับแถวปัจจุบัน ตัวอย่างเช่น: = A1 + B1 กลายเป็น = INDIRECT ("A" & ROW ()) + INDIRECT ("B" & ROW ())
Evil Pigeon

31

จากฟอรัม Google เอกสาร :

เลือกช่วงของเซลล์ จากนั้นใช้Ctrl+ C(คัดลอกสิ่งนี้ควรใส่เซลล์และสูตรในบัฟเฟอร์การวาง)

ทีนี้ลาก (โฮเวอร์เหนือขอบของส่วนที่เลือกจนกระทั่งเคอร์เซอร์ของเมาส์เปลี่ยนเป็นมือตอนนี้คุณสามารถลาก) เซลล์ที่เลือกไปยังตำแหน่งใหม่

กลับไปที่ตำแหน่งเดิมด้านบนซ้ายของเซลล์ที่คัดลอกและใช้Ctrl+ V(วาง)

ตอนนี้คุณควรมีสูตรสองชุดทั้งที่อ้างอิงถึงเซลล์เดียวกัน


6
นี่เป็นคำตอบเดียวที่เก็บรักษาสูตร
amcnabb

3
เห็นด้วย - นี่เป็นคำตอบเดียวที่ถูกต้อง
stevemidgley

1
ขอบคุณ! ฉันประหลาดใจที่มีความแตกต่างระหว่าง "ลาก" และคัดลอก / วาง!
rcreswick

ดังนั้นหากคุณต้องการตัดและวางคุณเพียงแค่ต้องเลือกช่วง + ส่วนลาก แต่ถ้าคุณต้องการคัดลอกคุณต้องการขั้นตอนพิเศษอื่น ๆ เพื่อรักษาต้นฉบับ
Mu Mind

2
วิธีที่ดีกว่า:ทำซ้ำแผ่นงานตัดจากโคลนของแผ่นงานวางในแผ่นงานต้นฉบับในตำแหน่งใหม่ที่คุณต้องการ เมื่อเสร็จแล้วให้ลบโคลนของแผ่นงาน วิธีนี้การอ้างอิงยังคงไม่ได้รับผลกระทบ
ADTC

30

มาหาสิ่งนี้เพื่อหาปัญหาที่คล้ายกันและจบลงด้วยการหาวิธีแก้ปัญหาสำหรับ Excel ซึ่งดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์ใน Google Spreadsheets

สำหรับการอ้างอิงเซลล์คุณไม่ต้องการเปลี่ยนแปลงการวางเพียงเพิ่ม$ก่อนแต่ละส่วน

ดังนั้นG12จะกลายเป็น$G$12

เซลล์จากสเปรดชีตที่ฉันใช้ซึ่งทำสิ่งที่ฉันต้องการดูเหมือนว่า:

 =$G$1&Sheet1!B3&Sheet1!A3&$G$2

1
สิ่งนี้ไม่ได้ผลสำหรับฉัน ดูทางเลือกของฉันด้านล่างwebapps.stackexchange.com/questions/22558/ …
Motti Strom

@Leonard ว้าวไวยากรณ์คือน่ากลัว มันใช้งานง่ายกว่ามากถ้ามันเป็นอีกด้านหนึ่งนั่นคือเซลล์ญาติใช้$ในขณะที่เซลล์แบบสัมบูรณ์เป็นค่าเริ่มต้น
Pacerier

@Pierier ฉันเห็นด้วยกับคุณอย่างสมบูรณ์แม้ว่ามันจะใช้งานได้มันน่ากลัวและอ่านยาก ฉันไม่ได้ใช้สเปรดชีตบ่อยครั้งพอที่จะเข้าใจสิ่งที่คุณแนะนำ คุณสามารถทำอย่างละเอียด?
Leonard

@ Leonard ฉันหมายถึงพฤติกรรมเริ่มต้นแตกต่างกันดังนั้นแทนที่จะเป็น$G$1&Sheet1!B3&Sheet1!A3&$G$2เช่น G1&Sheet1!$B$3&Sheet1!$A$3&G2นั้น
Pacerier

1
@grahamparks: จากนั้น downvote และอาจแสดงความคิดเห็นว่าทำไมมันไม่ได้แก้ปัญหา อย่าพยายามเพิ่มความเห็นของคุณเองลงในคำตอบ
เบียร์

7

ใน Google Spreadsheets หากต้องการตัดและวางเซลล์โดยไม่เปลี่ยนสูตรโดยอัตโนมัติคุณสามารถใช้Ctrl+ Xเพื่อตัด (หรือCtrl+ Cเพื่อคัดลอก) และCtrl+ Shift+ Vเพื่อวาง

ตัวShiftบอก Google ชีตให้ปล่อยสูตรของคุณไว้ตามลำพัง


ถ้าคุณใช้แอพอย่าง Flycut (mac) ด้วยCTRL + SHIFT + Vทางลัดที่ใช้งานอยู่มันจะขัดแย้งกับทางลัดสเปรดชีตและการล็อคสูตรจะไม่ทำงาน ทางลัดปิดการใช้งานของแอป Flycut หรือเพียงแค่เลิกมันเป็นครั้งแรกก่อนที่จะทำCTRL + SHIFT + V
Hlung

13
การแก้ไขแปะด้วย Shift จะทำให้ค่าการวางสเปรดชีตของ Google แทนที่จะเป็นสูตรที่ไม่ได้แก้ไข
Matt McClure

4
สิ่งนี้ไม่ถูกต้อง - ctrl-shift-v เพียงแค่วาง "ค่า" ของสูตรของคุณ สิ่งนี้จะป้องกันการเคลื่อนย้ายข้อมูลของคุณ แต่เซลล์ที่ได้จะมีค่าคงที่ไม่ใช่สูตร
stevemidgley

1
ไม่ทำงาน -1
Pacerier

1
ฉันไม่เคยตัด เมื่อคุณวางด้วยctrl+ shift+ vมันจะคัดลอกค่าเสมอแม้ว่าคุณจะได้ctrl+ xบนเซลล์ต้นทาง
sparebytes

5

หลีกเลี่ยงวิธีนี้เช่นเดียวกับใน Excel:

คัดลอกและวางข้อมูลจากนั้นย้อนกลับและลบออกจากตำแหน่งเดิม


3

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

หากคุณพยายามที่จะทำสำเนาแทนการย้ายให้ใช้วิธีการลาก (คัดลอกก่อนที่จะทำการลาก) หรือคัดลอกที่อื่นบนหน้าเว็บก่อน


2

หากต้องการย้ายช่วงของเซลล์ไปยังตำแหน่งใหม่ใน Google ชีต:

1. เลือกช่วงของเซลล์ที่คุณต้องการย้าย
2. เลื่อนเมาส์ไปที่ขอบของการเลือกจนกว่าเคอร์เซอร์จะเปลี่ยนเป็นมือ
3. ลากเซลล์ของคุณไปยังตำแหน่งใหม่

นี่คือสิ่งที่ควร - เคลื่อนย้ายพวกเขาดังนั้นข้อมูลเซลล์ทั้งหมดจะยังคงเหมือนเดิมทุกประการ

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


จับได้ดีมาก!
marikamitsos

วิธีการเดียวกันเป็นที่กล่าวถึงที่นี่เช่นกัน ยังคง อันนี้ดีกว่าค้นคว้าและอธิบาย
marikamitsos

1

ทำสำเนาข้อความของสูตรแทนสำเนาเซลล์: ใช้เมาส์เพื่อเลือกข้อความสูตรแล้วกด CTRL + C จากนั้นเลือกฟิลด์ปลายทางและกด CTRL + V วิธีนี้จะรักษาสูตร


1
แต่คุณจะต้องทำสิ่งนี้ซ้ำสำหรับแต่ละเซลล์ .... มีวิธีการทำสำเนาข้อความผ่านหลายเซลล์หรือไม่?
Pacerier

0

วิธีที่ง่ายที่สุดคือเลือกเซลล์ทั้งหมดที่คุณต้องการย้ายแล้วลาก / วางไปยังตำแหน่งที่คุณต้องการ หากคุณมีสูตรในเซลล์อื่นที่อ้างอิงกลับไปที่ตำแหน่งเดิมของเซลล์ที่คุณย้ายสูตรอ้างอิงจะอัปเดตเป็นตำแหน่งใหม่ของเซลล์ที่คุณย้ายโดยอัตโนมัติ หวังว่านี่จะช่วยได้! (สมมติว่าใช้งานได้ใน Excel แต่ฉันทำได้เฉพาะใน Google ชีตเท่านั้น)


0
  1. เลือกเซลล์ด้วยเมาส์
  2. คัดลอกคลิปบอร์ดร่วม
  3. ย้ายเซลล์ที่เลือกไปยังตำแหน่งใหม่ด้วยเมาส์ผ่านการจับที่ขอบของกลุ่ม
  4. วางจากคลิปบอร์ดลงในพื้นที่ว่างที่คุณเพิ่งย้ายทุกอย่างออกไป

0

ฉันเพิ่งค้นหาและแทนที่อินสแตนซ์ทั้งหมดของ'='ด้วย'' (หรือสูตรที่ฉันพยายามคัดลอกมากที่สุดเท่าที่จะทำได้) เพื่อทำให้สูตรทั้งหมดเป็นข้อความธรรมดา ฉันคัดลอกและวางเซลล์จากนั้นเพิ่มเครื่องหมาย'='กลับ

หมายเหตุ: สิ่งนี้อาจไม่ทำงานสำหรับแผ่นงานขนาดใหญ่เนื่องจากอาจมีผลกระทบที่ไม่ตั้งใจโดยการแก้ไขเซลล์อื่น แต่โดยปกติจะใช้งานได้ตามวัตถุประสงค์ของฉัน


0

นี่คือตัวเลือกอื่น:

  1. เปลี่ยนเป็นโหมด "แสดงสูตร" (ใต้เมนูมุมมอง)
  2. คัดลอกพื้นที่ที่ต้องการ
  3. วางในเท็กซ์เอดิเตอร์ภายนอกบางตัว
  4. ทำการเปลี่ยนแปลง - สามารถทำได้ง่ายเพียงแค่เพิ่มที่ว่าง
  5. คัดลอกสูตรจากตัวแก้ไขข้อความภายนอก
  6. วางในพื้นที่เป้าหมายในแผ่นงาน
  7. ปิดแสดงสูตร

ขณะนี้ดูเหมือนว่าจะเป็นขั้นตอนที่ยาวนาน แต่ในทางปฏิบัติมันเป็นเพียงจังหวะสำคัญสองสามข้อ นอกจากนี้ขั้นตอนที่ # 4 เป็นสิ่งจำเป็นในการตั้งค่าของฉัน - หากไม่มีแผ่นงานจะยังคงอัปเดตตำแหน่งเซลล์ราวกับว่าเป็นสำเนาโดยตรงและวาง YMMV


0

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

ทางออกคือการรวมINDIRECT()กับROW(), COLUMN()และADDRESS()เพื่อสร้างตำแหน่งของเซลล์เป้าหมายโดยทางโปรแกรมขึ้นอยู่กับเซลล์ของสูตร

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

INDIRECT("A"&ROW())

เพื่อที่จะแนะนำการชดเชยแบบไดนามิกจากเซลล์สูตรคุณสามารถใช้ADDRESS():

INDIRECT(ADDRESS(ROW()-1,COL()-4))

ในสกรีนช็อตด้านล่างสูตรในB1:E1ถูกขยายไปที่ 16 แถวด้านล่างจากนั้นลำดับหมายเลขในA7:A10จะถูกตัดและวาง 6 เซลล์ลง อย่างที่คุณเห็นสูตรที่ง่ายที่สุดจะถูกปรับและยกเลิกการซิงโครไนซ์โดยอัตโนมัติในขณะที่การใช้งานแบบไร้เดียงสาINDIRECT()ไม่ได้คาดการณ์ในทุกแถวอย่างถูกต้อง แต่สูตรสองสูตรที่ใช้INDIRECT()พร้อมกับการดึงโปรแกรม

รูปภาพการสาธิต


-1

คุณสามารถกดF4เพื่อวนรอบตัวเลือกการอ้างอิงแบบสัมบูรณ์ต่าง ๆ เมื่อเคอร์เซอร์อยู่ในเซลล์หรือช่วง ใช้งานได้กับ Mac และ Windows

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