2010年1月27日 星期三

Excel-二進制的應用

如果要建立一個0~63的十進制對二進制的對照表,而不想要一個數字一個數字的打,該如何產生呢?

依照下列說明,輸入公式:

儲存格A1:F1分別填入32, 16, 8, 4, ,2 ,1  (輔助用途)

觀察這個對照表可以發現,A中的0/1為每隔一個變換一次,B中的0/1為每隔二個變換一次,C中的0/1為每隔四個變換一次,D中的0/1為每隔八個變換一次,E中的0/1為每隔十六個變換一次,F中的0/1為每隔卅十二個變換一次。因此推出公式:

儲存格A3:=IF(ISODD(INT((ROW()-ROW($G$3))/A$1)),1,0)

將儲存格A3複製到A3:F66。

接著將二進制轉換為十進制:

儲存格G3:{=SUM(A3:F3*$A$1:$F$1)} (陣列公式)

將儲存格G3複製到G66。

建立好第一個表後,要根據第一個表轉換出第二個表。第二個表是將A到F中,為1的10進制數字搜集在一起,並依小到大排序排好。

儲存格I3:I34分別填入1, 2, 3, … , 32。  (輔助用途)

儲存格J3:=SMALL(IF(A$3:A$66=1,$G$3:$G$66),$I3)

將儲存格J3複製到J3:O32。

儲存格Q3:{=SMALL(IF($F$3:$F$66=1,$G$3:$G$66),(ROW()-ROW(Q$3))*6+COLUMN()-COLUMN($Q1)+1)} (陣列公式)

複製到Q3:V7,Q8,R8。

儲存格X3:{=SMALL(IF($E$3:$E$66=1,$G$3:$G$66),(ROW()-ROW(Q$3))*6+COLUMN()-COLUMN($X3)+1)} (陣列公式)

複製到X3:AC7,X8,Y8。

儲存格Q11:{=SMALL(IF($D$3:$D$66=1,$G$3:$G$66),(ROW()-ROW(Q$11))*6+COLUMN()-COLUMN($Q11)+1)} (陣列公式)

複製到Q11:V15,Q16,R16。

儲存格X11:{=SMALL(IF($C$3:$C$66=1,$G$3:$G$66),(ROW()-ROW(X$11))*6+COLUMN()-COLUMN($X11)+1)} (陣列公式)

複製到X11:AC15,X16,Y16。

儲存格Q20:{=SMALL(IF($B$3:$B$66=1,$G$3:$G$66),(ROW()-ROW(Q$20))*6+COLUMN()-COLUMN($Q20)+1)} (陣列公式)

複製到Q20:V24,Q25,R25。

儲存格X20:{=SMALL(IF($A$3:$A$66=1,$G$3:$G$66),(ROW()-ROW(X$20))*6+COLUMN()-COLUMN($X20)+1)} (陣列公式)

複製到X20:AC24,X25,Y25。

這個練習是將一個表摘要成另外兩種表,觀念可以應用到更多位元。(註:其中並沒有用到Excel 2007中的十進制/二進制轉換的函數)

沒有留言:

張貼留言

好康東東