麻辣家族討論版版's Archiver

shuo1125 發表於 2021-11-23 22:08

請教 以字典抓取符合條件資料後輸出

各位前輩好,
若想以CreateObject("Scripting.Dictionary")字典方式抓取資料並將結果輸出,請問程式該如何寫..
(如圖檔及附檔)

以[盤點表]為模板,符合下列條件時,將DATA結果輸出如[盤點表(結果)]
1.當DATA所在地=盤點表B2時。
2.若遇到財產編號相同者,只列出頭一筆。
3.將各所在地之資料分別輸出,以分頁區分。
4.在最後進行各所在地數量小計。
5.有資料部分才框線。

以上,因資料有部分隱私,故只擷取部分檔案,性質雷同只是筆數多很多。

想請問有高手可以幫忙解答嗎,
麻煩了,謝謝!

准提部林 發表於 2021-11-24 11:29

1.當DATA所在地=盤點表B2時。
__B2底下還有其它"所在地", 怎解??

2.若遇到財產編號相同者,只列出頭一筆。
__只列一筆, 要不要累計?

3.將各所在地之資料分別輸出,以分頁區分。
__若同一所在地, 資料行數太多, 列印超過一頁, 怎解??

shuo1125 發表於 2021-11-24 11:39

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117832&ptid=23496]2#[/url] [i]准提部林[/i] [/b]
准大您好!
可能是我意思表達不清...如下回覆。

1.當DATA所在地=盤點表B2時。
__B2底下還有其它"所在地", 怎解??
->這部份是我表達不清楚..其實就是要列出各所在地資料,只是所在地會表達在盤點表B2。

2.若遇到財產編號相同者,只列出頭一筆。
__只列一筆, 要不要累計?
->不需累計,當成一筆就好。

3.將各所在地之資料分別輸出,以分頁區分。
__若同一所在地, 資料行數太多, 列印超過一頁, 怎解??
->若超過該行數,就列於第二、三頁以此類推...但若為不同所在地,是否就能接續在下頁中?

以上,麻煩了,謝謝。

samwang 發表於 2021-11-24 13:45

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117828&ptid=23496]1#[/url] [i]shuo1125[/i] [/b]

請測試看看,謝謝

samwang 發表於 2021-11-24 14:01

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117833&ptid=23496]3#[/url] [i]shuo1125[/i] [/b]

3.將各所在地之資料分別輸出,以分頁區分。
__若同一所在地, 資料行數太多, 列印超過一頁, 怎解??
->若超過該行數,就列於第二、三頁以此類推...但若為不同所在地,是否就能接續在下頁中?
[color=Blue]>> 可以,但是處理會比較複雜麻煩;4#是沒有考慮的超過1頁的問題
       建議:將每個各所在地,獨立放在個別新增工作表,不知是否可以?[/color]

samwang 發表於 2021-11-24 16:39

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117833&ptid=23496]3#[/url] [i]shuo1125[/i] [/b]


3.將各所在地之資料分別輸出,以分頁區分。
__若同一所在地, 資料行數太多, 列印超過一頁, 怎解??
->若超過該行數,就列於第二、三頁以此類推...但若為不同所在地,是否就能接續在下頁中?
[color=Blue]>> 接續下頁中,請測試看看,謝謝   [/color]

shuo1125 發表於 2021-11-24 17:09

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117838&ptid=23496]6#[/url] [i]samwang[/i] [/b]

samwang大大您好!

3.將各所在地之資料分別輸出,以分頁區分。
__若同一所在地, 資料行數太多, 列印超過一頁, 怎解??
->若超過該行數,就列於第二、三頁以此類推...但若為不同所在地,是否就能接續在下頁中?
>> 可以,但是處理會比較複雜麻煩;4#是沒有考慮的超過1頁的問題
       建議:將每個各所在地,獨立放在個別新增工作表,不知是否可以?
>>>若將所在地放至不同工作表也可並無強制...因以分頁模式處裡似乎困難度很高..剛跑似乎資料是有出來的
目前暫不確定資料量大時是否分頁會亂掉..因你又有幫忙寫一版,我晚點在測試完整版與原筆數是否正確。

謝謝你這麼有效率的幫忙處理及回覆...由衷感謝!

shuo1125 發表於 2021-11-24 21:51

[i=s] 本帖最後由 shuo1125 於 2021-11-24 21:57 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117838&ptid=23496]6#[/url] [i]samwang[/i] [/b]

samwang好!
[attach]34435[/attach][attach]34434[/attach]
建議:將每個各所在地,獨立放在個別新增工作表,不知是否可以?
>若以此方法做,請問該怎麼修正..?因測試後發現分頁會錯置以及有部分資料未帶入(如圖片)

另外有幾個問題想請問
一、T1 = T & "|" & Arr(i, 6)
     >這一段是判斷是否有符合財產編號嗎? "|"這個的用意是..?
二、xD1(T1) = 1: xD1(T & "/1") = xD1(T & "/1") + Arr(i, 14)
     >這段用法太高深..能夠解釋一下嗎?
三、將資料存入Arr陣列中時,此時Arr是視為物件嗎?字典xD也是物件嗎?有點無法理解...

以上,在煩請撥冗解答了..感謝!

samwang 發表於 2021-11-25 09:39

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117842&ptid=23496]8#[/url] [i]shuo1125[/i] [/b]

建議:將每個各所在地,獨立放在個別新增工作表,不知是否可以?
>若以此方法做,請問該怎麼修正..?因測試後發現分頁會錯置以及[color=Red]有部分資料未帶入[/color](如圖片)
[color=Blue]>> 如附件,請測試看看,如果還有資料未帶出來,請再上傳附件,謝謝[/color]

