宏表函數:
1. 宏表函數具備兩個特點:
a. 像宏 b. 函數
宏表函數跟VBA語句一樣,逐行地執行代碼
右鍵單元格--插入: 可以插入新的表格,也可以插入宏表。可以在宏表裏寫一堆代碼,一行一行地執行。
2. 打開表顯示日期的做法:
=alert("今天的日期是:"&text(sheet1!A1,"yyyy-mm-dd")&char(10)&"距離項目結束還有"&sheet1!A2&"天")
顯示: 今天的日期是2014-06-08 距離項目結束還有7天
一、 利用宏表函數獲取信息
1. get.cell()函數:
get.cell(type_num,reference) 表示 獲取單元格信息,獲取reference這個單元格的type_num這個信息
reference 是提供信息的單元格或單元格範圍。 如果引用的是單元格範圍,使用引用中第一個範圍的左上角的單元格。如果 引用被省略,默認爲活動單元格。
type_num 指明單元格中信息的類型。可能的值與對應結果:
(下表中的黑體字爲常用參數) | |||||||||
Type_num | 返回 | ||||||||
1 | 以當前工作區文字引用類型絕對引用左上角引用單元格。 | ||||||||
2 | 頂部引用單元格的行數。 | ||||||||
3 | 最左邊引用單元格的列數。 | ||||||||
4 | 同TYPE引用 | ||||||||
5 | 引用內容。 | ||||||||
6 | 文字,以工作區設置決定的 A1 或 R1 C1 類型引用公式。與 formulatext()函數功能一樣 | ||||||||
7 | 文字的單元格的數字格式(如“m/d/yy”或“General”)。 | ||||||||
8 | 指示單元格水平對齊的數字 | ||||||||
1=一般 | |||||||||
2=左對齊 | |||||||||
3=置中 | |||||||||
4=右對齊 | |||||||||
5=填充 | |||||||||
6=兩端對齊 | |||||||||
7=跨列置中 | |||||||||
9 | 指示分配給單元格左側邊框線的類型 | ||||||||
0 = 無邊框 | |||||||||
1 = 細線 | |||||||||
2 = 中等線 | |||||||||
3 = 虛線 | |||||||||
4 = 點線 | |||||||||
5 = 粗線 | |||||||||
6 = 雙線 | |||||||||
7 = 髮絲線 | |||||||||
10 | 指示分配給單元格右側邊框線的類型,對應指定返回值的描述參見 type_num 9 | ||||||||
11 | 指示分配給單元格頂端邊框線的類型,對應返回值的描述參見 type_num 9 | ||||||||
12 | 指示分配給單元格底端邊框線的類型,對應返回值的描述參見 type_num 9 | ||||||||
13 | 是0至8之間的一個數字,當在[格式]菜單下選擇[單元格]命令時, [單元格格式]對話框的[圖案]標籤顯示被選擇的單元格。這個數字指明其模式。如模式未被選擇,返回0。【注此處似有誤。應爲1-18之間的一個數。至[圖案]的樣式】 |
||||||||
14 | 如果單元格被鎖住,返回TRUE;否則,返回FALSE。 | ||||||||
15 | 如果單元格中公式被隱藏,返回TRUE;否則返回FALSE。 | ||||||||
16 | 一個含有兩頂的水平數組,包括活動單元格的寬度和一個邏輯值,這個邏輯值指明單元格寬度是否改變, 如爲TRUE,標準寬度改變,如爲FALSE,仍爲自定義寬度。 |
||||||||
17 | 用點表示的單元格的行高 | ||||||||
18 | 字體名稱,文字形式 | ||||||||
19 | 用點表示的字體大小 | ||||||||
20 | 如果單元格中所有字符或只有第一個字母爲黑體,返回TRUE;否則,返回FALSE。 | ||||||||
21 | 如果單元格中所有字符或只有第一個字符爲斜體。返回TRUE;否則,返回FALSE。 | ||||||||
22 | 如果單元格中所有字符或只有第一個字符爲加底線,返回FALSE。 | ||||||||
23 | 如果單元格中所有字符或只有第一個字符爲加刪除線,返回TRUE;否則,返回FALSE。 | ||||||||
24 | 是1-56的一個數字,代表單元格中第一個字符的字體顏色。如果字體顏色爲自動生成,返回0。 | ||||||||
25 | 如果單元格中所有字符或只有第一個字符爲空心體,返回TRUE;否則,返回FALSE。 Microsoft Excel for Windows 不支持空心字體格式。 |
||||||||
26 | 如果單元格中所有字符或只有第一個字符加陰影,返回TRUE;否則,返回FALSE。 Microsoft Excel for Windows 不支持陰影字體格式 |
||||||||
27 | 指示單元格中能否進行手動分頁線的數字。 | ||||||||
0 = 沒有分頁線 | |||||||||
1 = 行 | |||||||||
2 = 列 | |||||||||
3 = 行和列 | |||||||||
28 | 行的級數(分級顯示) | ||||||||
29 | 列的級數(分級顯示) | ||||||||
30 | 如果所包含的活動單元格爲摘要行,返回TRUE;否則,返回FALSE。 | ||||||||
31 | 如果列所包含的活動單元格爲摘要列,返回TRUE;否則,返回FALSE。. | ||||||||
32【注本條說明有誤,點此鏈接】 | 如窗口只包括一個表,其文件名爲不含擴展名的工作簿 的文件名,爲包含單元格的工作簿或工作表的文件名, 以 BOOK1.XLS 的形式返回簿的文件名;否則,以"[BOOK1]sheel"的形式返回表的文件名。 |
||||||||
33 | 如單元格被折行,返回TRUE;否則,返回FALSE。 | ||||||||
34 | 是1-16之間的一個數,代表左側邊框線顏色。如顏色自動生成,返回零。 | ||||||||
35 | 是1-16之間的一個數,代表右側邊框線顏色。如顏色自動生成,返回零。 | ||||||||
36 | 是1-16之間的一個數,代表頂端邊框線顏色。如顏色自動生成,返回零。 | ||||||||
37 | 是1-16之間的一個數,代表底端邊框線顏色。如顏色自動生成,返回零。 | ||||||||
38 | 是1-16之間的一個數,代表前景顏色。如顏色自動生成,返回零。 【包括填充顏色和圖案顏色】 |
||||||||
39 | 是1-16之間的一個數,代表背景顏色。如顏色自動生成,返回零。【陰影背景?】 | ||||||||
40 | 單元格風格,文字形式。 | ||||||||
41 | 不經翻譯返回活動單元格中的公式(用於圖別設定的宏表)。 | ||||||||
42 | 用點表示的活動窗口左邊界到單元格左邊界的水平距離,如果窗口滾動到單元格外,可能爲負值。 | ||||||||
43 | 用點表示的活動窗口頂邊界到單元格頂邊界的垂直距離,如果窗口滾動到單元格外,可能爲負值。 | ||||||||
44 | 用點表示的活動窗口右邊界到單元格右邊界的水平距離,如果窗口滾動到單元格外,可能爲負值。 | ||||||||
45 | 用點表示的活動窗口底邊界到單元格底邊界的水平距離,如果窗口滾動到單元格外,可能爲負值。 | ||||||||
46 | 如果單元格包含文字註釋,返回TRUE;否則,返回FALSE。 | ||||||||
47 | 如果單元格包含聲音註釋,返回TRUE;否則,返回FALSE。 | ||||||||
48 | 如果單元格包含公式註釋,返回TRUE;否則,返回FALSE。 | ||||||||
49 | 如果單元格爲數組的一部分,返回TRUE;否則,返回FALSE。 | ||||||||
50 | 指示單元格垂直方向對齊方式。 | ||||||||
1 = 頂對齊 | |||||||||
2 = 置中 | |||||||||
3 = 底對齊 | |||||||||
4 = 兩端對齊 | |||||||||
51 | 指示單元格垂直方向。 | ||||||||
0 = 水平 | |||||||||
1 = 垂直 | |||||||||
2 = 向上 | |||||||||
3 = 向下 | |||||||||
52 | 單元格前綴(或文字對齊)字符,如果單元格不包括任何內容,代表空文本(“”)。 | ||||||||
53 | 當前顯示的單元格的內容,文本形式,包括格式化單元格所加上去的數字或符號。 | ||||||||
54 | 返回包含活動單元格的數據透視表視圖的文件名。 | ||||||||
55 | 返回數據透視表視圖中單元格的位置。 | ||||||||
56 | 在數據透視表視圖中,返回包含活動單元格引用的字段名稱。 | ||||||||
57 | 如果單元格中所有的字符,或只有第一個字符被格式化爲上標字體,返回TRUE;否則,返回FALSE。 | ||||||||
58 | 作爲顯示在[單元格格式]對話框中[字體]標籤定位單元格中所有的字符或只第一個字符的正文 返回字體風格,如 “Bold Italic”。 |
||||||||
59 | 返回下加線風格的數。 | ||||||||
1 = 無底線 | |||||||||
2 = 單底線 | |||||||||
3 = 雙線 | |||||||||
4 = (single accounting) | |||||||||
5 = (double accounting) | |||||||||
60 | 如果單元格中所有的字符,或只有第一個字符被格式化爲下標字體,返回TRUE;否則,返回FALSE。 | ||||||||
61 | 作爲文本返回活動單元格數據透視表項的文件名。 | ||||||||
62 | 返回工作簿和"[book1]sheet1"形式的當前表的文件名。【注:應爲“活動工作表”】 | ||||||||
63 | 返回單元格的填充(背景)顏色。 | ||||||||
64 | 返回單元格的圖案(前景)顏色。 | ||||||||
65 | 如果[增加縮格]對齊選項處於開的狀態( 只用於Microsoft Excel的遠東版本返回TRUE; 否則,返回FALSE |
||||||||
66 | 返回包含BOOK1.XLS 形式單元格的工作簿的簿名。 |
2. get.workbook()函數:
get.workbook(type_num,name_text) 表示獲取整個文件的信息,文件裏有多少張表,每張表叫什麼名字
Type_num 指明要得到的工作簿信息類型的數。
Name_text 是工作簿的名字。如果name_text被省略,默認爲活動工作簿。
Type_num | 返回 | ||||||||
1 | 正文值的水平數組,返回工作簿中所有表的名字。 | ||||||||
2 | 通常返回錯誤值#N/A。 | ||||||||
3 | 正文值的水平數組,返回工作簿中當前選擇的表的名稱。 | ||||||||
4 | 工作簿中表的數。 | ||||||||
5 | 如果工作簿含有發送名單,返回TRUE;否則返回FALSE。 | ||||||||
6 | 正文值的水平數值,返回所有未接收到文件的接受者的名字。 | ||||||||
7 | 以文本形式返回當前發送名單的主題線。 | ||||||||
8 | 以文本形式返回發送名單的信息正文。 | ||||||||
9 | 如果文件被髮送,一個接一個被接收,返回1;如果全部一次被髮送,返回2。 | ||||||||
10 | 如果[發送名單]對話框中選擇[返回送畢信息]選擇框,返回TRUE;否則返回FALSE。 | ||||||||
11 | 如果當前接收發送當前文件,返回TRUE;否則返回FALSE。 | ||||||||
12 | 如果[發送名單]對話框中選擇[跟蹤狀態]選擇框,返回TRUE;否則返回FALSE。 | ||||||||
13 | 工作簿[發送名單]: | ||||||||
0 =不被髮送 | |||||||||
1 =進展中的路徑選擇,或對於用戶工作簿已被髮送。 | |||||||||
2 =發送已完成。 | |||||||||
14 | 如果工作簿結構被保護,返回TRUE;否則返回FALSE。 | ||||||||
15 | 如果工作簿窗口被保護,返回TRUE;否則返回FALSE。 | ||||||||
16【說明有誤?點擊鏈接】 | 以文字形式返回工作簿的名稱,不包括驅動器,目錄或文件, 或窗口編號,等價於GET.DOCUMENT(1) | ||||||||
17 | 如果文件爲只讀,返回TRUE,否則返回FALSE。等價於GET,DOCUMENT(34) | ||||||||
18 | 如果表被寫保護,返回TRUE,否則返回FALSE。等價於GET.DOCUMENT(35) | ||||||||
19 | 當前文件允許寫的用戶的名字,等價於GET.DOCUMENT(36)。 | ||||||||
20 | 對應於顯示在[另存爲]對話框中的文件的文件類型的數字。等價於GET.DOCUMENT(37)。 | ||||||||
21 | 如在[另存爲]對話框中選擇了[建立備文件]選擇框,返回TRUE;否則,返回FALSE。等價於GET.DOCUMENT(40) | ||||||||
22 | 如在[選擇]對話框的[重新計算設置]標籤中選擇了[保存外部鏈接值]選擇框,返回TRUE。等價於GET.DOCUMENT(43) | ||||||||
23 | 如果工作簿有一個蘋果開放合作環境(OCE)返回TRUE;否則返回FALSE。如未安裝OCE(mailer),返回#N/A。 | ||||||||
24 | 如果工作簿在最後一次保存後被改變,返回TRUE。若未改變(當被關閉,不提示保存),返回FALSE。 | ||||||||
25 | 以文字形式水平數組,返回Power Talk(mailer)的To線上的接收。 | ||||||||
26 | 以文字形式水平數組,返回Power Talk(mailer)的Cr線上接收。 | ||||||||
27 | 以文字形式水平數組,返回Power Talk(mailer)的Bxx線上的接收。 | ||||||||
28 | 以文字形式返回Power Talk(mailer)的主題。 | ||||||||
29 | 以文字形式水平數組,返回Power Talk(mailer)的外殼。 | ||||||||
30 | 如果Power Talk(mailer)從另一用戶[*(相對於剛增加但不是發送)。 | ||||||||
31 | 作爲一系列數返回Power Talk mailer)被髮送的日期和時間,如(mailer)未被髮送,返回錯誤值#N/A。 | ||||||||
32 | 以文本形式返回Power Talk(mailer)的發送者的名字,如(mailer)未被髮送,返回錯誤值#N/A。 | ||||||||
33 | 以文字形式返回顯示在[摘要信息]對話框中的文件的標題。 | ||||||||
34 | 以文字形式返回顯示在[摘要信息]對話框中的文件的主題。 | ||||||||
35 | 以文字形式返回顯示在[摘要信息]對話框中的文件的作者。 | ||||||||
36 | 以文字形式返回顯示在[摘要信息]對話框中的文件的關鍵字。 | ||||||||
37 | 以文字形式返回顯示在[摘要信息]對話框中的文件的註釋。 | ||||||||
38 | 活動工作表的名字。 |
3. 宏表函數的更新問題:
有些宏表函數不會實時更新。
4. 單元格加鏈接:
=hyperlink(地址,顯示出來的名字) 這時直接單擊單元格里顯示的名字就可以直接跳轉到鏈接所對應的網頁上了
如: =hyperlink('http://www.163.com','網易') 單元格里顯示'網易',點擊網易,直接跳轉到http://www.163.com
地址還有別的寫的形式
宏表函數不能直接在單元格里寫,會顯示無效,要先點住要寫公式的單元格,在 “公式--定義名稱” 中定義名稱,在引用位置裏寫宏表函數的公式。用時,在單元格里寫:=定義的名稱 即可 如果宏表函數裏寫的是相對引用,拖動這個單元格,即可將公式運用到別的單元格
如:
計算單元格的顏色:
點B2單元格--公式--定義名稱--名字:(隨便起)計算背景色,引用位置:=get.cell(63,a2)
然後在B2單元格輸入: =計算背景色 即可得到A2單元格的背景顏色
如:
計算D列得出數字的公式:
a. 點E2單元格--公式--定義名稱--名字:提取公式(隨意起),引用位置: =get.cell(6,D2)
然後,在E2單元格輸入: =提取公式,即可得到
b. =formulatext(某單元格) 得出某單元格的公式 (2013版)
例子: 算出單元格的顏色,標記某個顏色爲某個數字,然後按數據排序,就可將有顏色的數據排序了
例子: 一個文件裏有很多工作表,若想爲這些工作表做個目錄,並且點擊對應目錄可以直接跳到對應的表裏,做法:
get.workbook(1) 表示顯示第一個工作表的名字
index(工作表名,1) 表示顯示所有工作表裏的第一個工作表的名
index(工作表名,row()) 這樣,將要取第幾個工作表名與行號聯繫起來,拖拽函數時就更方便了。
index(工作表名,row())&“a1” 表示鏈接到工作表裏a1單元格 這個放在hyperlink函數裏,作爲鏈接用。
接下來就是做超鏈接了: hyperlink(index(工作表名,row())&“a1”,)
對於有錯誤的單元格,可以設置出錯時如何顯示。平時出錯時一般會顯示 “#REF!”
二、 宏表函數常見應用:
1.evaluate()函數:
evaluate(formula_text) 計算函數的結果。
如: evaluate(2*3) // 6
如: 在C2單元格里計算B2單元格里寫的公式的值:
點擊C2單元格--公式--定義名稱--名字:運算,引用位置:=evaluate(B2),在C2單元格里輸入: =運算,即可得到結果
2. =reftext(active.cell()) 得到一個當前點擊的單元格地址
active.cell() 是活動單元格,reftext(active.cell())得到的是活動單元格的地址
3. =substitute(單元格,把單元格里的什麼,替換爲另一個東西,替換的是第幾個)
A2:99,98,97 =substitute(A2,",","+") 把A2裏的逗號改成加號: // 99+98+97
=evaluate(substitute(A2,",","+")) 也就是=evaluate(99+98+97) 得出:294
="{"&A2&"}" // {99,98,97}
=sum("{"&A2&"}") 即: =sum({99,98,97}) 可直接求和,{}表示聲明{}裏面是一組數據,而不是一個單元格里的字符串
如:
這裏會用到find()函數。find(找什麼,去哪裏找,從哪裏開始) 返回要找的東西在區域裏的位置
=find(" ",A16) // 會返回A16裏第一個空格出現的位置:3
=find(" ",A16)+1 // 4
=find(" ",A16,find(" ",A16)+1) // 會返回A16裏從第4個字符開始後的第一個空格
=find(" ",A16,find(" ",A16,find(" ",A16)+1)+1) // 10
=find(" ",A16,find(" ",A16,find(" ",A16,find(" ",A16)+1)+1)+1) // 14
=substitute(A16," ","@",find(" ",A16,find(" ",A16,find(" ",A16,find(" ",A16)+1)+1)+1)) 將第14個空格替換爲@
或:
=substitute(A16," ",";") // 11;12;113;154;15;16
="{"&substitute(A16," ",";")&"}" // {11;12;113;154;15;16}
=evaluate("{"&substitute(A16," ",";")&"}" ) // 把"{"&substitute(A16," ",";")&"}" 變成真正的數組,顯示:11
=index(evaluate("{"&substitute(A16," ",";")&"}"),4) // 取出數組裏第四段數據
三、 拓展:
當某個單元格里寫入函數: =一個區域的數據 這時這個單元格也許只會顯示區域裏的一個數據,用鼠標點住這個單元格再點擊編輯欄時, 按F9鍵,編輯欄裏的內容就會由函數公式變成了由選中的這些數據組成的數組。這就是這個單元格的真實的值。