Board logo

標題: 如何每日更新不同日期的檔案,順便計算儲存格數?? [打印本頁]

作者: zaq370    時間: 2011-8-27 15:16     標題: 如何每日更新不同日期的檔案,順便計算儲存格數??

本帖最後由 zaq370 於 2011-8-28 00:28 編輯

如何每日更新不同日期的檔案,順便計算儲存格數??(如附檔)

我公司有一個每日更新的檔案
範例黨內的  a,b,c,d,e 是狀態  1,2,3,4,5 是去0827或0828檔案的狀態索取出資料並計算每個狀態有多少個??

我問題是,我要在每日更新檔案再開啟時,可以自動更新裡面狀態的數據(或是設一個按鈕更新也可以),譬如說,今日是08/27就抓0827檔名的資料,明天就抓0828檔名的資料。


[attach]7620[/attach]
作者: GBKEE    時間: 2011-8-27 15:46

回復 1# zaq370
我已困擾很久
可以看看 你嘗試的程式碼嗎?
作者: Hsieh    時間: 2011-8-27 16:16

回復 1# zaq370
試試看
  1. Private Sub Workbook_Open()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. wb = Format(Date, "mmdd")
  4. With Workbooks.Open(ThisWorkbook.Path & "\" & wb & ".xls")
  5. With .Sheets(1)
  6. For Each a In .Range(.[I2], .[I2].End(xlDown))
  7.   d(a.Value) = d(a.Value) + 1
  8. Next
  9. End With
  10. .Close
  11. End With
  12. With Sheets(1)
  13. For Each a In .Range(.[A2], .[A2].End(xlDown))
  14. a.Offset(, 1) = d(a.Value)
  15. Next
  16. End With
  17. End Sub
複製代碼

作者: zaq370    時間: 2011-8-28 00:28

回復 3# Hsieh


    感謝大大!!

可以使用!!不好意思,我是新手!

有一句程式碼不太懂"a.Offset(, 1) = d(a.Value)"
這句的意思是指???
VBA的程式碼有點難懂!!>"<
作者: Hsieh    時間: 2011-8-28 00:32

回復 4# zaq370


    能理解a代表甚麼嗎?
了解a的意義,再去看offset函數的說明
d是一個字典物件變數,請先爬文了解Dictionary物件的用法
作者: zaq370    時間: 2011-8-30 15:23

本帖最後由 zaq370 於 2011-8-31 11:06 編輯

回復 5# Hsieh

大哥你好,再拜託一下囉,現在又有一個問題,比如想子在隔壁欄位抓取上個月同一日的資料(若遇周六日與假日則抓取前一日),這個語法要如何使用

譬如說,今天是8/31號,隔壁欄位要抓取7/31日的資料,但7/31是周日,則要抓取7/29的資料
作者: zaq370    時間: 2011-8-31 13:29

回復 5# Hsieh


Sub Last_month()
Dim A As Range
Dim TheDate As Date

Set d = CreateObject("Scripting.Dictionary")

TheDate = Date

diff = DatePart("w", TheDate, vbUseSystem)


rr = DateAdd("d", (diff - 35), TheDate)

wb = Format(rr, "mmdd")

tt = Format(rr, "mm")

With Workbooks.Open(ThisWorkbook.Path & "\100" + tt & "\" & "NOC" + wb & ".xls")

   With .Sheets(1)
      For Each A In .Range(.[I2], .[I2].End(xlDown))
         If IsEmpty(d(A.Value)) Then
         d(A.Value) = Array(1, A.Offset(, 7).Value)
         Else
         ar = d(A.Value)
         ar(0) = ar(0) + 1
         ar(1) = ar(1) + A.Offset(, 7).Value
         d(A.Value) = ar
         End If
      Next
   End With
   
   
      
   .Close
End With
With Sheet1
For i = 5 To .[B65536].End(xlUp).Row Step 2
Set A = .Cells(i, 2)
A.Offset(, 4).Resize(2, 1) = Application.Transpose(d(A.Value))
Next
.Range("f19").Formula = "=f5+f7+f9+f11+f13+f15+f17"
.Range("f20").Formula = "=f6+f8+f10+f12+f14+f16+f18"
.Range("f45").Formula = "=f21+f33+f35+f37+f39+f41+f43"
.Range("f46").Formula = "=f22+f34+f36+f38+f40+f42+f44"
.Range("f47").Formula = "=f19+f45+f23+f25+f27+f29+f31"
.Range("f48").Formula = "=f20+f46+f24+f26+f28+f30+f32"

End With
End Sub

----------------------------------------------

大哥:

目前是可以抓取上個月同一日的檔案,若遇假日或六日要往前推前一個工作日,要如何改?例如:7/31是星期日,要抓7/29,或是9/12中秋節,則要抓9/9檔案資料,拜託!!
作者: Hsieh    時間: 2011-8-31 13:38

回復 7# zaq370

從檔案中無法跟你的敘述配合,請上傳檔案說明
作者: zaq370    時間: 2011-8-31 14:20

回復 8# Hsieh


    不好意思!!忘記加檔案!!

[attach]7652[/attach]
作者: Hsieh    時間: 2011-8-31 16:13

回復 9# zaq370

應是檔名問題吧
myday = DateAdd("m", -1, Date) - (Weekday(DateAdd("m", -1, Date), vbMonday) - 5)
wb = Format(myday, "mmdd")
tt = Format(myday, "mm")
With Workbooks.Open(ThisWorkbook.Path & "\100" & tt & "\" & "NOC" + wb & ".xls")
作者: zaq370    時間: 2011-8-31 17:59

回復 10# Hsieh


    大哥,很感激你的解答,我覺得應該不是檔名的問題吧!現在今天是可以抓到7/29,但明天9/1日,卻抓了8/5日的資料而不是8/1日

若像這種排除六日算工作天  利用workday函數會比較好嗎?!
作者: Hsieh    時間: 2011-8-31 18:44

回復 11# zaq370

myday = Application.WorkDay(DateAdd("m", -1, Date), IIf(Weekday(DateAdd("m", -1, Date), vbMonday) > 5, -1, 0))'前一個月
wb = Format(myday, "mmdd")
tt = Format(myday, "mm")
With Workbooks.Open(ThisWorkbook.Path & "\100" & tt & "\" & "NOC" + wb & ".xls")
不過這樣的情形如果大小月不同時不知道你要怎麼抓資料
作者: zaq370    時間: 2011-8-31 20:16

回復 10# Hsieh


    是喔!! 若用 if~~~end if 去判斷六日的話,會有大小月的問題嗎?!
作者: zaq370    時間: 2011-9-2 11:53

回復 10# Hsieh


    大哥,謝謝你的幫忙,我測試過,沒有大小月的問題!!




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