shuo1125 發表於 2021-11-25 10:22

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117845&ptid=23496]9#[/url] [i]samwang[/i] [/b]

samwang大大好!

經測試資料已無誤,上述問題若您有空再解答,如沒有就不耽擱你時間了...
非常感謝你撥空幫忙處理!

samwang 發表於 2021-11-25 10:24

[i=s] 本帖最後由 samwang 於 2021-11-25 10:25 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117842&ptid=23496]8#[/url] [i]shuo1125[/i] [/b]

另外有幾個問題想請問
一、T1 = T & "|" & Arr(i, 6)
      >這一段是判斷是否有符合財產編號嗎? [color=Blue]>> 若遇到財產編號相同者,只列出頭一筆。[/color]
        "|"這個的用意是..?[color=Blue] >> 串聯2個值中間的符號,可換成其它符號皆可[/color]
二、xD1(T1) = 1: xD1(T & "/1") = xD1(T & "/1") + Arr(i, 14)
      >這段用法太高深..能夠解釋一下嗎?  [color=Blue]>> 小記數量[/color]
三、將資料存入Arr陣列中時,此時Arr是視為物件嗎?字典xD也是物件嗎?有點無法理解...
       [color=Blue] >>不好意思,不太知道那些定義用詞,後學是半路出家的,看了網上前輩寫法,就一樣畫葫蘆[/color]

shuo1125 發表於 2021-11-25 18:05

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117847&ptid=23496]11#[/url] [i]samwang[/i] [/b]

感謝samwang大大幫忙解答

能理解並用於實例已是我所不及⋯
再次感謝您的幫忙!!

准提部林 發表於 2021-11-25 21:58

若資料多, 且每所在地的項目不超過999種, 可參考此方法:
放在同一頁, 每所在地底下加"分頁線", 使用預覽即可明白:
[attach]34440[/attach]

shuo1125 發表於 2021-11-26 08:53

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117864&ptid=23496]13#[/url] [i]准提部林[/i] [/b]

准大好!
因某些因素暫時無法做測試⋯
也感謝您花費精力及時間幫忙
感激不盡!

准提部林 發表於 2021-11-28 11:17

再發一版--純篩選複製至各分表:
[attach]34444[/attach]

准提部林 發表於 2021-11-28 18:12

少算一行:
.Rows(1).Resize(.Rows.Count ).Copy xS.[a4]
改成
.Rows(2).Resize(.Rows.Count - 1).Copy xS.[a4]

shuo1125 發表於 2021-11-29 18:41

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117878&ptid=23496]16#[/url] [i]准提部林[/i] [/b]

准大好!
經測試後兩種方式都無誤,
還特地花時間提供不同方法,
太感謝你了。

shuo1125 發表於 2021-12-2 22:20

[i=s] 本帖最後由 shuo1125 於 2021-12-2 22:23 編輯 [/i]

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117878&ptid=23496]16#[/url] [i]准提部林[/i] [/b]

准大好!
不好意思,突然想到個問題,如果我AT欄只想抓空白資料,這樣要如何多寫條件進去...
(因該欄會有S=銷售 R=報廢 O=其他等字碼,但這部分要排除)

附上圖[attach]34458[/attach]

可以再麻煩抽空幫忙解答嗎?

謝謝。

准提部林 發表於 2021-12-4 13:26

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117897&ptid=23496]18#[/url] [i]shuo1125[/i] [/b]

Sub TEST_A4()
Dim Arr, Brr, Cr, xD, vD, i&, j%, R&, K, T1$, T2$, TT$, N&, V%, xA As Range
tm = Timer
Call 清除
Set xD = CreateObject("Scripting.Dictionary")
Set vD = CreateObject("Scripting.Dictionary")
Arr = Range([DATA![color=red][b]at1[/b][/color]], [DATA!a65536].End(xlUp))
For i = 2 To UBound(Arr)
    [color=red][b]If Arr(i, 46) <> "" Then GoTo i01[/b][/color]   
    T1 = Arr(i, 11): T2 = Arr(i, 6): TT = T1 & T2
    If T1 = "" Or T2 = "" Or xD(TT) > 0 Then GoTo i01
    If xD(T1) = 0 Then Set vD(T1) = CreateObject("Scripting.Dictionary")
    xD(T1) = 1: xD(TT) = 1: vD(T1)(i) = ""
i01: Next i
'--------------------------------
Application.ScreenUpdating = False
Set xA = [盤點表!A1]: Cr = Array(1, 3, 6, 8, 10, 14, 13, 12)
For Each K In vD.keys
    R = vD(K).Count: N = N + 1
    ReDim Brr(1 To R + 1, 1 To 10)
    For i = 1 To R
        V = vD(K).keys()(i - 1)
        Brr(i + 1, 5) = "小計:": Brr(i + 1, 8) = Brr(i, 8) + Arr(V, 12)
        For j = 1 To 8:  Brr(i, j) = Arr(V, Cr(j - 1)): Next
    Next i
    [盤點表!A1:j3].Copy xA
    xA(2, 2) = K: xA(2, 10) = "頁次:" & N & "/" & vD.Count
    [盤點表!a4:j4].Copy xA(4).Resize(R, 10)
    xA(4).Resize(R + 1, 10).Value = Brr
    Set xA = xA(R + 5): xA.PageBreak = xlPageBreakManual '設定分頁線
Next
MsgBox Timer - tm
End Sub

shuo1125 發表於 2021-12-6 19:57

[b]回復 [url=http://forum.twbts.com/redirect.php?goto=findpost&pid=117908&ptid=23496]19#[/url] [i]准提部林[/i] [/b]

准大好!

感謝您的解答與答覆,
測試已OK。

祝您順心~

頁: [1] 2

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供