สตริงที่คั่นด้วย "แยก" รักษารายการว่างไว้


10

ฉันกำลังพยายามใช้SPLITและJOINฟังก์ชั่นใน Google ชีต (เวอร์ชันใหม่) เพื่อจัดการข้อมูลบางอย่างและฉันพบปัญหาเพราะSPLITไม่ได้รักษารายการว่างไว้

แหล่งข้อมูลถูกตั้งค่าแบบนี้โดยพื้นฐานแล้ว:

   |  A    B    C    D
-----------------------
1  |  q    5    r    2
2  |  s         t    4
3  |  u    8    v
4  |  w    3    x    6

(รายการว่างในชุดข้อมูลนี้แสดงถึง "ไม่มีการวัด" ซึ่งแตกต่างจากการวัด0)

ในคอลัมน์AและCฉันได้ผลลัพธ์ที่ต้องการโดยใช้สูตร:

=SPLIT(JOIN("~",A1:A4,C1:C4),"~")

ที่สร้างแถวที่ไปตามที่คาดไว้q s u w r t v xในแต่ละเซลล์

แต่วิธีนี้ไม่ทำงานบนคอลัมน์และB ฟังก์ชั่นตามที่คาดไว้ให้ผลลัพธ์:DJOIN

5~~8~3~2~4~~6

การแสดงSPLITในการส่งออกนั้น แต่ผลลัพธ์ในปัญหา: ฉันทิ้งให้อยู่กับ5 8 3 2 4 6โดยไม่มีเซลล์ว่างระหว่าง5และ8หรือระหว่าง4และ6ซึ่งหมายความว่าคู่จะแตกขึ้น (เช่นsและvควรสอดคล้องกับเซลล์ว่าง แต่แทนที่จะwและxทำ) ปัญหาดูเหมือนว่าจะSPLITเป็นการตีความ~~ว่าเป็นตัวคั่นเดียวแทนที่จะเป็นตัวคั่นสองตัวที่มีรายการที่ว่างระหว่างพวกเขา

ไม่มีใครรู้วิธีเก็บรักษารายการว่างในสถานการณ์ประเภทนี้หรือไม่?

ผลลัพธ์ที่ต้องการจะมีลักษณะเช่นนี้

q  s  u  w  r  t  v  x
5     8  3  2  4     6

ช่องว่างในฟิลด์ว่างเหล่านั้นจะแก้ไขปัญหาได้หรือไม่
เบียร์

การพิมพ์ "" จะทำให้รายการว่างถูกเก็บรักษาไว้ (ขอบคุณ @AlE.!) แต่ก็ยังดีกว่าที่จะมีโซลูชันทางเทคโนโลยีไม่น้อยเพราะการพิมพ์ด้วยตนเอง "" ลงในรายการเหล่านั้นทั้งหมดต้องใช้เวลามากและ แนวโน้มที่จะเกิดข้อผิดพลาด
LiberalArtist

สูตรสเปรดชีตไม่ใช่มือขวาของฉัน บางทีบางสิ่งสามารถทำได้ด้วยIF()การแปลงฟิลด์ว่างให้เป็นช่องว่างโดยอัตโนมัติ
เบียร์

1
ปรับปรุง:. @ เบียร์ของความคิดไม่ให้ฉันได้รับการคำนวณที่ทำในระยะทันทีโดยใช้=ARRAYFORMULA(IF(ISBLANK(B1:B4)," ",B1:B4))ที่จะทำให้ชุดหุ่นคอลัมน์ด้วย "" ในเซลล์ว่างเปล่าซึ่งจากนั้นจะใช้สำหรับการและSPLIT JOINยังคงหวังว่าใครบางคนจะมีทางออกที่ดีกว่านี้เพิ่มสิ่งต่าง ๆ มากมายในเอกสารของฉันและมันยังต้องการให้ฉันอัปเดตหมายเลขแถวในที่ต่าง ๆ สองสามแห่งเนื่องจากมีการเพิ่มการวัดในชุดข้อมูลเพิ่มเติม (ต้องขอบคุณ AI E. อย่างน้อยก็ขอให้ฉันกระทืบข้อมูลตอนนี้!)
LiberalArtist

คำตอบ:


3

ลองวิธีแก้ปัญหาต่อไปนี้

สูตร

