返回列表 上一主題 發帖

[發問] 列出不相同數值或字串出現次數

[發問] 列出不相同數值或字串出現次數

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

問題在附件敘述
[attach]31120[/attach]

test.rar (7.25 KB)

Jess

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

TOP

謝謝准大,真是快又準,但是我有2個小問題,因為"種類"和"箱數"之間還有其他欄位,是否能夠只列出箱數就好?能用公式寫出這樣的效果嗎?
Jess

TOP

回復 3# jesscc


公式是沒辦法,
表格是什麼樣???  上傳看看~~

TOP

原表格如附件
test1.rar (7.53 KB)
Jess

TOP

回復 5# jesscc


這是實際表格???
種類固定只有3種???

TOP

以下程式碼放在一般模組:
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))


資料多的話, 應該會卡
===============================

TOP

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

TOP

google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

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個字元嗎?
Jess

TOP

        靜思自在 : 心中常存善解、包容、感思、知足、惜福。
返回列表 上一主題