顯示具有 Excel公式 標籤的文章。 顯示所有文章
顯示具有 Excel公式 標籤的文章。 顯示所有文章

在EXCEL中利用公式隨機產生字母或數字

隨機產生一個小寫字母公式:
=CHAR(INT(RAND()*25+97))

隨機產生一個大寫字母公式:
=CHAR(INT(RAND()*25+65))


隨機產生一個數字公式:
=CHAR(INT(RAND()*9+48))
隨機產生一個混合隨機值(包括大小寫字母及數字)公式:
=IF(INT(RAND()*2)=0,CHAR(INT(RAND()*9+48)),IF(INT(RAND()*2)=0,  


CHAR(INT(RAND()*25+65)),CHAR(INT(RAND()*25+97))))







   

公式輸入的常用技巧

1.陣列公式輸入方法是Ctrl+Shift+Enter三鍵一起完成輸入

2.公式中--代表意義:--就解讀成負負得正就是將數字型的字串轉換成數值

如:M10234要取得10234成為數值使用,先以MID或RIGHT等字串函數來取得

   =RIGHT("M10234",5)這樣得到10234是字串型態

   =--RIGHT("M10234",5)這樣得到10234是數值型態

3.輸入公式時善用f4鍵切換位址的相對或絕對參照。

Excel 2003的規格及限制(摘錄自Excel 說明)

Excel2003 的規格及限制 

工作表和活頁簿規格

特性 最大限制
開啟活頁簿 受限於可用的記憶體和系統資源
工作表大小 65,536 列 * 256 欄
欄寬 255 個字元
列高 409 個點數
分頁線 1000 條水平及垂直線
儲存格內容的長度 (文字) 32,767 個字元。在一個儲存格中僅能顯示1,024 個字元;在資料編輯列顯示全部 32,767 個字元。
活頁簿中檢視個數 受限於可用的記憶體 (預設值是 3 個工作表)
活頁簿中的色彩個數 56
活頁簿中儲存格樣式個數 4,000
活頁簿中具名的檢視表 (檢視表:可命名及套用至活頁簿的一組顯示及列印設定。您可以建立一個活頁簿的多個檢視表,而無需儲存活頁簿的個別複本。)個數 受限於可用的記憶體
自訂數字格式 介於 200 和 250 之間 (根據您安裝的 Excel 語言版本而定)。
在活頁簿中的名稱 受限於可用的記憶體
在活頁簿中的視窗 受限於系統資源
在視窗中的窗格 4
連結工作表 受限於可用的記憶體
分析藍本 (分析藍本:工作表模型中可取代的一組已命名的輸入值。) 受限於可用的記憶體;一個摘要報表只能顯示前 251 個分析藍本
在分析藍本中變更儲存格 32
調整歸劃求解的儲存格 200
自訂函數 受限於可用的記憶體
顯示比例範圍 10 % 到 400 %
報表 受限於可用的記憶體
參照排序 在單一排序中為 3;若是使用循序排序則無限制
還原階層 16
在資料表單中的欄位 32
在活頁簿中自訂工具列 受限於可用的記憶體
自訂工具 受限於可用的記憶體

工作群組規格

特性 最大限制
使用者可在同一時間內開啟及共用一個共用活頁簿 (共用活頁簿:為允許網路上的多位使用者同時檢視及進行變更而設定的活頁簿。儲存活頁簿的每位使用者均可查看其他使用者所做的變更。)。 256
共用活頁簿中個人的檢視表 (檢視表:可命名及套用至活頁簿的一組顯示及列印設定。您可以建立一個活頁簿的多個檢視表,而無需儲存活頁簿的個別複本。)個數 受限於可用的記憶體
保存變更歷程記錄 (變更歷程記錄:共用活頁簿中保存之過去編輯作業中所作變更的相關資訊。此類資訊包括進行變更的人員姓名、變更的時間,以及變更的資料內容。)的天數 32,767 (預設值為 30 日)
一次可合併的活頁簿個數 受限於可用的記憶體
在共用活頁簿中的儲存格會被標示出來 32,767
當變更反白提示被開啟時,可用來識別不同使用者所做修改的色彩個數。 32 (每個使用者是以不同的色彩來代表;目前使用者所做的變更是以深藍色來標示)

計算規格

