2013年10月8日 星期二

Excel新學者常會患的錯誤一 程式設計架構的錯誤

Excel新學者常會患的錯誤一
程式設計架構的錯誤
幾乎每個星期都會看到有類似的發問者出現。
excel 新學者 都會經歷過這樣的階段:患了程式設計架構的大錯誤
怎麼樣的錯誤?
都是誤認為要以excel為架構設計一個資料庫時,若資料很多那全放在一起怕會很亂,要找資料,要寫資料、排序、篩選、計算、讀資料等等很多的動作要做,所以要將之分類存放才可以一目了然。
其實,這是錯誤的第一步
接下來的程式設計會變成高難度,超出你的能力,然後你繞不出來,最後就捨excel而去。
我常說,excel 碰到你們這樣做,都想哭了。
譬如說;
有很多人會把每一種類的東西各開一個工作表,好幾百種的東西就開了好幾百個工作表。然後問題來了,要在這幾百個工作表之間判斷工作表開過了沒?新開工作表的工作、寫資料、找資料、加總計算等等一大堆的工作,都變成好難好難。你問我我也不會,就算有很聰明絕頂的老師幫你寫一個好幾行的函數,好像幫你解一時之急,你也看不懂,也不會應用。
但這樣難的工作,是你走錯路之後的自討苦吃,自己把接下來的程式設計變成到高難度,這是莫須有的。只得到一個莫須有的結論給自己打擊:「excel 太難了,我不會,算了吧!
也有人每一個種類用三欄,幾百種下來就要再乘以3。然後出現了一個問題,欄數不夠,問說可以不可以開兩個excel檔如何來連結?
非常聰明而有創意,但就是走錯路了

如何做才對?
首先,你開幾十個或幾百個工作表,每一個工作表的架構完全一樣。就不應該分成很多張工作表,全部寫到一張工作表其餘全部刪去
不用怕,寫在一張工作表不會如你害怕的「很難找」,而是剛好相反是「非常好找」。
不用怕,不是常常聽人家說他的資料有好幾萬筆嗎?筆數再多更是要這樣做
然後 善用 排序、加總、自動篩選等,就可以隨心所欲做你想要做的事,而且不用寫程式,不用VBEACCESS,什麼都不用,而且是瞬間完成。
你原來懼怕的問題:
1. 每一筆都流水式的寫在最後面,我要找某一特定種類的東西不會找不到嗎?不會找得很辛苦嗎?
資料(D)/ 排序(S),瞬間完成。
2. 每種類分開加總呢?
資料(D)/ 小計,也是瞬間完成。
3. 如果我只要 種類1就好,其他的不要。我原來只需跳到「種類1」的工作表就可以了,現在呢?
資料(D)/ 篩選(F)/ 自動篩選(F)就會把所有其他的資料全部隱藏,只剩下「種類1」的資料出現,也是瞬間完成。
4. 看完「種類1」,我要再恢復所有的資料呢
資料(D)/ 篩選(F)/ 全部選取,所有被隱藏的資料,又出現了,也是瞬間完成。
5. 你要寫 Vlookup 函數,也一下子變成好簡單。
6. 要做樞紐分析,也是好簡單,功能又強。
我剛剛說的:隨心所欲、自由自在、瞬間完成。更要緊的:你一下子都會!
Excel 是這樣子玩的!

Excel功能好強,excel好簡單,excel好好玩!

Excel 的資料分級程式

Excel 的資料分級程式
使用excel的時候,常會遇到將資料 分級 的需要。譬如
0-2.9 太低
312 普通
1215 優秀
15.1~太超過了
之類的,通常我們 會用好幾個 巢狀 IF 來寫這個程式,又臭又長。而且IF還有數目的限制。
這裡介紹一個很有用的  分級 程式。
就是 Vlookup 函數
用過 Vlookup 的人都知道,這是一個很棒的 查表函數。他可以查到 3, 12 15等我們預設的值對應到的資料。
但是大部分的人不知道,如果查不到呢?譬如 叫他去查6,他就查不到,那就會回復給我們一個 #N/A
其實有一個好方法,可以叫它 查不到也沒關係」,給我一個「最接近的數字所對應的值」就好了。譬如說 6 查不到,那就查「 6小但最接近的那一組數字」,也就是3那組數字。
這樣就很棒了!可以用來 查整個區間,還有就是可以用來做我們題目所提到的「做分級的工作」。
如何做?
譬如 我們把下面的表放在 A11B16
0

3
普通
12
優秀
15
優秀
15.1
太超過了
9999

