返回列表 上一主題 發帖

[發問] 搜尋前3大&前3小值。

本帖最後由 ziv976688 於 2021-9-6 22:54 編輯

回復 6# samwang
謝謝您的賜正   
測試結果 :
不好意思,尚有一處有遺漏~
1880~
總次數的三小有2個~21和40(中式排名~"同名次" >=1個時,都要記錄)
W91  沒有記錄到
所以~
W91=V
懇請您賜正。
謝謝您
7前3大&小_0_1884期_5期_1次_W91.rar (13.12 KB)

TOP

本帖最後由 samwang 於 2021-9-6 21:45 編輯

回復 5# ziv976688


1883~請修正下列儲存格~
AP47="";AR47=V
AP48=V;AR48=""
詳如 :7統_0_1884期_1883_名次比對用  
>> 請忽略#2程式碼,已重新更新如下紅字,請再測試看看,謝謝

Private Sub CommandButton1_Click()
Dim Path As String, A, Ar(1 To 1000, 1 To 2), Ar1(), Arr, Brr(1 To 7), Crr, xD, T%, i&, j&
Dim Ar2(), Drr(1 To 16, 1 To 49), Arr1,R%, K%, CR%, R1%
...
...
fileOrg = ActiveWorkbook.Name
If n1 > 0 Then
R = 33
    表頭 = Array("總次數", "最大", "次大", "三大", "", "最小", "次小", "三小", _
                  "倍數", "最大", "次大", "三大", "", "最小", "次小", "三小")
    For i1 = 0 To n - 1   '開啟Ar1
        Set WB = Workbooks.Open(Ar1(i1))
        fn = Split(Ar1(i1), "_")(5)
        With Sheets(1)
            If .FilterMode Then .ShowAllData
            With .Range(.[B1], .[E65536].End(3))
                Crr = .Value
                .Sort Key1:=.Item(3), Order1:=2, Header:=1
                Arr = .Value    '總次數
                .Sort Key1:=.Item(4), Order1:=1, Header:=1
                Arr1 = .Value   '倍數
                .Value = Crr
            End With
        End With
        WB.Close
        For i = 2 To 4                      '總次數:最大3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr(i, 1): K = K + 1
        Next
        For i = UBound(Arr) To 48 Step -1   '總次數:最小3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr(i, 1): K = K + 1
        Next
        For i = UBound(Arr1) To 48 Step -1  '倍數:最大3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr1(i, 1): K = K + 1
        Next
        For i = 2 To 4                      '倍數:最小3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr1(i, 1): K = K + 1
        Next
        For i = 0 To UBound(Ar2)
            T = Ar2(i)
            If CR = 3 Then CR = 0: R1 = R1 + 2 Else R1 = R1 + 1
            Drr(R1, T) = "V": CR = CR + 1
        Next
        With Sheets("Sheet1")
            .Range("a" & R) = fn
            .Range("b" & R).Resize(16) = Application.Transpose(表頭)
            .Range("c" & R + 1).Resize(15, 49) = Drr
            R = .[b65536].End(3).Row + 2
        End With
        Erase Ar2: Erase Drr: K = 0: CR = 0: R1 = 0
    Next
End If

Set fs = Nothing: Set f = Nothing: Set fc = Nothing
...
...

TOP

回復 4# samwang
謝謝您的賜正。
打"V"的部分~我的效果檔範例也有筆漏~請在AP91填入"V"。謝謝!

打"V"部分的測試結果 :
1882;1881;1879~OK

1883~請修正下列儲存格~
AP47="";AR47=V
AP48=V;AR48=""
詳如 :7統_0_1884期_1883_名次比對用

1880~請修正下列儲存格~
W91=V
AP48=V;AR48=""
W99=V;AP99=""
詳如 :7統_0_1884期_1880_名次比對用

PS :
1_COUNTIF(C34:AY116,"V")=61個
2_BUG都是發生在D和E二欄的同名次不是同一列和同名次有2個(含)以上時~
請問 : D欄和E欄的名次是否有分別統計?