特性 最大限制
數字精確度 15 位數
儲存格中允許輸入的最大值 9.99999999999999E+307
最大的可容許正數 1.79769313486231E+308
最小的可容許負數 -2.2251E-308
最小的可容許正數 2.229E-308
最大的可容許負數 -1E-307
公式內容的長度 1,024 個字元
反複運算 32,767
工作表陣列 因受限於可用記憶體,所以,陣列不可以是整個欄。例如,一個陣列不能是全部的 C:C 欄或者是到 C1:C65536 的範圍。不過,陣列的範圍可以是 C1:D65535,因為此範圍是工件表大小之最大值的列,但並不包括整個 C 或 D 欄。
選取範圍 2,048
在函數中的引數 30
函數的巢狀階層 7
工作表函數的可用數目 329
計算可容許的最早日期 January 1, 1900 (如果使用 1904 的日期系統的話,則為 January 1, 1904)
計算可容許的最晚日期 December 31, 9999
可以輸入的最大時間值 9999:59:59

樞紐分析表規格

特性 最大限制
工作表中的樞紐分析表 (樞紐分析表:從不同來源 (包含 Excel 的外部來源) 摘要及分析資料 (如資料庫記錄) 的互動式、跨表格的 Excel 報表。)個數 受限於可用的記憶體
每個欄位唯一的項目 32,500
樞紐分析表報表中的列欄位 (列欄位:樞紐分析表中指定了列方向的欄位。與列欄位關聯的項目會顯示為列標籤。)或欄欄位 (欄欄位:樞紐分析表中指定了欄方向的欄位。與欄欄位關聯的項目會顯示為欄標籤。)個數 受限於可用的記憶體
樞紐分析表報表中的分頁欄位 (分頁欄位:樞紐分析表或樞紐分析圖中指定給分頁方向的欄位。您可以在分頁欄位中顯示所有項目的摘要,或一次顯示一個項目,這樣就會篩選出所有其他項目的資料。)個數 256 (可能會受限於可用的記憶體)
樞紐分析表報表中的資料欄位 (資料欄位:包含樞紐分析表或樞紐分析圖中所彙總之資料的來源清單、資料表或資料庫內的欄位。資料欄位通常包含統計資料或銷售量之類的數值資料。)的個數 256
樞紐分析表報表中的計算項目 (計算項目:樞紐分析表欄位或樞紐分析圖欄位中使用您建立之公式的項目。計算項目可藉由使用樞紐分析表或樞紐分析圖之相同欄位中的其他項目內容來執行計算。)公式的個數 受限於可用的記憶體

圖表規格

特性 最大限制
圖表連結到工作表 受限於可用的記憶體
一個圖表所能參照的工作表 255
一個圖表中的資料數列 (資料數列:圖表中繪製的相關資料點。圖表中的每個資料數列都有唯一的色彩或圖樣,並以圖表圖例表示。您可以在圖表中繪製一或多個資料數列。圓形圖只有一個資料數列。)的個數 255
平面圖表其資料數列中資料點 (資料點:繪製在圖表上的個別值。相關資料點組成資料數列。資料點由橫條、欄、線、扇區、點及其他圖案來表示。這些圖案稱作資料標記。)的個數 32,000
資料數列中立體圖表的資料點個數 4,000
一個圖表中所有資料數列的資料點個數 256,000
線條樣式 8
線條點數 4
區域圖樣 (螢幕顯示) 18
總共區域圖樣和色彩組合 (彩色顯示) 56,448
圖樣和色彩組合 (彩色列印) 56,448 (實際的個數會因為印表機和它的軟體的差異而有所不同)
樞 紐分析圖 (樞紐分析圖:提供資料互動式分析的圖表,與樞紐分析表類似。您可以變更資料的檢視,查看不同層次的細節,或是拖曳欄位及顯示或隱藏欄位中的項目,來重新 組織圖表版面配置。)中的分頁欄位 (分頁欄位:樞紐分析表或樞紐分析圖中指定給分頁方向的欄位。您可以在分頁欄位中顯示所有項目的摘要,或一次顯示一個項目,這樣就會篩選出所有其他項目的 資料。)個數 256 (可能會受限於可用的記憶體)
樞紐分析表報表中的資料欄位 (資料欄位:包含樞紐分析表或樞紐分析圖中所彙總之資料的來源清單、資料表或資料庫內的欄位。資料欄位通常包含統計資料或銷售量之類的數值資料。)個數 256
在樞紐分析圖中計算項目公式 受限於可用的記憶體

Sum函数中*号的妙用

Sum函数中*号的妙用文章作者:Fei Hong 来源:飞鸿工作室

=SUM(’*’!A1)  ’*’! ----???

呵呵,用公式时无意弄出这么个东东,’*’! 代表什么?输输看?
如果工作表中有三个工作表Sheet1、Sheet2、Sheet3,你在 Sheet1表中输入 这个公式 :
=SUM(’*’!A1),回车,看看公式自动变成了什么? =SUM(Sheet2:sheet3!A1)
如果你在 Sheet2表中输入 这个公式 :
=SUM(’*’!A1),回车,公式自动变成了 =SUM(Sheet1!A1,sheet3!A1)
呵呵,明白了吗?
’*’!--代表工作簿中的出去当前工作表的其他工作表,现在你在用公式的时候,会用这种简单方式吗?
还可以=SUM('*'!A1:A10)