我們要查分級的數字放在  A1
要把查到的分級  放到B1
B1 =VLOOKUP(A1,A11:B16,2,0), 
A13時,B1=普通
這裡我們詳細講解一下Vlookup這個 函數
就是要電腦到 A11B16這個表中去找 第一欄的數字=A1那一欄的數字的那一列,也就是 A12(=3) 那一列的第-2欄的資料 對應回來,得到「普通」這個內容
但要表中沒有的數字時就出現了錯誤,譬如A16 時,B1#N/A
因為Vlookup函數的最後一個引數 0 的時候,就是要「找到完全相同」的數字才行,否則就是 #N/A
但,精彩的來了!
Vlookup函數最後一個引數為1的時候,就是只要找到「小於它而最近的數字
也就是 B1=VLOOKUP(A1,A11:B16,2,1)
A16時,B1=普通
A1311.9999999 B1都是=普通,對!這就是我們要的
然後,各位看到我最上方寫一個 0, 最下方寫一個 9999, 就是假設可能出現的最小和最大值,這樣你怎麼查也不會出現 #N/A了。
還有 15的下面,要插入一個 15.1 (或是15.0000001比較安全)這樣超過15的數字就會對應到 「太超過了」。
過癮吧,你即使是分10級、20級再多的級數都沒關係,照樣可以用,不像IF有最多8層的限制,而且還把函數寫得非常冗長,頭都昏了。
這樣的功能還可以用在哪裡呢?
譬如 你要寫一個 薪資所得稅扣除額 的程式,薪資 18,00120,000的人假如扶養親屬-2個人要扣繳多少所得稅之類的,是不是用 Vlookup 才做就得心應手,很便捷的就完成了。

記得,Vlookup就是一個超棒的 查表函數 分級函數,有 查表 分級 的需要是就是要善用 Vlookup就對了。

2013年9月21日 星期六

用excel做電腦選題

excel電腦選題

假設我們有100題的題庫,我們想要電腦隨機從裡面選出10題來印成考卷,要怎麼做?

可以用excel簡單的就可以做到。

基本要領就和我寫的另一篇  excel電腦選號 一樣。

但是電腦幫我們選號了之後,如何用這些號能自動去選出題目來列印呢?也許還需要好好想一番,或甚至卡住做不出來。

所以,這裡就整個完整的再介紹一次。

先把100題考題寫到 sheet2 B1 B100

sheet2 A欄寫入 1100

sheet1 A1, 寫入亂數 RAND()向下複製到 A100, 就得到100組小數的亂數。

接著用Rank這個函數,Rank 就是要排出一個數字在一大組數字中的排名

B1 Rank( A1, $A$1:$A$100, 0),

向下複製到B10, 就得到從1100中選出10組亂數。

注意,此處要用絕對位址,否則向下複製時位置就會跑掉。

接下來要如何讓電腦自動的把這10題抓出來排在一起呢?

放在C欄吧!

我們這個時候就需要用到 查表的函數 Vlookup

C1= +VLOOKUP(B1,sheet2!$A$1:$B$100,2,0)

就抓到電腦選出來的第1道題。

往下複製到 C10, 列出了電腦選出來的10道題

A欄和B欄隱藏,就可以印出來成為考卷了。

如果不喜歡,只要按 F9電腦就自動給你另一組考題,非常方便。

用excel 做電腦選號

用excel 做電腦選號

    很多人都知道電腦可以產生亂數,但是要如何用亂數來做 大樂透的38選6的電腦選號呢?好像很簡單,但就是弄不出來。

其實有很簡單的方法,除了學 RAND() 亂數  這個函數之外,還要學  RANK 函數,以及 F9 鍵 就可以自己來做電腦選號了。不需要寫VBA喔!

RAND()  很簡單,就是亂數

RANK 就是排名次,求 A1在 A1, A2, .......A38 一大堆數字中 排第幾大。

F9  是  手動再計算一次  的功能鍵。

A1= RAND(),  產生第一個亂數。

往下複製到 A38, 就產生38個亂數。

B1= RANK (A1, A$1:A$38,0)

往下複製到 B6,  就出現第一組 六個號碼。

記得要使用 絕對位址 A$1及A$38, 不可用相對位址 A1:A38

然後,你可以把A欄隱藏,或是 不用隱藏。

接著,你按  F9, 就出現第二組號碼。

你一直按 F9, 就一直出現新的一組號碼。

又簡單,又方便吧!

你也可以製作成  賓果單,在小型聚會發給大家玩賓果

也可用來做電腦選題,在100題的題庫中選10題出來印成考卷.....

還有很多用途。

2013年7月10日 星期三

剖析excel日期、時間、星期的核心

