關於Excel排列加總問題,請高手幫忙

2011-12-01 9:49 am
我每天都需要做一份借書報表原始數據Excel如下,現想用VB等程式能完成至第二報表

圖片參考:http://imgcld.yimg.com/8/n/HA00485828/o/701112010005513873406260.jpg


第二報表為將同一戶口時間順序及將同日借書數量加總,想得出結果如下

圖片參考:http://imgcld.yimg.com/8/n/HA00485828/o/701112010005513873406271.jpg


因每日數據太大量,所以請各高手能幫忙
更新1:

回覆Chun Yuen問題 1. 第一報表的備註是不會有內容,轉至第二報表後再會加上 2. 第一報表所含資料其實都是未還書的,只是日期會有相同,其實是想程式先判斷同戶號同戶名的先排序日期,再將同戶號同戶名相同日期的未還書本加總 3. 其實第一報表是由借書系統產生出來的原始報表,第二報表是我每天以第一報表處理後而產生的 4. 基本上第二報表上的備註,是列印出來後才填寫

更新2:

其實備註欄不用理會,第一報表是每天都會由系統更新而匯出的Excel報表,第二報表是由第一報表整理後而出,再交給會計部追書

更新3:

唔得喔,話程式有錯誤喎,需唔需要我寄原始檔給你?如需要,請給我你的電郵

更新4:

出現"執行階段錯誤'1004' Class Range的Select方法失敗",VB Highlight了這一段:Range("D3").Select

更新5:

都係有問題,出現"執行階段錯誤'1004' Class Range的Select方法失敗",VB Highlight了這一段:Columns("D:D").Select 要唔要我Mail俾你試?

更新6:

冇出現錯誤,但係結果亦無乜點變,只有標題由圖書館名稱變左188呢個數字

回答 (3)

2011-12-04 10:04 am
✔ 最佳答案
我有以下好奇︰

1. 當第一報表重覆的資料有不同備註時,怎合併於第二報表﹖

2. 由於第一報表含所有資料(包括早期的),那麼,程式怎判斷哪些是需要轉至第二報表的新資料﹖

3. 如果用不存在於第二報表的資料作為轉至條件的話,當第一報表要修改舊資料時,第二報表怎辦﹖

4. 如果沒有轉至條件的話,每次都重新做一次的話,第二報表如果輸入了備註便會被抹去,那麼,其實第二報表是沒有作用的。

2011-12-02 14:30:43 補充:
你的意思是,每一天都有一個重新製作的第二報表,那麼,其實我還是有一點疑問︰

如果備註欄是第二報表列印後才用人手寫上的話… 咁到第二日你再整新的第二報表時,必定重覆了很多"昨天已列印資料"。難道,你用人眼將昨天與今天的第二報表逐行對,然後重新抄返一次已昨天已寫過的備註﹖............

2011-12-04 02:04:25 補充:
以下複製到模組後,在第一報表中執行。

Sub Bookcount()
cursht = ActiveSheet.Name
Sheets(cursht).Copy After:=Sheets(Worksheets.Count)
Sheets(Worksheets.Count).Select
Range("1:2").EntireRow.Delete
ttl = Range("A1").CurrentRegion.Rows.Count
Columns("D:D").Delete Shift:=xlToLeft
Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("I1"), Unique:=True
Columns("A:H").Delete Shift:=xlToLeft
Columns("A:A").Copy
Columns("D:D").Insert Shift:=xlToRight
Sheets(cursht).Range("D3").Copy
Sheets(Worksheets.Count).Range("D1").Select
ActiveSheet.Paste
Range("D2").FormulaArray = _
"=SUMPRODUCT((" & cursht & "!R4C1:R" & ttl + 2 & "C1=RC1)*(" & cursht & _
"!R4C3:R" & ttl + 2 & "C3=RC3)*(IF(ISNUMBER(VALUE(RIGHT(" & cursht & _
"!R4C4:R" & ttl + 2 & "C4,1))),VALUE(" & cursht & "!R4C4:R" & ttl + 2 & _
"C4),VALUE(LEFT(" & cursht & "!R4C4:R" & ttl + 2 & "C4,LEN(" & cursht & _
"!R4C4:R" & ttl + 2 & "C4)-1)))))"
Range("D2").Copy
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
Columns("D:D").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").CurrentRegion.Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlStroke, DataOption1:= _
xlSortNormal, DataOption2:=xlSortNormal
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormatLocal = "#""本"""
Sheets(cursht).Rows("1:2").Copy
Sheets(Worksheets.Count).Select
Rows("1:1").Insert Shift:=xlDown
Application.CutCopyMode = False
Range("A1").Select
End Sub