试了一下,对其它函数(如:sumproduct、sumif、count、countif等)也适用。

IF不可不用,不可多用

 IF不可不用,不可多用

文章选自:http://post.baidu.com/f?kz=49511214,作者:juyouhh
              先说不可不用。
            if最善于解决非此即彼、非男即女、非阴即阳、非前即后、非有即无的问题。如果问题的答案是二选其一,则除了if,没有更好的办法。比如学龄,以7岁为条件,if(年龄>=7,"已到学龄","未到学龄"),做这样的判断,任何函数方法都不会更简明于此了。
            如果我们的问题都是这么简单就好了。
            有一个著名的数组公式,其内核公式为:if(match(列起点:列终点,列起点:列终点,0)=row(列起点:列终点),row(列起点:列终点),""),作用是在一列中查找重复值各单项的所在行号,这个if就是不可或缺,不可不用的,因为到目前为止还没有其他更简明的办法来达到用公式筛选重复值的目的。但说穿了,if在这里所解决的,仍然还是一个非此即彼的问题。
            再看一例:设A列为姓名,B列为数值, 求姓名甲的数值合计。{=SUM(IF(A1:A15="甲",B1:B15))},其实也是一类问题,是{=SUM(IF(A1:A15=" 甲",B1:B15,0))}的一种简写,叫做非甲即0。而在数组公式中,*号可以用来替代AND,+号则可以替代OR,因此也可以进一步简写作 {=SUM((A1:A15=F1)*B1:B15)},而且条件越多,越可以体现这种写法的优点,比如再加上一列月份,求甲在3月份的数值合计,你可以 省下两个if,多用一个*号就可以了(自己试试?)
       再来说不可多用。
            为什么不可多用?大致是因为:一、会增加公式写入的强度;二、降低公式的可读性;三、降低运算速率;四、不利于脑力的发挥和开掘,使人懒惰。
            例一:A1为一个数值,其范围为1-7,B1设置公式,按A1数值变化分别等于A-G。
            先来看看纯粹使用if的解法:=IF(A1=1,"a",IF(A1=2,"b",IF(A1=3,"c",IF(A1=4,"d",IF(A1=5,"e",IF(A1=6,"f",IF(A1=7,"g","")))))))
            是不是很麻烦?何止是麻烦,假如再增加两个条件,A1的数值范围为1-26,B1相应取值为A-Z,你又当如何?
            if的嵌套最大可以为7层,上面的公式已经用到了极限。虽然说可以用一些旁门左道来“突破”这个限制,但也只是一种堆沙式的游戏,如上例,可以采用以下 方 式:=IF(A1=1,"a",IF(A1=2,"b",IF(A1=3,"c",IF(A1=4,"d",IF(A1=5,"e",IF(A1=6,"f",IF(A1=7,"g","")))))))& amp;IF(A1=8,"h",IF(A1=9,"I",""))……
            这样的用法,真是叫人兴味荡然,昏昏欲睡,EXCEL何必还要学下去,还不如去跟儿子摆积木更好玩呢!
            所以说,if最好不要多用。不是说不能用,而是说用多了会叫人伤心。
            其实EXCEL里准备了许多办法来替代上面的愚蠢的做法。
            比如CHOOSE函数。=CHOOSE(A1,"a","b","c","d","e","f","g","h","i"),这是不是方便多了?CHOOSE的参数清单可以有29项之多,一般足够你使用了。如果还不够,那么请看下面:
            =LOOKUP(A1,{1,2,3,4,5,6,7,8,9,10;"a","b","c","d","e","f","g","h","i","j"}),你可以尽情地输入参数,只要公式内容长度允许(规定公式内容长度为1024个字符)。
            如果真的如例中所举,只是生成A-Z等字母的话,则只需=CHAR(A1+64)就可以了。当然,实际使用中这样的巧合实在是太少了,但作为一种方法还是有提及的必要。
            一个if只能处理一个有无或是否的问题,即使这个问题可能是由诸多小的方面组合而成的。我们可以利用这一点,来达到替代if使用的目的。
            例二:公司结算日期为每月24日,帐目的月份一栏,如果超过24日,就要记为下月。
            如果按照普通思路,公式应该是这样的:=IF(DAY(A1)>24,IF(MONTH(A1)=12,1,MONTH(A1)+1),MONTH(A1))
            要用到两个if判断,外层的是判断日期是否大于24,内层的是判断月份是否在12月,因为12月的下月是1月而非13月。现在对比一下下面的公式:
            =MONTH(DATE(YEAR(A1),MONTH(A1)+1,0)+(DAY(A1)>24))
            后者用了A1日期当月最后一天的序列值,最重要的是后面加了一个由判断是否大于24而生成的逻辑值,相当于=if(day(a1)> 24,1,0)。逻辑值在公式设置中是一个很重要的概念,是对问题本身的逻辑关系的判断,其中TRUE=1,FALSE=0,生成的同样是有无或是否的结果,用得恰当,会使你的公式格外生动有趣。类似的还有根据年龄计算性别、年龄的公式,也是使用逻辑值做判断,具体见我以前的相关帖子,此处不在赘述。
            是不是一定要少用if,以至于该用的也想办法不用?我曾经说,最少用到if的公式往往是最好的公式。之所以用“往往”来做限制,就是因为我没有根据来做一定如此的定论。凡事都要实事求是,具体情况具体分析。
            例三:A1为性别,B1为年龄,C1标注是否退休。条件是男60岁,女55岁。
            对这个问题,=IF(OR(AND(A1="男",B1>=60),AND(A1="女",B1>=55)),"退","未退")只用到一 个if,但未必就比=IF(B1-IF(A1="男",5)>=55,"退","未退")更简洁,尽管后者用到两个if判断。当然我还是反 对=IF(AND(A1="男",B1>=60),"退",IF(AND(A1="女",B1>=55),"退","未退"))这种用法的。
            就写这么多,欢迎批评。
      
              更正:"类似的还有根据年龄计算性别、年龄的公式",前一个“年龄”应该是“身份证”,抱歉。

       作者: juyouhh     2005-10-11 22:04   回复此发言 
   
    回复:if不可不用,不可多用
       多看多用多学多总结嘛,谁天生就会?
            比如我看到http://post.baidu.com/f?kz=48756270 中juyouhh
            的那个公式=SUM((CODE(MID(A1,ROW(INDIRECT("a1:a"&LEN(A1))),1))> 45216)*1),其中的ROW(INDIRECT("a1:a"&LEN(A1)))就是一个很好的例子,是一个怎么在数组公式中取得连续序 列的很好的实例,这样看这个公式就不仅仅只是看到整个公式的功能,而应该是学到一些解决问题的思路*~_~*
   
       作者: bengdeng     2005-10-12 08:50

