Board logo

標題: 怎麼用函數求出第三大的數 ? [打印本頁]

作者: metrostar    時間: 2010-7-6 16:52     標題: 怎麼用函數求出第三大的數 ?

怎麼用函數求出第三大的數 ?

學妹又來麻煩大家了

請帥哥/美女版主 帥哥/美女學長跟學姐

幫忙學妹完成


答案 : 97


A 下有這些數據 (最大不超過100)


A1 = 100
A2 = 99
A3 = 100
A4 = 97
A5 = 96
A6 = 95
.
.
.
.
.
作者: wqfzqgk    時間: 2010-7-6 16:59

=large(范围,3)
作者: metrostar    時間: 2010-7-6 17:18

本帖最後由 metrostar 於 2010-7-6 17:19 編輯

多謝 wqfzqgk 帥哥學長

您的公式雖然能用

但不是學妹要的,求出的數據是 99 耶 (不對不對)

是要 97 那個數據才對
不管前面數據是否有重複 100,99,97,96
要找出第三那個才算
作者: PD961A    時間: 2010-7-6 17:45

回復 3# metrostar


    [attach]1708[/attach]
作者: wqfzqgk    時間: 2010-7-6 18:21

看错了,一自定义函数
Function 数值(rng As Range, k As Integer)
On Error Resume Next
Set d = CreateObject("scripting.dictionary")
Dim rngg As Range
For Each rngg In rng
d.Add rngg.Value, ""
Next
arr = d.keys
数值 = Application.WorksheetFunction.Large(arr, k)
End Function
作者: wqfzqgk    時間: 2010-7-6 20:34

Function 数值(rng As Range, k As Integer)
On Error Resume Next
Set d = CreateObject("scripting.dictionary")
Dim rngg As Range
For Each rngg In rng
d.Add rngg.Value, ""
Next
数值 = Application.WorksheetFunction.Large(d.keys
, k)
End Function
作者: Hsieh    時間: 2010-7-6 20:42

回復 6# wqfzqgk
  1. Function maxk(rng As Range, k As Integer)
  2. Set d = CreateObject("scripting.dictionary")
  3. Dim rngg As Range
  4. For Each rngg In rng
  5. d(rngg.Value) = ""
  6. Next
  7. maxk = Application.WorksheetFunction.Large(d.keys, k)
  8. End Function
複製代碼
這樣不需用ON ERROR RESUME NEXT來避免錯誤
作者: wqfzqgk    時間: 2010-7-6 20:48

本帖最後由 wqfzqgk 於 2010-7-6 20:52 編輯

回復 7# Hsieh


    以前也用过,时间长了忘记了
作者: wqfzqgk    時間: 2010-7-6 20:49

本帖最後由 wqfzqgk 於 2010-7-6 20:54 編輯

回復 8# wqfzqgk


    我没有看你的程序,我的那个不加不行,討論不重複清單中也可以用个来实现
作者: Hsieh    時間: 2010-7-6 21:06

dictionary物件要使用add方法可配合exists先檢查是否索引值已經存在
個人並不贊同使用on error陳述式來避開錯誤
只有在不確定錯誤產生狀況才使用on error resume next
  1. Function maxk(rng As Range, k As Integer)
  2. Set d = CreateObject("scripting.dictionary")
  3. Dim rngg As Range
  4. For Each rngg In rng
  5. If d.exists(rngg.Value) = False Then d(rngg.Value) = ""
  6. Next
  7. maxk = Application.WorksheetFunction.Large(d.keys, k)
  8. End Function
複製代碼

作者: wqfzqgk    時間: 2010-7-6 21:39

应该是在没有确定错误的情况下才使用on error
作者: gong    時間: 2010-7-6 22:04

不曉得這樣合用嗎
{=LARGE(IF(FREQUENCY(A2:A17,ROW(1:99)),ROW(1:100),0),3)}
作者: Hsieh    時間: 2010-7-6 23:06

回復 12# gong


    若C欄中的數值很大時如超過65536
恐怕就無法使用此法了
作者: gong    時間: 2010-7-6 23:13

我也知道這樣有點偷雞
用函數還真不好玩
只能說樓主出的題目都挺有深度
值得來學習及動動腦
作者: gong    時間: 2010-7-6 23:41

本帖最後由 gong 於 2010-7-7 00:05 編輯

{=INDEX(A2:A100,MATCH(LARGE(IF(ISNUMBER(MATCH(ROW(1:100),RANK($A$2:$A$100,$A$2:$A$100,1),0)),ROW(1:100),0),3),RANK($A$2:$A$100,$A$2:$A$100,1),0))}
作者: zz5151353    時間: 2010-7-7 12:18

gong 版主
還是可以用回原來的 FREQUENCY 函數

{=LARGE(IF(FREQUENCY(A1:A100,A1:A100),A1:A100),3)}
作者: gong    時間: 2010-7-7 12:28

解的好,學習了
作者: Hsieh    時間: 2010-7-7 14:19

回復 16# zz5151353

[attach]1739[/attach]
原來FREQUENCY的bins_array是不需要連續數值及單一性
這函數很少去用他值得研究看看
作者: metrostar    時間: 2010-7-8 07:48


棒級了,非常精彩
感謝樓上多位帥哥版主跟帥哥學長
感恩加感謝您們
完全可以達到
非常的感動呢
您們真是太強太強了
感謝您們並祝賀您們
幸福好運永遠降臨您們身上
作者: chiahuo    時間: 2010-7-8 12:02

多謝 wqfzqgk 帥哥學長

您的公式雖然能用

但不是學妹要的,求出的數據是 99 耶 (不對不對)

是要 97 ...
metrostar 發表於 2010-7-6 17:18



奇怪了,小弟試是正常的
作者: asimov    時間: 2010-7-9 02:00

gong 版主
還是可以用回原來的 FREQUENCY 函數

{=LARGE(IF(FREQUENCY(A1:A100,A1:A100),A1:A100),3)}
zz5151353 發表於 2010-7-7 12:18



zz5151353 版主及gong 版主
精彩
收下學習了
作者: ivanyung    時間: 2010-7-31 11:00

本帖最後由 ivanyung 於 2010-7-31 11:01 編輯


用陣列公式
  1. =LARGE(IF(MATCH(A1:A7,A1:A7,0)=ROW(A1:A7),A1:A7),3)
複製代碼

作者: kuu    時間: 2010-8-10 06:29

本帖最後由 kuu 於 2010-8-10 06:32 編輯

我用的是比較笨的方法
a欄 100 99 100 97 96 95
先由大到小進行排序
a欄 100 100 99 97 96 95
再來我在b欄設定
if(a2=a1,1,""),則b欄會出現
b欄 1      2     3      4     5
再來在C欄設定
if(counta(b1)=1,a1,""),c欄會出現
c欄     100           99    97  96   95
再來在D欄設定                    
Large(D16,3)
就求得了

A  100  99  100  97  96  95排序
→ 100  100  99  97  96  95
B  1              2    3    4    5
C  100          99  97  96  95
D  97                          
以上…謝謝指教
作者: Luc    時間: 2010-8-13 20:18

很精彩的解決方案。
請問各位前輩有沒有移除重複的函式可以套到陣列上的?
作者: irenemak2007    時間: 2010-8-31 14:36

回復 1# metrostar


  =large(A1:A6,3)
作者: 琇琇    時間: 2010-11-19 22:59

這是我剛學會的,不知道妳適不適用
作者: Hsieh    時間: 2010-11-20 14:04

回復 24# Luc


    討論不重複清單




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)