標籤彙整: EXCEL

為什麼Excel列印時,只能印出部份內容?

Excel列印出來的內容不完整?

最近有人問我有關Excel的問題,我覺得這問題可能也有人會碰到,而摸不著頭緒,所以寫出來供大家來搜尋,而其實這個功能,甚至也可以拿來惡作劇…

而這問題是這樣的,當事人有一個Excel檔案,而這個檔案裡,有相當多的工作表,但當他把所有的工作表都列印下來時,發現到其中一個工作表的內容,居然只印了部份的內容,而沒有完整的列印出來。

而我假設底下這個表格,就是會列印出不完整內容的表格,如下圖:

5358-01

然後我們按下預覽列印時,居然顯示列印出來的內容,並不是完整的表格,如下圖我們只看到印出來的第二列內容。

5358-02

那這是怎麼回事呢?

其實是「列印範圍」的問題

實際上這問題我也從來沒碰過,因此當有人問我這問題時,我也覺得很怪,為什麼會這樣呢?是Excel有Bug嗎?還是這工作表裡面,有使用到特殊的字元,導致列印不出來?要不然為什麼在同一個檔案中,其它的工作表都正常,而就單獨這個工作表有問題呢?

一連串的問題,在我腦中跑出來,但在此時…

我觀察到在工作表裡,忽然跑出一個「虛線框」,而這個虛線框剛好和列印出來的內容相同,所以我相信這個一定是Excel的功能之一,並不是什麼Bug。

5358-03

所以我很快的就找到在「版面配置」裡,有個「列印範圍」的功能,當我選擇「清除列印範圍」之後,如下圖:

5358-04

果然就能印出完整的內容了,如下圖:

5358-05

所以我說,這功能其實是能整人的,你只要打好一份文件之後,設定一個「列印範圍」在一個「儲存格」上面,而且這個「儲存格」的位置,是在「看不見」的範圍中,說不定也可以將它隱藏起來。

這樣當這個人拿到檔案時,看到檔案內容時,會以為檔案沒有問題,但一旦想要列印時,就會發現到每次印出來的內容,都是空白的。 然後他就會自嘲說,應該是電腦中毒了…

說不定我這客戶,就是被他底下的員工整了也不一定。

Excel深度教學:「二層」、「三層」的動態「下拉式選單」設定

Excel的多階層選單

在前一篇Excel的教學文中,我介紹了使用「資料驗證」的方式,來製作「下拉式選單」( Excel深度教學:使用「資料驗證」來製作「下拉式選單」),若您還不曉得這是什麼,您應該先看完那篇之後,再回過頭來看這篇。

而本篇要說明的是,有時我們的清單資料,是有「階層」的分類,尤其是產品很多的公司,一定都會把數量龐大的產品分門別類,要不然將所有的產品都設定成單一個「下拉式選單」,你可能也很難找的到。

例如下圖,是我簡單製作的文具用品清單,在每個「分類」中,都有屬於它自己的文具用品項目,因此在「品名」出現的下拉式選單,才不會一次出現所有的文具用品,而讓你選的眼花繚亂。
1843-01
那問題就來了,「分類」還不是什麼問題,就直接設定「清單」的來源就好了,因為它的清單項目都是「固定」的,但「品名」這一欄就不一樣了,因為這一欄的「清單」,是根據「分類」下去改變,是不是將「清單來源」給設死的,因此這邊就有個小技巧來分享給各位,教大家如何來處理這種狀況。

Excel二層下拉式選單設定教學