將橫列的資料轉為直列-用TRANSPOSE公式

TRANSPOSE(array)
現有資料在A1:D1,分別為TEST1, TEST2, TEST3, TEST4
要將此四個資料分別轉置到A3,A4,A5,A6中,

1.  一次過選取欲要放置資料的位置A3:A6
2.  輸入 =TRANSPOSE(A1:D1)
3.  按 Crtl+Shift+Enter (因為 Transpose 是一條 Array Formula)
4.  再將A3:A6公式轉回值便可以。

2 WAYS LOOKUP

<<摘自PAN網誌>>
vlookup 和 hlookup, 這都是單向的lookup, 如要做到雙向lookup,便要利用index() 和 match()公式:-
先以index()公式去lookup 正確的位置,如我們想找 PETER + SCB的值($10,000)

INDEX(array,row_num,column_num)       即 =INDEX(C5:F9,C11,C12)
Array  -  C5:F9
Rom_num  -  PETER: 3 (第三行)
Column_num  -  SCB: 2 (第二個 column)
如何可以知道peter 和 scb 是在第幾row和column呢?借助match()公式便可以得到其正確位置(Row and Column)
MATCH(lookup_value,lookup_array,match_type)
For Row:      如 D11 =match(A11,A5:A9,0)
Lookup_Value = Peter
lookup_array = A5:A9
match_type = 0 (exact match)
For Column:     如 D12 =match(A12,C3:F3,0)
Lookup_Value = SCB
lookup_array = C3:F3
match_type = 0 (exact match)
通過match(),我們便得到 PETER  和 SCB 的傳回value (3 and 2)
最後2ways lookup 的 formula 是這樣的:
=INDEX(C5:F9,MATCH(A11,A5:A9,0),MATCH(A12,C3:F3,0))

以下為VBA FUNCTION:-

Function TwoWayLookup(Data_area, Row_value, Row_area, Column_value, Column_area)
    hello_row = Application.WorksheetFunction.Match(Row_value, Row_area, 0)
   
    hello_column = Application.WorksheetFunction.Match(Column_value, Column_area, 0)
    hello = Application.WorksheetFunction.Index(Data_area, hello_row, hello_column)
    TwoWayLookup = hello

End Function