Board logo

標題: [發問] 列出不相同數值或字串出現次數 [打印本頁]

作者: jesscc    時間: 2019-8-4 09:51     標題: 列出不相同數值或字串出現次數

本帖最後由 jesscc 於 2019-8-4 09:53 編輯

問題在附件敘述
[attach]31120[/attach]
作者: 准提部林    時間: 2019-8-4 14:57

Sub TEST()
Dim Arr, xD, i&, j&, A$, B, T$, N&
[E2:F2000].ClearContents
Arr = Range([B6], [A65536].End(xlUp))
Set xD = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(Arr)
    A = Arr(i, 1):  B = Arr(i, 2)
    If A = "" Or Val(B) = 0 Then GoTo 101
    If xD(A) = 0 Then N = N + 1: xD(A) = N: Arr(N, 1) = A: Arr(N, 2) = 0
    B = Split(B & "-" & B, "-")
    For j = B(0) To B(1)
        T = A & "/" & j:  xD(T) = xD(T) + 1
        If xD(T) = 1 Then Arr(xD(A), 2) = Arr(xD(A), 2) + 1
    Next j
101: Next
If N > 0 Then [E2:F2].Resize(N) = Arr
End Sub
作者: jesscc    時間: 2019-8-4 16:22

謝謝准大,真是快又準,但是我有2個小問題,因為"種類"和"箱數"之間還有其他欄位,是否能夠只列出箱數就好?能用公式寫出這樣的效果嗎?
作者: 准提部林    時間: 2019-8-4 17:19

回復 3# jesscc


公式是沒辦法,
表格是什麼樣???  上傳看看~~
作者: jesscc    時間: 2019-8-4 19:28

原表格如附件
[attach]31121[/attach]
作者: 准提部林    時間: 2019-8-4 20:19

回復 5# jesscc


這是實際表格???
種類固定只有3種???
作者: 准提部林    時間: 2019-8-4 20:47

以下程式碼放在一般模組:
Function GetCount(xA As Range, xB As Range, C$)
Dim Arr, Brr, xD, i&, j&, B
Set xD = CreateObject("Scripting.Dictionary")
Arr = xA: Brr = xB
For i = 1 To UBound(Arr)
    If Arr(i, 1) <> C Or Val(Brr(i, 1)) = 0 Then GoTo 101
    B = Split(Brr(i, 1) & "-" & Brr(i, 1), "-")
    For j = B(0) To B(1):  xD(j) = 1:  Next j
101: Next
GetCount = xD.Count
End Function


D3/公式:
=IF(B3="","",GetCount(A$7:A$20,D$7:D$20,B3))


資料多的話, 應該會卡
===============================
作者: jesscc    時間: 2019-8-4 21:13

種類其實不是水果,只有三大類。
小弟VBA很粗淺,我是第一次看到公式搭配程式這樣的寫法。
想請問准大
GetCount 是自定義函數的名稱嗎?
If Arr(i, 1) <> C Or Val(Brr(i, 1)) = 0 這一段完全看不懂
能請准大教一下嗎?
作者: hcm19522    時間: 2019-8-5 12:29

https://blog.xuite.net/hcm19522/twblog/588067531
作者: jesscc    時間: 2019-8-5 20:07

hcm19522 發表於 2019-8-5 12:29


h大,我看了您的公式,有一點不明白,就是
E7:E17=IF(ISERR(FIND("-",D7)),(COUNTIFS($A$7:A7,A7,D$7:D7,D7)=1)*1,MID(D7,FIND("-",D7)+1,9)-LEFT(D7,FIND("-",D7)-1)+1)
其中那個9是什麼意思?D欄的資料,總字元長度不是最多也只有5個字元嗎?
作者: hcm19522    時間: 2019-8-6 09:46

回復 10# jesscc


    放大取 >=5  結果一樣   5   9   99    999   均可
作者: Andy2483    時間: 2023-6-5 16:11

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習1#範例方案如下,請各位前輩指教

執行前:
[attach]36519[/attach]

執行結果:
[attach]36520[/attach]


Option Explicit
Sub TEST_1()
Dim Brr, Crr, Y, R&, i&, j%, N&, T1$, T2$, V1&, V2&
Set Y = CreateObject("Scripting.Dictionary")
[E2:F2000].ClearContents
Brr = Range([B7], Cells(Rows.Count, 1).End(3))
ReDim Crr(1 To UBound(Brr), 1 To 2)
For i = 1 To UBound(Brr)
   T1 = Brr(i, 1): T2 = Brr(i, 2)
   If T1 = "" Or Val(T2) = 0 Then GoTo i01
   V1 = Val(T2): V2 = StrReverse(Split(StrReverse(T2), "-")(0))
   For j = V1 To V2
      If Y(T1) = "" Then N = N + 1: Y(T1) = N: Crr(N, 1) = T1
      If Y(T1 & j) = "" Then
         R = Y(T1): Y(T1 & j) = 1: Crr(R, 2) = Crr(R, 2) + 1
      End If
   Next
i01: Next
If N > 0 Then [E2].Resize(N, 2) = Crr
Set Y = Nothing: Erase Brr, Crr
End Sub




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