วางสูตรต่อไปนี้ในแต่ละเซลล์จาก A ถึง L สำหรับทุกแถวจาก 1 ถึง 4096
=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)
หากคุณต้องการทุกสิ่งในสตริงที่มีช่องว่างเหมือนกับที่คุณขอให้ใส่ไว้ในคอลัมน์สุดท้าย
=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1
จากนั้นลากแถวไปจนสุด M4096
สำหรับวิธีแก้ปัญหาทั่วไปเพิ่มเติมให้ใส่จำนวนบิตในเซลล์บางเซลล์เช่น Z1 หรือเซลล์ที่มีชื่อเหมือนNumOfBits
และใช้สูตรต่อไปนี้
=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)
นอกจากนี้ยังสามารถแก้ไขได้อย่างง่ายดายเพื่อใช้เซลล์ใด ๆ เป็นเซลล์เริ่มต้นด้วยการเปลี่ยนออฟเซ็ตแถวและคอลัมน์
เวอร์ชันที่ปรับให้เหมาะสมโดยใช้การทำงานระดับบิตแทนกำลัง
=IF(BITAND(ROW() - 1, BITLSHIFT(1, 13 - COLUMN()) - 1) < BITLSHIFT(1, 12 - COLUMN()), 0, 1)
=IF(BITAND(ROW() - 1, BITLSHIFT(1, NumOfBits + 1 - COLUMN()) - 1) < BITLSHIFT(1, NumOfBits - COLUMN()), 0, 1)
วิธีที่เร็วที่สุด:
- คัดลอกสูตรใดสูตรหนึ่งข้างต้น
- กดF5(หรือCtrl+ G) และป้อน A1: L4096 เพื่อเลือกช่วงทั้งหมด
- กดF2จากนั้นCtrl+ Vเพื่อวาง
- กดCtrl+ +Shift Enterความเจริญ คุณทำเสร็จแล้ว ไม่จำเป็นต้องลาก
มันเป็นสูตรอาร์เรย์ที่เร็วกว่ามากในการคำนวณและสร้างไฟล์ที่เล็กกว่า
คำอธิบาย:
ถ้าเราเขียนแสดงไบนารีทั้งหมดในแถวจากบนลงล่างพลิก / สลับวงจรของที่ n บิต (นับจาก lsb) เป็น 2 n ในแต่ละรอบครึ่งแรก (จาก 0 ถึง 2 n-1 -1) จะเป็น 0 และครึ่งสุดท้ายจะเป็น 1 ตัวอย่างเช่น lsb (บิตแรกจากด้านขวา) จะสลับกันทุก 2 1-1 = 1 บิต บิตที่สองจะสลับทุก 2 2-1 = 2 บิต ...
ด้วยเหตุนี้เราจะใช้โมดูโล 2 nเพื่อรับตำแหน่งปัจจุบันของตัวเลขในวงรอบหากน้อยกว่า 2 n-1มันเป็นศูนย์บิตมิฉะนั้นจะเป็นหนึ่ง