Board logo

標題: [發問] 如何判定料號+批號其生產天數 [打印本頁]

作者: jsc0518    時間: 2021-11-19 13:33     標題: 如何判定料號+批號其生產天數

Dear all,
圖表說明如下圖。是否有公式可以帶出我想要的結果,現況是以人工計算,常會出錯
Thank you.

[attach]34409[/attach]

[attach]34410[/attach]
作者: samwang    時間: 2021-11-19 14:56

回復 1# jsc0518

請測試看看,謝謝
Sub test()
Dim Arr, xD, Brr(), T$, T1$, i&, n%, m%
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([a1], [c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 3)
For i = 2 To UBound(Arr)
    T = Arr(i, 2) & "|" & Arr(i, 3)
    T1 = Arr(i, 1) & "|" & Arr(i, 2) & "|" & Arr(i, 3)
    If xD.Exists(T) Then
        m = xD(T)
        If Not xD.Exists(T1) Then Brr(m, 3) = Brr(m, 3) + 1
    Else
        n = n + 1: xD(T) = n: xD(T1) = n
        Brr(n, 1) = Arr(i, 2)
        Brr(n, 2) = Arr(i, 3)
        Brr(n, 3) = 1
    End If
Next
With Range("g2").Resize(n, 3)
    .Value = Brr
    .Sort Key1:=.Item(1), Order1:=1, _
          Key2:=.Item(2), Order2:=1, Header:=2
End With
End Sub
作者: hcm19522    時間: 2021-11-19 15:10

https://blog.xuite.net/hcm19522/twblog/590131891
作者: jsc0518    時間: 2021-11-19 17:52

回復 3# hcm19522

Dear hcm19522,

您好!感謝您的熱心指導與回覆。

與您請教,當公式我改成

=SUMPRODUCT((B$2:B$20000&C$2:C$20000=G2&H2)/COUNTIFS(A:A,A$2:A$20000,B:B,B$2:B$20000,C:C,C$2:C$20000))

它就有點類似當機一樣不會執行,是否是20000欄位太多了?

Thank you.
作者: jsc0518    時間: 2021-11-19 19:56

回復 2# samwang
Dear samwang,
晚上好!感謝您的熱心回覆與指導歐
剛剛測試一下與法式OK的,感恩
我等等會在小改一下您的語法,有問題再與您請教歐!
Thank you.
作者: jsc0518    時間: 2021-11-19 20:14

回復 2# samwang
Dear samwang,
我修改了語法,出現400錯誤。
說明一下,我把原本A~C欄位的工作表命名為"01"
而原本於G~I欄位我把它放在"02"(工作表名稱)
再請您指導我


語法更改如下

Sub test()
Dim Arr, xD, Brr(), T$, T1$, i&, n%, m%
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([01!a1], [01!c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 3)
For i = 2 To UBound(Arr)
    T = Arr(i, 2) & "|" & Arr(i, 3)
    T1 = Arr(i, 1) & "|" & Arr(i, 2) & "|" & Arr(i, 3)
    If xD.Exists(T) Then
        m = xD(T)
        If Not xD.Exists(T1) Then Brr(m, 3) = Brr(m, 3) + 1
    Else
        n = n + 1: xD(T) = n: xD(T1) = n
        Brr(n, 1) = Arr(i, 2)
        Brr(n, 2) = Arr(i, 3)
        Brr(n, 3) = 1
    End If
Next

With Range([02!g2]).Resize(n, 3)
    .Value = Brr
    .Sort Key1:=.Item(1), Order1:=1, _
          Key2:=.Item(2), Order2:=1, Header:=2
End With
End Sub
作者: ML089    時間: 2021-11-19 20:16

J2 =COUNT(0/FREQUENCY((G2=B$2:B$99)*(H2=C$2:C$99)*A$2:A$99,A$2-2+ROW($1:$99)))-1
下拉
作者: jsc0518    時間: 2021-11-19 21:36

回復 7# ML089
Dear ML089,
晚上好!感謝您的熱心回復與指導
測試可以使用歐!
Thank you.
作者: jsc0518    時間: 2021-11-19 21:45

本帖最後由 jsc0518 於 2021-11-19 21:46 編輯

回復 7# ML089
Dear ML089,
剛剛試了一下,發現在相同日期有出現2次
在公式也是累計到有2次

但我希望是當日若有出現2次以上,公式幫我判斷算1次


Thank you.
作者: samwang    時間: 2021-11-19 22:24

回復 6# jsc0518


方便附件檔案嗎?
謝謝
作者: jsc0518    時間: 2021-11-19 22:59

回復 10# samwang
[attach]34411[/attach]

在幫我看一下檔案,謝謝
作者: samwang    時間: 2021-11-19 23:15

回復 11# jsc0518

With Range([02!g2]).Resize(n, 3)
>> With Sheets("02").Range("g2").Resize(n, 3)
請修改如上,謝謝   

作者: jsc0518    時間: 2021-11-20 06:49

回復 12# samwang
Dear samwang,
早安!我改了語法如下,但仍出現錯誤400的畫面
[attach]34412[/attach]




Sub test()
Dim Arr, xD, Brr(), T$, T1$, i&, n%, m%
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([01!a1], [01!c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 3)
For i = 2 To UBound(Arr)
    T = Arr(i, 2) & "|" & Arr(i, 3)
    T1 = Arr(i, 1) & "|" & Arr(i, 2) & "|" & Arr(i, 3)
    If xD.Exists(T) Then
        m = xD(T)
        If Not xD.Exists(T1) Then Brr(m, 3) = Brr(m, 3) + 1
    Else
        n = n + 1: xD(T) = n: xD(T1) = n
        Brr(n, 1) = Arr(i, 2)
        Brr(n, 2) = Arr(i, 3)
        Brr(n, 3) = 1
    End If
Next

With Sheets("02").Range("g2").Resize(n, 3)
    .Value = Brr
    .Sort Key1:=.Item(1), Order1:=1, _
          Key2:=.Item(2), Order2:=1, Header:=2
End With
End Sub
作者: samwang    時間: 2021-11-20 07:51

回復 13# jsc0518


我測試沒問題如附件,已附上我測試的檔案,請再測試看看,謝謝
作者: jsc0518    時間: 2021-11-20 15:33

回復 14# samwang
Dear samwang,
謝謝你的幫忙囉!你所提供的附件檔案可以用,我在check我的excel哪裡有問題
感恩感恩!:)
作者: jsc0518    時間: 2021-11-20 15:56

回復 14# samwang
Dear samwang,
我在試run了語法,發現
在01工作表再次新增資料
2021/1/31  A123456  R001   ---> 這些我都設定同一日期(多列)
統計的數量又變成是出現"總"次數
如動態檔案操作
[attach]34415[/attach]
作者: samwang    時間: 2021-11-20 17:55

回復 16# jsc0518

2021/1/31  A123456  R001   ---> 這些我都設定同一日期(多列)
統計的數量又變成是出現"總"次數
>> 不好意思,更新如紅字,請測試看看,謝謝
Sub test2()
Dim Arr, xD, Brr(), T$, T1$, i&, n%, m%
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([01!a1], [01!c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 3)
For i = 2 To UBound(Arr)
    T = Arr(i, 2) & "|" & Arr(i, 3)
    T1 = Arr(i, 1) & "|" & Arr(i, 2) & "|" & Arr(i, 3)
    If xD.Exists(T) Then
        m = xD(T)
        If Not xD.Exists(T1) Then Brr(m, 3) = Brr(m, 3) + 1: xD(T1) = n
    Else
        n = n + 1: xD(T) = n: xD(T1) = n
        Brr(n, 1) = Arr(i, 2)
        Brr(n, 2) = Arr(i, 3)
        Brr(n, 3) = 1
    End If
Next

With Sheets("02").Range("g2").Resize(n, 3)
    .Value = Brr
    .Sort Key1:=.Item(1), Order1:=1, _
          Key2:=.Item(2), Order2:=1, Header:=2
End With
End Sub   

作者: 准提部林    時間: 2021-11-20 18:03

回復 16# jsc0518


Sub test_1()
Dim Arr, xD, Brr(), T$, T1$, i&, n%, m%
[02!g:i].ClearContents '不累計, 這要先清空
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([01!a1], [01!c65536].End(3))
ReDim Brr(1 To UBound(Arr), 1 To 3)
For i = 2 To UBound(Arr)
    T = Arr(i, 2) & "|" & Arr(i, 3)
    T1 = Arr(i, 1) & "|" & T
    m = xD(T): xD(T1) = xD(T1) + 1
    If m = 0 Then
       n = n + 1: m = n: xD(T) = n
       Brr(n, 1) = Arr(i, 2): Brr(n, 2) = Arr(i, 3)
    End If
    If xD(T1) = 1 Then Brr(m, 3) = Brr(m, 3) + 1
Next
[02!g1:i1] = [{"料號","批號","天數"}]
With [02!g2].Resize(n, 3)
     .Value = Brr
     .Sort Key1:=.Item(1), Order1:=1, _
           Key2:=.Item(2), Order2:=1, Header:=2
End With
End Sub
作者: jsc0518    時間: 2021-11-20 18:17

回復 17# samwang
Dear samwang,
測試OK,感恩你的大幫忙!
作者: jsc0518    時間: 2021-11-20 18:18

回復 18# 准提部林
Dear 准提部林,
感謝你的熱心回復與教導歐
Test OK. 大感謝!!
作者: ML089    時間: 2021-11-20 19:37

回復 9# jsc0518

用你原來的檔案測試是OK的,裡面也有2天重複只計算1次
有新的測試檔案嗎?我看看萬提在哪裡?
作者: jsc0518    時間: 2021-11-20 20:46

回復 21# ML089
Dear ML089,
我修改了儲存格格式後,再套用你的公式,就OK了。




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