=ARRAYFORMULA(TRIM(SPLIT(JOIN(" ,", A1:A4,C1:C4), ",")))

อธิบาย

คุณได้แสดงให้เราเห็นว่าฟังก์ชั่นละเว้นเซลล์ว่างดังนั้นฉันเลือกสายนี้เป็นตัวคั่น:SPLIT " ,"ผลลัพธ์ระดับกลางของJOINฟังก์ชันมีลักษณะดังนี้:
ป้อนคำอธิบายรูปภาพที่นี่

ฉันเลือกที่คั่นสำหรับฟังก์ชั่นนี้จะเป็น:SPLIT ","ผลลัพธ์ระดับกลางของSPLITฟังก์ชันมีลักษณะดังนี้:
ป้อนคำอธิบายรูปภาพที่นี่

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

ผลลัพธ์

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่าง

ฉันได้สร้างไฟล์ตัวอย่างสำหรับคุณ: SPLIT เพื่อรักษาเซลล์ว่าง


2

ลองวิธีแก้ปัญหาต่อไปนี้

รหัส

function myJoin() { 
  var output = []; 
  for(var i = 0, iLen = arguments.length; i < iLen; i++) {
    for(var r = 0, rLen = arguments[i].length; r < rLen; r++) {
      output.push(arguments[i][r][0]);
    }    
  }
  return [output];
}

การใช้

ป้อนคำอธิบายรูปภาพที่นี่

เพิ่มช่วงได้มากเท่าที่คุณต้องการและจะถูกประมวลผล เพิ่มสคริปต์นี้ลงในตัวแก้ไขสคริปต์ของสเปรดชีตของคุณ (เครื่องมือ> ตัวแก้ไขสคริปต์กดปุ่มบันทึก)

ตัวอย่าง

ฉันได้สร้างไฟล์ตัวอย่างสำหรับคุณ: SPLIT เพื่อรักษาเซลล์ว่าง


2

คำตอบสั้น ๆ

สูตรต่อไปนี้จะคืนค่าผลลัพธ์ที่ต้องการ

=Transpose({A1:B4;C1:D4})

คำตอบเพิ่มเติม

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

ปัญหา XY

OP ต้องการรับ X และคิดว่า Y ควรส่งคืนผลลัพธ์นั้น วิธีการนี้เป็นปัญหาเนื่องจาก Y มีข้อแม้บางประการ นี่อาจเป็นปัญหาของนายกเทศมนตรีในขณะที่ OP ถามเกี่ยวกับวิธีทำให้ Y ทำงานแทนที่จะถามหาวิธีหา X แต่มันก็ไม่ใหญ่มากเพราะมันให้บริบทและผลลัพธ์ที่ต้องการ

สารละลาย

Google ชีตสามารถจัดการกับผลลัพธ์ที่มีหลายค่าได้อย่างง่ายดายจากมุมมองของผู้ใช้ ในทางกลับกันก็อนุญาตให้ใช้สัญกรณ์พิเศษเพื่ออนุญาตให้ผู้ใช้กำหนดอาร์เรย์

คุณสมบัติข้างต้นทำให้สามารถรับผลลัพธ์ที่คาดหวังได้โดยไม่ต้องใช้ฟังก์ชั่น SPLIT () และ JOIN () และไม่มีคำเตือนที่มีอยู่ในตัว

คำอธิบายสูตร

{A1:B4;C1:D4}

มันเป็นอาร์เรย์ 2 X 8 ที่สร้างขึ้นโดย 2 X 4 Array / Range ใช้เครื่องหมายอัฒภาค ( ;) โดยสมมติว่าตัวแยกเลขฐานสิบของสเปรดชีตเป็นจุด ( .) หากตัวคั่นทศนิยมเป็นเครื่องหมายจุลภาคให้แทนที่ด้วยเครื่องหมายแบ็กสแลช ( \)

=Transpose({A1:B4;C1:D4})

แปลงอาเรย์ 2 X 8 เป็นอาเรย์ 8 X 2

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

อ้างอิง


1

หากคุณเข้าร่วมและทำให้ตัวคั่นเป็น "," โดยทั่วไปเครื่องหมายจุลภาคที่มีช่องว่างก่อนหน้ามันจะรักษาพื้นที่นั้นโดยอัตโนมัติเมื่อคุณแยกอีกครั้ง:

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