Step 1. 首先,在其它的工作表(例如:Sheet2)製作好一個有階層的資料清單,在下面的例如中,我簡單製作了一個文具用品的階層資料,所有的文具用品分為三類,分別是「書寫用品」、「辦公用品」及「紙製品」,並將分類的資料,填入第一列中,而該分類中的文具用品項目,就分別填入每個欄位裡,例如「書寫用品」裡有「原子筆、筆芯、鉛筆」等項目,如下圖:
1843-02
Step 2. 製作好分類的資料庫清單後,接著新增「文具用品分類」及每個分類下的文具用品的清單「名稱」,總共會新增四個「名稱」出來,如下圖名稱管理員所示,若您對於新增「名稱」的方法有問題的話,請參考「Excel深度教學:使用「資料驗證」來製作「下拉式選單」」這篇文章。
1843-03
Step 3. 接著先將「分類」的資料驗證,設定為「清單」,並將來源設定為「名稱」中的「文具用品分類」。
1843-04
若您能設定成功,我們就能在分類中,利用「下拉式選單」來選取文具用品的大分類項目了,如下圖:
1843-05
Step 4. 接著就是本篇文章的重點所在,就是「品名」欄位的「資料驗證」如何設定,因為在這個欄位中的清單是「變動」的,也就是隨著我們選擇的「分類」,而在「品名」欄位中,出現該分類的文具用品項目。

首先,先選取整個「品名」欄位,也就是「欄位C」,接著在來源中輸入「=INDIRECT(B1)」,最主要就是利用「INDIRECT」這個函數,而儲存格B1就是分類的那一欄位,因此這邊要根據您的情況來做設定。

這邊你也許會有個問題,就是我怎麼會將這一整個C欄位,都設定「=INDIRECT(B1)」呢?第二列不應該要設定成「=INDIRECT(B2)」,而第三列應該是「=INDIRECT(B2)」嗎?

沒錯,您的疑問是對的,不過Excel真的蠻聰明的,它會主動幫我們做跳號的動作,厲害吧?
1843-06
而由於我們也將「標題」列也設定「資料驗證」了,因此會有底下這個「來源 目前評估為錯誤。您要繼續嗎?」的提示對話盒出現,這個地方不用管它,直接點擊〔是〕即可。
1843-07
Step 5. 最後再來到我們輸入資料的表單中,你就會發現到「品名」這欄位所有的儲存格,已經能根據該列的「分類」來產生出不同的「外拉式選單」了。
1843-08
如果您要設定「三層」的下拉式選單,第三層的作法也和第二層是一樣的。

Excel深度教學:VLOOKUP查表函數及比對中文字串時發生錯誤的問題

利用VLOOKUP查表公式,尋找其它欄位的數值

當我們利用「資料驗證」製作好文具用品分類的下拉式選單,也製作好第二層「品名」的動態下拉式選單之後,請參考「Excel深度教學:「二層」、「三層」的動態「下拉式選單」設定」,再來就是要傷腦筋每一項文具產品所對應的「單位」及「單價」了,總不能製作好便利的下拉式選單之後,卻要自己逐一的輸入各文具產品的「單位」及「單價」吧?

因此在這邊就要介紹一個在Excel中,非常好用的高階函式,也是「VLOOKUP」。
1841-01
以下是微軟官方網站「如何使用 VLOOKUP 或 HLOOKUP 尋找完全相同的值」,對於VLOOKUP的參數資料,而括號內的文字是我的註解:

=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

  • Lookup_value:在陣列第一欄中所要尋找的值。(要用來比對的文字)
  • Table_array:查閱資料中的資訊表格。(用來「被」比對的資料庫)
  • col_index:相符數值應該傳回的 table_array 應傳回相符的值。(比對後,要傳回資料庫的哪個欄位,從1開始)
  • Range_lookup:無論您想要尋找完全相符或近似的相符值,其為指定的邏輯值。如果是 TRUE 或是省略,就會傳回近似的相符值;也就是說,如果沒有找到完全相符的值,就會傳回下一個小於 Lookup_value 的最大值。如果是 FALSE,VLOOKUP 則會尋找完全相符值。如果找不到完全相同的值,就會傳回 #N/A 錯誤值。

看完了這些微軟的拉拉喳喳說明後,總之就是「要查什麼?從哪裡查?傳回什麼資料?」,接下來直接做個實例應用給大家看,就可以知道這個公式要如何運用了。

「VLOOKUP」函數範例說明