2011-12-04 03:05:32 補充:
我在回答區寫了一個macro,請試一試!

2011-12-04 18:10:18 補充:
你能否發現你的原始檔有甚麼可能的異常﹖... 是否啟動了保護工作表既功能﹖

2011-12-04 18:18:20 補充:
你可以嘗試開一個新的活頁簿,然後將所有資料複製到新活頁簿的工作表內再執行程式,記住要像你的例子一樣,第三行必須為標題行。

2011-12-05 17:58:41 補充:
=o= 呢句出問題真係諗唔通… 不過我測試時沒問題...

你試下將以下呢幾段︰
Range("D2").Copy
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
變成如下︰
[D2].AutoFill Range("D2:D" & Range("A1").CurrentRegion.Rows.Count)

睇下得唔得﹖

2011-12-06 17:53:36 補充:
唔洗,我諗就快解決到了!我以下落黎會出兩篇意見(009及010),因為字數所限009唔夠位貼,你將現在出錯果句一直到尾果句都換晒佢 (end sub唔洗換),睇下得唔得。

2011-12-06 17:53:55 補充:
[D:D].Copy
[D:D].PasteSpecial Paste:=xlPasteValues
[A1].CurrentRegion.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("C2"), Order2:=xlAscending, Header:=xlGuess

2011-12-06 17:56:10 補充:
[D2:D65536].NumberFormatLocal = "#""本"""
Sheets(cursht).[1:2].Copy
[1:1].Insert
Application.CutCopyMode = False

2011-12-07 16:03:31 補充:
我基於題目內的數據,自己模擬了一份,然後執行成功,所以macro是沒有問題的,明顯地,你的原始檔有點不同,至於甚麼不同… 我估唔到,其實你自己亦可以找出問題所在的,我建議你以下步驟︰

1. 不用系統製造的檔案,純自己模擬一份數據然後執行,這時應能成功;

2. 將系統製造的數據,逐少逐少咁複製到你成功執行的檔案中再測試,這時亦應不斷咁成功,直到出現問題你就會知問題係邊。

有以下兩點,你必須注意的是︰
a) 第三列必須為標題列;
b) 不要在macro製造出來的工作表執行macro。

2011-12-07 19:00:34 補充:
除了以上自我檢驗的步驟外,仲有另一樣野我所能諗到既,就係,你的題目例子中描述資料是由A欄至H欄,所以我無預你再有資料在H欄之後的其他欄,如有的話也會影響程式。解決方法是,複製A至H欄到新的工作表才執行macro 或者 刪除其他欄既資料才執行macro。

至此,我已經心力交瘁,最終問題能否解決就看你的熱誠及造化了,如不行的話,終極方案係再開一個新既知識+題目然後等其他高手大大幫忙 =o=""

希望幫到你~

2011-12-08 15:13:21 補充:
好奇一問,解決左未﹖

2011-12-08 16:36:39 補充:
嗯,在我既角度,程式其實係沒有錯… 所以你要自己學懂以小量資料去測試(甚至乎自己開新的空白活頁簿及自己打內容),因為咁樣就不受你原始檔既影響,然後將個測試範圍擴大,其實當小量資料測試可行的話就注定你最終會成功。
2011-12-08 11:52 pm
問題其實未解決,但係搵唔到邊度錯?
2011-12-02 7:28 am
sheet2 D4 =

sumproduct((sheet1!$B$4:$B$32=B4)*(sheet1!$C$4:$C$32=C4),sheet1!$D$4:$D$32)


收錄日期: 2021-04-20 11:51:38
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20111201000051KK00055

檢視 Wayback Machine 備份