剖析excel日期、時間、星期的核心
2008/10/18
日期、時間excel中是很重要,常要用到的東西。但大部分的人還是搞不清它的來龍去脈,尤其是牽涉到日期時間的計算更是常常會遇到一些問題而繞不出來,這裡徹底為大家做一個剖析,讓大家清楚是怎麼回事。
要講解日期、時間,要先介紹一個東西,叫做 樣式樣式是什麼東西?樣式就是儲存格的化妝師或是面罩。你在儲存格輸入一個數字或文字,譬如,1234, 可以要它顯示出小數兩位,1234.00, 可以要它顯示千進位的撇點,1,234。也可以要它靠左、靠右、置中,紅色的字,16號字,粗體字.....等等,你可以指定各種各樣的樣式。就像老式的紅綠燈,有時候颱風損壞時我們看到裡面就是一個白熾燈泡,外面罩上一個紅色的燈罩,我們就看到紅燈;罩上綠色燈罩,就看到綠燈一樣。
所以,看到什麼是一回事,儲存格的內容真正是什麼又是一回事。譬如我的另一篇文章,「excel 中如何讓 5 × 8 40 元? 就有教到,你在儲存格輸入 5元,就是「文字」,文字是不能計算的。但你可以只輸入 5, 而應用自訂的樣式  123元,來顯示  5元,看到「5元」,但電腦中其實只是5 ,就可以進行計算。
樣式 在哪裡?格式(0)/ 樣式(S), 最常用的樣式 就是 一般,你點 修改(M)進去看看,就有一大堆內建好的樣式。再點入日期,點入 時間,就可以看到各式各樣的樣式。最下面還有 自訂,你還可以自己訂一個你方便的樣式,譬如上面說的 123元。
進入主題。我們輸入2008/10/18, 請問在電腦中它是文字還是數字?答案是數字2008/10/18表面上是文字,但實際上只是以 yyyy/mm/dd這個樣式顯現出來而已。既然是數字,那就可以來相減。A1 2008/10/18 , A22008/10/12, A3A1-A2 6, 可以算出來差六天。
我們再回到 A1, 格式(0)/ 樣式(S), 一般 這個樣式,出現什麼? 39739, 果然是數字!這是亂數嗎?不是!
我們說每年的元旦是那一年的第一天,請問2008年的第100天是哪一天?100-131- 229- 331 天=10, 所以 2008/4/10 2008年的第100天。
接著我們要揭曉excel時間日期設定的核心
規則一、上述的數字,以日為單位
規則二、如果要顯示成實際的年月日,就是換算成190011的前一日000秒算起的第幾天
回到A1, 39737, 我們把他改成1, 再回去把樣式改成 2001/3/14 , 就出現 1900/1/1 . 你再輸入 39737, 就出現2008/10/18. 也就是說今天2008/10/18 1900年元旦算起的第39737天。
再來講樣式的規則:
規則一、內建每一格的樣式都是 一般。你要去改它,才會成為你的樣式
規則二、任一個儲存格,被改過後,電腦就記憶著前一個樣式
規則三、excel智慧型的軟體,它也經常會自行判斷選擇最合適的樣式來表示。
所以,剛剛 2008/10/182008/10/12 , 其實電腦內部是 39737- 39731=6.
接著講 星期。大家知道星期就是 mod 7, 星期的函數是 weekday(), A1= 2008/10/18 , B1= weekday(A1, 2) = 6, 我們把1900/1/1的前一天為基準日,那一天為星期六。所以 mod (39737, 7) +6 = 6. 有點複雜,但 weekday 就是從基準日計算過來的。
然後來講時間A1輸入1600, 然後修改 樣式 一般 看看存了哪一個數字0.6666666 (),再改為日期樣式2001/3/4 看看, 出現的是 1900/1/0 1600, 也就是從基準日算起的日期時間。
所以,日期是數字,可以計算。時間也是數字,也可以計算。得到的單位都是日。但依照你選的樣式 或電腦自動判斷幫你選的樣式,選示成日期、時間,日數或其他組合。
接著有人想要計算時間差額的加總,算成為單位要怎麼做?就是乘以24就可以了,0.6666666 ×24 =16 (小時)。如果要算成分呢? × 1,440就得到分× 86,400就得到秒
如果你要跨日計算工時A11600, B1200, C1B1-A1會不會得到10小時,不會!電腦會出現######, 他在罵你!時間不可以是負值。但你將之改為一般格式,就得到-0.583333, 因為電腦不會知道你的200是隔一天的早上,他還是會認為是今天早上200.

隔一天的早上的200該如何處理?最簡單的方法就是+2400, 輸入2600就一切都正確了。