首先在使用VLOOKUP之前,我們要先把要查表的「表格」給準備好,這是一定的,因為您想要查表,總是要先有一個「表」來查吧?

Step 1. 以我們一直以來的文具用品的例子來說,我另外建立了一個「售價表」的工作表,如下圖所示,而我們所有使用的查表範圍即為紅色框框的地方,你知道為什麼要省略「分類」及「流水號」嗎?
1841-02
這是因為VLOOKUP的函式規定,所要查詢的表格第一欄,就是我們所要比對的數值,因此我們就要把「品名」這個將要用來比對的資料,安排在第一欄的位置。

Step 2. 接下來就要在要輸入的表格中,設定VLOOKUP的公式了,請點擊「單位」下面的儲存格,接著輸入「=VLOOKUP(C2,售價表!C1:E10, 2, FALSE)」,公式中的說明如下:

C2 => 為參考值,在這為「鉛筆」,我們就是要利用這個字串,來查詢「表格」對應該欄位資料。
售價表!C1:E10 => 為資料庫的表格,要查詢的資料,都是從這邊來查詢的,也就是在上一步中的表格資料範圍。
2 => 是要回傳「表格」的欄位。(1為品名、2為單位、3是單價),因此這邊會回傳「單位」這個欄位的值。
FALSE => 比對時,必需要完全相同,才回傳資料。
1841-03
而您應該會注意到,我所輸入的公式,好像和我剛才說的不太一樣:

  • =VLOOKUP(C2,售價表!C1:E10, 2, FALSE)」 <= 我剛才所說的公式
  • =VLOOKUP(C2,售價表!C$1:E$10, 2, FALSE)」 <= 我實際輸入的公式

這兩個差別在於「$錢號」,稍微懂Excel的朋友應該知道,「$」在拖曳儲存格複製公式時,可以「固定」行號或列號,這我們等一下再示範。

比對中文字會發生錯誤的問題

在這裡我要提出一個問題:

「=VLOOKUP(C2,售價表!C1:E10, 2)」,若您在輸入公式時,少掉「FALSE」時,會發生什麼狀況呢?

由於少了FALSE,在比對時,就會以相似的比率來決定回傳的數值,因此這在比對「中文字」時,就會出現問題,例如下圖,當我將公式的FALSE拿掉之後,居然單位出現的是「包」,而不是正確的「支」了。
1841-04
其實,為了要百分百的抓出正確的數值,把「FALSE」加上去就對了。

Step 3. 回到我們輸入資料的地方,當我們把「$」放進欄位的地方,在使用「上、下」拖曳複製公式時,C2這個儲存格的位置就會自動的遞增,第三格變C3,以此類推,所以下面的儲存格,也能快速的填好資料,如下圖:
1841-05
而以同樣的方法來填入「單價」的公式,如下:

  • =VLOOKUP(C2,售價表!C$1:E$10, 3, FALSE)

和之前「單位」的差別只差在回傳的欄位值,回傳「單價」時,要回傳第3欄,這是為什麼這裡要放「3」的原因。
1841-06
同樣將「單價」下方的儲存格,也複製好公式,就可以完成我們所要製作的表格了。

利用「名稱管理員」可以將VLOOKUP做的更好

以上述的方式來使用「VLOOKUP函式」已經是非常好了,同樣的公式,還可以寫的更簡潔、更好維護,也就利用前幾篇Excel教學文章中所提供的「名稱管理員」。

只要您新增定義「售價表」這個「名稱」之後,如下圖:
1841-07
在輸入VLOOKUP公式的表格範圍時,就不需輸入又臭又長的表格定義了,不僅如此,將來若是查表的「表格」資料有異動,您都只需要去修正「名稱管理員」的資料定義範圍即可,而不需要大工程的修正輸入工作表的所有儲存格,因此在使用VLOOKUP時,強烈建議一定要使用「名稱」來輔助。
1841-08
若不曉得名稱要如何定義的話,請參考「Excel深度教學:使用「資料驗證」來製作「下拉式選單」」這篇文章。