|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2015-06-05, 01:03 PM | #1 |
超級版主
|
求助 - Excel統計問題
-------------------- 閱讀本主題的最佳解答 -------------------- 在excel上是否可以做到可以統計次數的方法, 我有一個資料 假設欄位為 A1:150A A2:150B A3:150C A4:150A A5:150B A6:150D A7:150E A8:150A 我要在A9的欄位去統計A1-A8不同資料的出現次數總合(如150A出現三次也視為一次) 請大家幫幫忙了.... . |
__________________ ﹒☆°﹒☆.﹒☆°﹒☆.﹒☆° °﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°.﹒‧°∴°﹒☆...... ☆ 許好願 做好事 轉好運 一個願無量善緣;菩提心永不褪變 心中常存善解、包容、感恩、知福、惜福 |
|
送花文章: 19054,
|
2015-06-06, 01:46 PM | #2 (permalink) |
管理員
|
先列舉幾個可能會用到的統計函數:
COUNT:在某個範圍內,統計「數值資料的欄位 (包含 0、正負數值,不包含空白欄位)」的出現次數 A9=COUNT(A1:A8) 以 阿姨 提出的範例,「數值資料的欄位」會算出有 0 次 COUNTA:在某個範圍內,統計「非空白欄位」的出現次數 A9=COUNTA(A1:A8) 以 阿姨 提出的範例,「非空白欄位」會算出有 8 次 COUNTBLANK:在某個範圍內,統計「空白欄位」的出現次數 A9=COUNTBLANK(A1:A8) 以 阿姨 提出的範例,「空白欄位」會算出有 0 次 COUNTIF:在某個範圍內,統計「某個指定條件」的出現次數 A9=COUNTIF(A1:A8,"150A") 以 阿姨 提出的範例,以「150A 的條件」會算出有 3 次 ───────────────────────────────────────────────────────── 迪西看不太懂 阿姨 想要讓 A9 出現啥內容? 是只要有內容的 +1 次,且重複內容的「僅 +1 次」 因此若是利用 IF 判斷 COUNTIF 算出來的數值 > 0,IF 輸出 1 次,反之為輸出 0 次。 或者是 IF 判斷 COUNTIF 算出來的數值 ≠ 0,IF 輸出 1 次,反之為輸出 0 次。 或者是 IF 判斷 COUNTIF 算出來的數值 = 0,IF 輸出 0 次,反之為輸出 1 次。 最後在用 + 的把這些 IF、COUNTIF 的組合加起來就好了。 IF、COUNTIF > 0 的條件 Then = 1、Else = 0, 會算出 5 次 PHP 語法:
IF、COUNTIF ≠ 0 的條件 Then = 1、Else = 0, 會算出 5 次 PHP 語法:
IF、COUNTIF = 0 的條件 Then = 0、Else = 1, 會算出 5 次 PHP 語法:
此帖於 2015-06-07 10:27 AM 被 getter 編輯. |
__________________ 在「專業主討論區」中的問題解決後,要記得按一下 按鈕喔, 這是一種禮貌動作。 一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。 不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。 天線寶寶說再見啦~ ... 天線寶寶說再見啦~ 迪西:「再見~ 再見~」 『 Otaku Culture Party 』 關心您 ... |
|
送花文章: 37855,
|
2015-06-06, 07:51 PM | #4 (permalink) | |
管理員
|
引用:
比方說有些情況是有公式的函數限制 ... 比方說長度或是深度的限制 ... 目前迪西比較確定的式 IF 有巢狀深度的限制,一格儲存格最多 7 層,如 IF( IF( IF( ... )))。 超過無法結束與計算。新版的 Excel 2007 或 2010 還有沒有這種限制就不清楚了。 本次的這種 if + if +if ... 就不知道限制何時會出現限制了。 就變成要使用 VBA 來開發「自訂函數」來使用,用法也會像 Excel 內建函數的用法 以這次的例子來說 ... 理論上 VBA 可以把這個阿姨要的功能的函數寫的不用指定條件 ... 動作上就是 1.選擇範圍 2.排除重複項目 3.統計項目 4.回饋資料 迪西目前懂的 VBA 部份,可以處理 2~4,1 就搞不出來,因為選擇範圍的話 有分 A1:B2 或是 A1,A5,C3,B4:B16 ... 諸多類型,這裡迪西就卡住了 ... 所以放棄 ... 若真的要使用「自訂函數」的話,阿姨還要會插入 VBA 「自訂函數」才有用,所幸 這不難很簡單,網路上都找的到教學。比較麻煩的是,有些公司會把 Excel 的 book 作安全鎖定,只開放局部輸入或是安全性限制。 |
|
送花文章: 37855,
|
2015-06-07, 02:28 PM | #6 (permalink) |
管理員
|
為自己的Excel加入自定義函數
為自己的Excel加入自定義函數 可以參考以下: Excel 2010 可以自訂公式(函數)來補足內建公式(函數)無法處理的情形 為自己的 Excel 2003 加入自定義函數 如何在另一個活頁簿中使用自訂函式 Excel 2003 自訂函數_簡單說明 如何讓 Excel 2010 的自訂函數顯示說明文字 以阿姨提的例子 ... 迪西也寫了一個「自訂函數」 ... 用法就是跟一般的函數差不多,經過測試,無法接受「連續型的位址 (A1:A8)」 ... 只要輸入的參數其中有一個「連續型的位址」是就會有問題了 #VALUE!,如下: A9=COUNT_NR(A1:A8) A9=COUNT_NR(A1,A2, ...,B1:C3, ...) A9=COUNT_NR(A1:A8,B1,C3,A18) 值與儲存格混合的也不行,一樣會有 #VALUE! A9=COUNT_NR(1,1,2,3,5,4,4,1,B1,C2,D6) 只要拿掉這個「連續型的位址 (A1:A8)」就正常了,如下: A9=COUNT_NR(A1,A2,A3,A4,A5,A6,A7,A8) A9=COUNT_NR(1,1,2,3,5,4,4,1) 把以下的方塊中的 VBA 程式碼,貼到工作表「巨集/VBA編輯器中」,可以參考上述連結 的文章,程式效果與 IF、COUNTIF + IF、COUNTIF ... 相當類似 語法:
Function COUNT_NR(ParamArray argList() As Variant) ' 函數(1,2,3, ...) 或是 函數(A1,B2,C3, ...) ok ' #VALUE! 異常終止 類型: ' 1.引數其中之一只要有 A1:A3 這種連續型位址 ' 函數(A1:A8) ' 函數(A1,A2, ...,B1:C3, ...) ' 函數(A1:A8,B1,C3,A18) ' 2、值與儲存格混核的類型 ' 函數(1,1,2,3,5,4,4,1,B1,C2,D6) ' 函數(A1,A2, ...,1,2,3, ...) Dim i, j, Count As Variant For i = LBound(argList) To UBound(argList) If i = UBound(argList) Then Exit For End If For j = i + 1 To UBound(argList) If argList(i) = "" Then Exit For End If If argList(i) = argList(j) Then argList(j) = "" End If Next j Next i Count = 0 For Each arg In argList If arg <> "" Then Count = Count + 1 End If Next arg COUNT_NR = Count End Function 此帖於 2015-06-07 10:14 PM 被 getter 編輯. |
送花文章: 37855,
|
有 3 位會員向 getter 送花:
|
2015-06-09, 09:18 PM | #8 (permalink) |
管理員
|
基本上 Excel 的內建公式與 VBA 自訂公式 ... 各有千秋
怎麼說... 內建公式比較簡單易上手 ... 自訂公式需要有一定程度的程式設計的基礎 以本樓來說兩者都可以達到效果 ... 但是若是某個概念去做的話,如 SUM() 來說 VBA 自訂公式,就很糟糕 ... 主要問題不是演算結果,而是 () 的輸入範圍的關係。 以內建公式來說 SUM () 也好或是其他的公式,很多都是可以接受 A1:B3 這類的 連續範圍的輸入,有的甚至混合其他的如資料+儲存格+連續範圍,都 OK。 這點反觀 VBA 自訂公式,就迪西以目前網路上找到的結果是,如前述那樣的狀況, 且無比較理想或適當的範例可以求解。 以此樓的問題來說,若以內建公式的話,對於「資料的選擇輸入範圍」比較理想, 比較不方便的地方,是要不斷的修改 COUNTIF 的條件 ... 可以利用記事本,先編 公式好了在貼過來。 若是以 VBA 自訂公式的話,這個「資料的選擇輸入範圍」,要先按住「ctrl」一個 一個點,資料範圍少就算了 ... 很多且多到一個量以上 ... 就知道痛苦了 ...。 基本在很多狀況是混用的 ... 能解決問題比較重要 ... |
送花文章: 37855,
|
有 3 位會員向 getter 送花:
|
2015-06-15, 10:02 PM | #9 (permalink) |
管理員
|
終於迪西讓那個自訂函數可以向 SUM () 一樣了 可能啦~
那個 VBA 迪西這兩天找了一個範例,僅只能使用一組 連續參照的範例,
被迪西意外想到以某種方式實現,在 (值) 的輸入上可以像 SUM () 一樣 有彈性的使用了。 初步已在 Excel 2003/2010 上面跑過 ... 效果對不對就 ... 再討論 COUNT_NRN 以 (數值) 為條件的統計計算方式,功能、使用方式跟 COUNT 差不多 語法:
Function COUNT_NRN(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRN ver. 1a ' 動作1:資料選擇範圍 ' ' 以 (數值) 為條件的計算資料出現的次數, ' 當有重複的(值)時後,該值只計算一次。 ' 使用方式、功能類似於 COUNT 內建函數。 ' ' Value:可以是 (數值) 、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRN = Count End Function COUNT_NRA 以 (字串) 為條件的統計計算方式,功能、使用方式跟 COUNTA 差不多 語法:
Function COUNT_NRA(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRA ver. 1a ' 動作1:資料選擇範圍 ' ' 以 (字串) 為條件的計算資料出現的次數, ' 當有重複的(值)時後,該值只計算一次。 ' 使用方式、功能類似於 COUNTA 內建函數。 ' ' Value:可以是 (字串) 、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRA = Count End Function COUNT_NR2 以 (數值 + 字串) 為條件的統計計算方式,功能、使用方式跟 COUNT、或 COUNTA 差不多 語法:
Function COUNT_NR2(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NR2 ver. 1a ' 動作1:資料選擇範圍 ' ' 以 (數值 + 字串) 為條件的計算資料出現的次數, ' 當有重複的(值)時後,該值只計算一次。 ' 使用方式、功能類似於 COUNT、或 COUNTA 內建函數。 ' ' Value:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NR2 = Count End Function COUNT_NRS 以 (數值 + 字串) 為條件的統計計算方式,以 (模式) 選擇條件的統計計 算方式,基本用法 OUNT_NRS(模式,數值,數值,…) 模式一定要有,不可以略過 0~2 0 表示以(數值)計算。 1 表示以(字串)計算。 2 表試以(數值 + 字串)計算 後面的 數值 部份則可以如 SUM 一樣的選取。 語法:
Function COUNT_NRS(ByVal mode As Byte, ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRS ver. 1b ' 動作1:資料選擇範圍 ' ' 以 (模式) 選擇條件的計算資料出現的次數, ' 當有重複的(值)時後,該值只計算一次。 ' 使用方式、功能類似於 COUNTIF 內建函數。 ' 引數的使用方式 類似於 函數(模式,值,值,…) ' Mode: ' 0 表示以(數值)計算。COUNT_NRS(0,A1:B8,111,566) ' 1 表示以(字串)計算。COUNT_NRS(1,A1:B8,C1,D5,"ABC","AAV") ' 2 表試以(數值 + 字串)計算。COUNT_NRS(2,A1:B8,C1,D5,111,"AAV") ' Value:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) Select Case mode Case 0 GoTo term_1 Case 1 GoTo term_2 Case 2 GoTo term_3 Case Else GoTo term_3 End Select term_1: If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" GoTo term_Next term_2: If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_3: If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_Next: If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRS = Count End Function 此帖於 2015-06-16 09:11 PM 被 getter 編輯. 原因: 修改程式註解,部份文字 |
送花文章: 37855,
|
2015-06-17, 12:43 PM | #10 (permalink) |
管理員
|
給 Excel 自訂函數加 [描述] 說明
參考一:替 [自定義函數] 添加 [描述]
作法基本上是在「VBA 編輯器」下 1.檔案功能表的「檢視\瀏覽物件」或是按下 [F2] 按鍵。 2.畫面中的 [All Libraries] 下拉選單,選項改成 [VBAProject]。 3.在 [物件類別] 視窗內點選自訂函數的模組名稱(預設通常是 Module1 )。 3.在 [成員] 視窗內右鍵點選該自訂函數。 4.在跳出的功能表中選擇 [屬性],則出現 [成員選項] 對話方塊。 5.在 [描述(D)] 文字框內輸入 “描述文字” 6.按 [確定] 按鈕完成程序 文中作者發現? 咦!當完成上述步驟後,回工作表視窗去點選 [插入函數], 在 [使用者定義] 類別找到該函數時,發現並未出現剛剛輸入的“描述”? 7.當步驟 6 好了後,在該模組下的程式編輯視窗,隨便加個 Sub/Function 程序(空的也行)後, 再去看看就出現了! 隨便加個 Sub/Function 程序: 語法:
Sub a123() End Sub 語法:
Function a123() End Function 之後有提到一個,用 VBA Sub 程式來添加 [描述] 說明,直接有效。 其程式碼如下 比較正式的寫法 語法:
Sub addDescription() Application.MacroOptions Macro:="自訂函數的 [名稱]", _ Description:="自訂函數的 [描述說明]" End Sub 語法:
Sub addDescription() Application.MacroOptions "自訂函數的 [名稱]", _ Description:="自訂函數的 [描述說明]" End Sub 這個增加 addDescription 是一個手動巨集,換言之還要到巨集裡面去執行這個 「addDescription 」巨集程式,最少一次才會有效,執行過後要記得存檔,不然 下次重開活頁簿要又要去執行該巨集程式。 可以把這個名稱改成 Auto_Open 的話。在開啟該活頁簿的同時也會同時執行。 其實這是使用了 Application.MacroOptions 的功能 MSDN 詳細中文說明 使用方式也是另外找到 ArgumentDescriptions:=[{"引數 1 的說明","引數 1 的說明", ...}] 其對應就是,依序對應到實際的引數上面。若是 Array 型的引數,只有一個引數說明時 全部共用一個。若試只有少數幾個時,前面照順序排列,之後沒有的公共最後一筆引數 說明。 這個 ArgumentDescriptions 經過測試 Excel 2003 不能使用,只有新版本的,如 Excel 2010、2013 才能用。Excel 2007 迪西不知道,也許可以。 比較正式的寫法 語法:
Sub addDescription() Application.MacroOptions Macro:="自訂函數的 [名稱]", _ Description:="自訂函數的 [描述說明]", _ ArgumentDescriptions:=[{"引數 1 的說明","引數 1 的說明", ...}] End Sub 語法:
Sub addDescription() Application.MacroOptions "自訂函數的 [名稱]", _ Description:="自訂函數的 [描述說明]", _ ArgumentDescriptions:=[{"引數 1 的說明","引數 1 的說明", ...}] End Sub Excel 2003 的要給引數加說明的方式,經過找尋文章測試,不是很理想,就不舉例了。 ───────────────────────────────────────────────────────── 參考二:如何讓Excel的自訂函數顯示說明文字 基本上就是 Application.MacroOptions 的功能 參考二經過測試會無效的原因是,這個 DescribeFunction 是一個手動巨集,換言之還 要到巨集裡面去執行這個「DescribeFunction」巨集程式,最少一次才會有效,執行過 後要記得存檔,不然下次重開活頁簿要又要去執行該巨集程式。 可以把這個名稱改成 Auto_Open 的話。在開啟該活頁簿的同時也會同時執行。 ───────────────────────────────────────────────────────── VBA 自訂函數的 匯入、匯出、移除 寫好的相關「自訂函數」要匯出,在 「VBA 編輯器」下面 1.在專案小試窗上面,點選「模組」裡面的「模組名稱」。可以是巨集指令的,也可以是 自訂函數的「模組名稱」。預設通常是 Module1。 2.接就是「檔案\匯出檔案」或是直接按下滑鼠右鍵,選「匯出檔案」。 3.會得到一個「模組名稱」.bas 的檔案,當然檔名可以再改。 當然也可以匯入,在 「VBA 編輯器」下面 「檔案\匯入檔案」。或是蠆在在專案小試窗上面的空白處,按下滑鼠右鍵,選「匯入檔案」。 有匯入、匯出,表示就會有「移除」,在 「VBA 編輯器」下面 1.在專案小試窗上面,點選「模組」裡面的「模組名稱」。可以試巨集指令的,也可以是 自訂函數的「模組名稱」。預設通常是 Module1。 2.接就是「移除 XXX模組名稱」或是直接按下滑鼠右鍵,選「移除 XXX模組名稱」。 會問你要不要先從存成檔案在移除。這個就看人了。 此帖於 2015-06-18 01:21 PM 被 getter 編輯. |
送花文章: 37855,
|
向 getter 送花的會員:
|
a471 (2015-06-17)
感謝您發表一篇好文章 |
2015-06-17, 12:55 PM | #11 (permalink) |
管理員
|
以本樓的問題,迪西加上說明描述後的程式
Excel 2003: COUNT_NR2:數值和字串 語法:
Sub Auto_Open() ' COUNT_NR2 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NR2", _ Description:="以數值和字串為條件,計算不包含重複資料出現的次數。參考 COUNT、COUNTA。" & Chr(13) & Chr(10) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" End Sub Function COUNT_NR2(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NR2 ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值和字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT、COUNTA 內建函數。 ' ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NR2 = Count End Function COUNT_NRA:字串 語法:
Sub Auto_Open() ' COUNT_NRA 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRA", _ Description:="以字串為條件,計算不包含重複資料出現的次數。參考 COUNTA。" & Chr(13) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" End Sub Function COUNT_NRA(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRA ver. 1a ' 動作1:資料選擇範圍 ' ' 以字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTA 內建函數。 ' ' Value, …:可以是 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRA = Count End Function COUNT_NRN:數值 語法:
Sub Auto_Open() ' COUNT_NRN 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRN", _ Description:="以數值為條件,計算不包含重複資料出現的次數。參考 COUNT。" & Chr(13) & Chr(10) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" End Sub Function COUNT_NRN(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRN ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT 內建函數。 ' ' Value, …:可以是 (數值)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRN = Count End Function COUNT_NRS:模式選擇 語法:
Sub Auto_Open() ' COUNT_NRS 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRS", _ Description:="以模式選擇過濾條件,計算不包含重複資料出現的次數。" & Chr(13) & Chr(10)) & _ " Mode:0 表示以數值計算。 1 表示以字串計算。 2 表示以數值和字串計算。" & Chr(13) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" End Sub Function COUNT_NRS(ByVal Mode As Byte, ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRS ver. 1b ' 動作1:資料選擇範圍 ' ' 以模式選擇過濾條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTIF 內建函數。 ' 引數的使用方式 類似於 函數(模式,值,值,…) ' Mode:0 表示以(數值)計算。COUNT_NRS(0,A1:B8,111,566) ' 1 表示以(字串)計算。COUNT_NRS(1,A1:B8,C1,D5,"ABC","AAV") ' 2 表示以(數值和字串)計算。COUNT_NRS(2,A1:B8,C1,D5,111,"AAV") ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) Select Case Mode Case 0 GoTo term_1 Case 1 GoTo term_2 Case 2 GoTo term_3 Case Else GoTo term_3 End Select term_1: If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" GoTo term_Next term_2: If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_3: If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_Next: If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRS = Count End Function 4 個函數一起 語法:
Sub Auto_Open() ' COUNT_NR2 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NR2", _ Description:="以數值和字串為條件,計算不包含重複資料出現的次數。參考 COUNT、COUNTA。" & Chr(13) & Chr(10) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" ' COUNT_NRN 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRN", _ Description:="以數值為條件,計算不包含重複資料出現的次數。參考 COUNT。" & Chr(13) & Chr(10) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" ' COUNT_NRA 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRA", _ Description:="以字串為條件,計算不包含重複資料出現的次數。參考 COUNTA。" & Chr(13) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" ' COUNT_NRS 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRS", _ Description:="以模式選擇過濾條件,計算不包含重複資料出現的次數。" & Chr(13) & Chr(10)) & _ " Mode:0 表示以數值計算。 1 表示以字串計算。 2 表示以數值和字串計算。" & Chr(13) & Chr(10) & _ " Value, …:可以是數值、字串、單一參照值、連續參照值。" End Sub Function COUNT_NR2(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NR2 ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值和字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT、COUNTA 內建函數。 ' ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NR2 = Count End Function Function COUNT_NRN(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRN ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT 內建函數。 ' ' Value, …:可以是 (數值)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRN = Count End Function Function COUNT_NRA(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRA ver. 1a ' 動作1:資料選擇範圍 ' ' 以字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTA 內建函數。 ' ' Value, …:可以是 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRA = Count End Function Function COUNT_NRS(ByVal Mode As Byte, ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRS ver. 1b ' 動作1:資料選擇範圍 ' ' 以模式選擇過濾條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTIF 內建函數。 ' 引數的使用方式 類似於 函數(模式,值,值,…) ' Mode:0 表示以(數值)計算。COUNT_NRS(0,A1:B8,111,566) ' 1 表示以(字串)計算。COUNT_NRS(1,A1:B8,C1,D5,"ABC","AAV") ' 2 表示以(數值和字串)計算。COUNT_NRS(2,A1:B8,C1,D5,111,"AAV") ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) Select Case Mode Case 0 GoTo term_1 Case 1 GoTo term_2 Case 2 GoTo term_3 Case Else GoTo term_3 End Select term_1: If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" GoTo term_Next term_2: If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_3: If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_Next: If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRS = Count End Function |
送花文章: 37855,
|
向 getter 送花的會員:
|
a471 (2015-06-17)
感謝您發表一篇好文章 |
2015-06-17, 01:01 PM | #12 (permalink) |
管理員
|
以本樓的問題,迪西加上說明描述後的程式
Excel 2010: COUNT_NR2:數值和字串 語法:
Sub Auto_Open() ' COUNT_NR2 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NR2", _ Description:="以數值和字串為條件,計算不包含重複資料出現的次數。參考 COUNT、COUNTA。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] End Sub Function COUNT_NR2(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NR2 ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值和字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT、COUNTA 內建函數。 ' ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NR2 = Count End Function COUNT_NRA:字串 語法:
Sub Auto_Open() ' COUNT_NRA 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRA", _ Description:="以字串為條件,計算不包含重複資料出現的次數。參考 COUNTA。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] End Sub Function COUNT_NRA(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRA ver. 1a ' 動作1:資料選擇範圍 ' ' 以字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTA 內建函數。 ' ' Value, …:可以是 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRA = Count End Function COUNT_NRN:數值 語法:
Sub Auto_Open() ' COUNT_NRN 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRN", _ Description:="以數值為條件,計算不包含重複資料出現的次數。參考 COUNT。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] End Sub Function COUNT_NRN(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRN ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT 內建函數。 ' ' Value, …:可以是 (數值)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRN = Count End Function COUNT_NRS:模式選擇 語法:
Sub Auto_Open() ' COUNT_NRS 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRS", _ Description:="以模式選擇過濾條件,計算不包含重複資料出現的次數。", _ ArgumentDescriptions:=[{":0 表示以數值計算。 1 表示以字串計算。 2 表示以數值和字串計算。",":可以是數值、字串、單一參照值、連續參照值"}] End Sub Function COUNT_NRS(ByVal Mode As Byte, ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRS ver. 1b ' 動作1:資料選擇範圍 ' ' 以模式選擇過濾條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTIF 內建函數。 ' 引數的使用方式 類似於 函數(模式,值,值,…) ' Mode:0 表示以(數值)計算。COUNT_NRS(0,A1:B8,111,566) ' 1 表示以(字串)計算。COUNT_NRS(1,A1:B8,C1,D5,"ABC","AAV") ' 2 表示以(數值和字串)計算。COUNT_NRS(2,A1:B8,C1,D5,111,"AAV") ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) Select Case Mode Case 0 GoTo term_1 Case 1 GoTo term_2 Case 2 GoTo term_3 Case Else GoTo term_3 End Select term_1: If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" GoTo term_Next term_2: If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_3: If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_Next: If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRS = Count End Function 4 個函數一起 語法:
Sub Auto_Open() ' COUNT_NR2 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NR2", _ Description:="以數值和字串為條件,計算不包含重複資料出現的次數。參考 COUNT、COUNTA。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] ' COUNT_NRN 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRN", _ Description:="以數值為條件,計算不包含重複資料出現的次數。參考 COUNT。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] ' COUNT_NRA 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRA", _ Description:="以字串為條件,計算不包含重複資料出現的次數。參考 COUNTA。", _ ArgumentDescriptions:=[{":可以是數值、字串、單一參照值、連續參照值。"}] ' COUNT_NRS 自動載入 [描述] 說明 Application.MacroOptions Macro:="COUNT_NRS", _ Description:="以模式選擇過濾條件,計算不包含重複資料出現的次數。", _ ArgumentDescriptions:=[{":0 表示以數值計算。 1 表示以字串計算。 2 表示以數值和字串計算。",":可以是數值、字串、單一參照值、連續參照值"}] End Sub Function COUNT_NR2(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NR2 ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值和字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT、COUNTA 內建函數。 ' ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NR2 = Count End Function Function COUNT_NRN(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRN ver. 1a ' 動作1:資料選擇範圍 ' ' 以數值為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNT 內建函數。 ' ' Value, …:可以是 (數值)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRN = Count End Function Function COUNT_NRA(ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRA ver. 1a ' 動作1:資料選擇範圍 ' ' 以字串為條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTA 內建函數。 ' ' Value, …:可以是 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRA = Count End Function Function COUNT_NRS(ByVal Mode As Byte, ParamArray Value() As Variant) '═════════════════════════ ' COUNT_NRS ver. 1b ' 動作1:資料選擇範圍 ' ' 以模式選擇過濾條件的計算資料出現的次數, ' 當有重複的 (值) 時後,該值只計算一次。 ' 參考 COUNTIF 內建函數。 ' 引數的使用方式 類似於 函數(模式,值,值,…) ' Mode:0 表示以(數值)計算。COUNT_NRS(0,A1:B8,111,566) ' 1 表示以(字串)計算。COUNT_NRS(1,A1:B8,C1,D5,"ABC","AAV") ' 2 表示以(數值和字串)計算。COUNT_NRS(2,A1:B8,C1,D5,111,"AAV") ' Value, …:可以是 (數值) 或 (字串)、單一參照值、連續參照值, ' 數量尚最少 1 個,多個資料時,以 "," 區分。 '═════════════════════════ Dim i, j, Count, arg, Value_new() As Variant On Error Resume Next Count = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Count = Count + 1 Next arg Next i Err.Clear ReDim Value_new(Count - 1) j = 0 For i = LBound(Value) To UBound(Value) Err.Clear For Each arg In Value(i) Value_new(j) = arg j = j + 1 Next arg If Err.Number = 92 Then Value_new(j - 1) = Value(i) Next i Err.Clear For i = LBound(Value_new) To UBound(Value_new) Select Case Mode Case 0 GoTo term_1 Case 1 GoTo term_2 Case 2 GoTo term_3 Case Else GoTo term_3 End Select term_1: If WorksheetFunction.IsNumber(Value_new(i)) = False Then Value_new(i) = "" GoTo term_Next term_2: If WorksheetFunction.IsNonText(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_3: If WorksheetFunction.IsLogical(Value_new(i)) Then Value_new(i) = "" GoTo term_Next term_Next: If i = UBound(Value_new) Then Exit For For j = i + 1 To UBound(Value_new) If Value_new(i) = "" Then Exit For If Value_new(i) = Value_new(j) Then Value_new(j) = "" Next j Next i Count = 0 For Each arg In Value_new If arg <> "" Then Count = Count + 1 Next arg COUNT_NRS = Count End Function |
送花文章: 37855,
|
2015-09-15, 10:40 AM | #13 (permalink) | |
註冊會員
|
引用:
2.樞紐分析表版面配置將欄位名稱拉入[列]做[判斷] 3.樞紐分析表版面配置將欄位名稱拉入[資料]做[統計] //因為資料型態為文字所以自動作COUNTA()計算項目個數 不需要寫程式碼 //取欄位下不重複資料就是這樣做 一個欄位就可以使用樞紐分析表 Test樞紐分析表版面配置將欄位名稱[列]拉入[欄]>>完工 比較原來位名稱拉入[列]有何不同? //原來是做轉置工作轉90度 ****************************************************** 樞紐分析表滑鼠指向右側數字儲存格 滑鼠左鍵快點2下 //新開一張工作表,列出該筆合併資料所有明細 //資料>>篩選>>Ctrl+Shift+8>>複製>貼上其它地方[操作麻煩] //我選樞紐分析表 此帖於 2015-09-17 11:15 AM 被 老夏0522 編輯. 原因: 增加解說 |
|
送花文章: 0,
|
2020-10-19, 12:07 PM | #14 (permalink) |
長老會員
|
A1-A8 欄位 (A150A ,A150B,A150C,A150D,A150E 各自出現幾次 可以用 B1=COUNTIF(B1,$A$1:$A$8) 去計算 如果是要計算A1-A8 共出現幾次不同的名稱, 可以在A9欄位 用陣列公式 =SUMPORDUCT(1/COUNTIF($A$1:$A$8,$A$1:$A$8))來計算 計算出來=5(但是計算欄位裡如果有0值 要記得-1 (扣除0值出現的值),還有欄位裡如果有空白值,就會出現#DIV/0! 無法計算,所以計算範圍不能有空白儲存格,但是可以有0值)
|
__________________ --------------------------------------------------------------- ♬∮~~~~~劈哩啪啦,劈哩啪啦,叭叭啪拉叭~~~~~♪♭ ---------------------最愛櫻桃小丸子---------------------- |
|
送花文章: 1710,
|
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
請問Excel列印的問題 | Ken1655 | 軟體應用問題討論區 | 3 | 2004-05-23 09:23 AM |
EXCEL VBA專案被鎖?? | suchunta | 軟體應用問題討論區 | 0 | 2004-05-19 04:29 PM |
EXCEL 文件中有可以一次大量更改 超鏈結 的方法嗎!? | 995 | 一般電腦疑難討論區 | 12 | 2003-11-27 11:50 AM |
Microsoft Excel 問題 | ascendaniel | 一般電腦疑難討論區 | 3 | 2003-11-21 10:08 PM |