以上 懇請賜正。  謝謝您^^
0906.rar (59.63 KB)

TOP

回復 3# ziv976688


1_少了1列間隔空白列~
>> 更改如下紅字,謝謝

With Sheets("Sheet1")
            .Range("a" & R) = fn
            .Range("b" & R).Resize(16) = Application.Transpose(表頭)
            .Range("c" & R + 1).Resize(15, 49) = Drr
            R = .[b65536].End(3).Row + 2
End With

TOP

本帖最後由 ziv976688 於 2021-9-6 14:27 編輯

回復 2# samwang
謝謝您的再次指導。
測試結果 :
1_少了1列間隔空白列~
EX;
A49=1882,B49:B64=表頭
正確為:
A50=1882,B50:B65=表頭

A65=1881,B65:B80=表頭
正確為:
A67=1881,B67:B82=表頭

A81=1880,B81:B96=表頭
正確為:
A84=1880,B84:B99=表頭


其餘...類推

2_V的總數量目前是58個(正確是60個)∼5期*2欄*(前3大+前3小)>=60~
但這個等上項列數調整後,小弟再測試結果∼如真有誤時,再勞煩您修正。
謝謝您
7前3大&小_0_1884期_5期_1次.rar (15.68 KB)

TOP

回復 1# ziv976688


搜尋D欄和E欄之單欄的前3大的數值和前3小的數值,並以同列的B欄值,對應Sheets("Sheet1").[C1:AY1]的同值,
>> 新增紅字如下,請試看看,謝謝   

Private Sub CommandButton1_Click()
Dim Path As String, A, Ar(1 To 1000, 1 To 2), Ar1(), Arr, Brr(1 To 7), Crr, xD, T%, i&, j&
Dim Ar2(), Drr(1 To 16, 1 To 49), R%, K%
...
...
For i = 1 To n            '開啟Ar,找檔名有"統"裝入Ar1
    Set f = fs.GetFolder(Ar(i, 1))
    Set fc = f.Files
    For Each f1 In fc
        If InStr(f1.Path, "統") Then
            ReDim Preserve Ar1(n1)
            Ar1(n1) = f1.Path
            n1 = n1 + 1
        End If
    Next f1
Next i

fileOrg = ActiveWorkbook.Name
If n1 > 0 Then
    R = 33
    表頭 = Array("總次數", "最大", "次大", "三大", "", "最小", "次小", "三小", _
                  "倍數", "最大", "次大", "三大", "", "最小", "次小", "三小")
    For i1 = 0 To n - 1   '開啟Ar1
        Set WB = Workbooks.Open(Ar1(i1))
        fn = Split(Ar1(i1), "_")(5)
        With Sheets(1)
            If .FilterMode Then .ShowAllData
            With .Range(.[B1], .[E65536].End(3))
                Crr = .Value
                .Sort Key1:=.Item(3), Order1:=2, Header:=1
                Arr = .Value
                .Value = Crr
            End With
        End With
        WB.Close
        For i = 2 To 4  '前3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr(i, 1): K = K + 1
        Next
        For i = UBound(Arr) To 48 Step -1 '最後3數值
            ReDim Preserve Ar2(K): Ar2(K) = Arr(i, 1): K = K + 1
        Next
        For i = 0 To UBound(Ar2)
            T = Ar2(i)
            If i < 3 Then
                Drr(i + 1, T) = "V": Drr(i + 9, T) = "V"
            Else
                Drr(i + 2, T) = "V": Drr(i + 10, T) = "V"
            End If
        Next
        With Sheets("Sheet1")
            .Range("a" & R) = fn
            .Range("b" & R).Resize(16) = Application.Transpose(表頭)
            .Range("c" & R + 1).Resize(15, 49) = Drr
            R = .[b65536].End(3).Row + 1
        End With
        Erase Ar2: Erase Drr: K = 0
    Next
End If
Set fs = Nothing: Set f = Nothing: Set fc = Nothing
...
...

TOP

        靜思自在 : 慈悲沒有敵人,智慧不起煩惱。
返回列表 上一主題