Board logo

標題: [發問] 請問一個巨集設定的問題 [打印本頁]

作者: lone_tiger0303    時間: 2010-5-24 13:32     標題: 請問一個巨集設定的問題

我想要一開啟excel檔就能自動執行附件需求
請問要如何設計巨集程式碼
謝謝[attach]857[/attach]
作者: Hsieh    時間: 2010-5-24 15:47

其實用公式就能解決
要用vba的話
  1. Private Sub Workbook_Open()
  2. Dim Ay(3, 2)
  3. Ay(0, 0) = 0: Ay(0, 1) = "忠誠客": Ay(1, 0) = 9.1: Ay(1, 1) = "久未回客": Ay(2, 0) = 12.1: Ay(2, 1) = "流失客"
  4. With Sheet1
  5.    Set rng = .Range(.[E2], .[E65536].End(xlUp))
  6.       For Each a In rng
  7.          If IsDate(a) Then
  8.          m = Round((Date - a) / 30, 2)
  9.          k = Application.VLookup(m, Ay, 2)
  10.          a.Offset(, 11).Resize(, 3) = Array(m, k, a.Offset(, -3) & "-" & k)
  11.          End If
  12.        Next
  13. End With
  14. End Sub
複製代碼

作者: lone_tiger0303    時間: 2010-5-25 14:03

本帖最後由 lone_tiger0303 於 2010-5-25 14:04 編輯

因為資料夾有上萬筆,所以想用巨集執行,以減少時間浪費
另外還有些問題再向請教您一下~~如副檔
還請您協助,謝謝
作者: Hsieh    時間: 2010-5-25 14:28

回復 3# lone_tiger0303


    請上傳你的xls檔案
別讓人家回覆你的問題,還要再做一個檔案測試
作者: lone_tiger0303    時間: 2010-5-25 14:59

本帖最後由 lone_tiger0303 於 2010-5-25 15:06 編輯

大人冤枉阿~~~
小弟按上傳附件時好像只接受圖檔耶
還是我哪裡操作錯誤
作者: Hsieh    時間: 2010-5-25 15:24

A,Y無對應時如何取值?
S日期怎樣取得?
請說明檔案欲操作流程為何
作者: lone_tiger0303    時間: 2010-5-25 15:36

檔案需求:
1.A~O欄的資料,S欄資料與Y~Z欄位資料會每月手動更新
2.E欄位的日期會因A欄位與Y欄位比對後,將相符的Z欄資料帶到E欄位,舉例:
A           E                                             Y     Z   
項目      日期                                                      項目   日期
AB     2009/5/8                                  AB    2010/1/1

因A欄AB巡Y欄找到相符項目AB,於是E欄日期會由2009/5/8→2010/1/1
作者: Hsieh    時間: 2010-5-25 17:55

回復 7# lone_tiger0303
  1. Private Sub CommandButton1_Click()
  2. Dim Ay(3, 2), My As Range, A As Range
  3. Ay(0, 0) = 0: Ay(0, 1) = "忠誠客": Ay(1, 0) = 9.1: Ay(1, 1) = "久未回客": Ay(2, 0) = 12.1: Ay(2, 1) = "流失客"
  4. With Sheet1
  5. For Each A In .Range(.[A2], .[A65536].End(xlUp))
  6.    Set My = .Columns("Y").Find(A, lookat:=xlWhole)
  7.    If Not My Is Nothing Then A.Offset(, 4) = My.Offset(, 1)
  8.    If A.Offset(, 18) < A.Offset(, 4) Then A.Offset(, 18) = ""
  9.    If A.Offset(, 18) > A.Offset(, 4) And A.Offset(, 19) = "" Then A.Offset(, 19) = DateAdd("m", 3, A.Offset(, 18))
  10.    If Date > A.Offset(, 19) Then A.Offset(, 18).Resize(, 2) = ""
  11. Next
  12.    Set rng = .Range(.[E2], .[E65536].End(xlUp))
  13.        For Each A In rng
  14.          If IsDate(A) Then
  15.          m = Application.Max(0, Round((Date - A) / 30, 2))
  16.          k = Application.VLookup(m, Ay, 2)
  17.          A.Offset(, 11).Resize(, 3) = Array(m, k, A.Offset(, -3) & "-" & k)
  18.          End If
  19.        Next
  20. End With
  21. End Sub
複製代碼

作者: lone_tiger0303    時間: 2010-5-26 12:10

感謝您的協助~~
後續有問題再向您請教
作者: lone_tiger0303    時間: 2010-5-26 14:35

If Date > A.Offset(, 19) Then A.Offset(, 18).Resize(, 2) = ""

請問這條程式碼的意思為何呢
作者: Hsieh    時間: 2010-5-26 16:30

If Date > A.Offset(, 19) Then A.Offset(, 18).Resize(, 2) = ""

請問這條程式碼的意思為何呢
lone_tiger0303 發表於 2010-5-26 14:35



    如果當天日期比A向右19欄的值大就將A向右18,19欄清空
此行為解決要記住3個月後日期,才在A向右19欄記住日期
當到期時就清空的意思
作者: lone_tiger0303    時間: 2010-5-31 11:19

很抱歉又要再打擾您了~~因為最近要做檔案資料管理~~所以可能會有一些問題陸陸續續請教您,還請您不吝指導!
問題如附件
[attach]1076[/attach]
作者: lone_tiger0303    時間: 2010-5-31 16:42

小誌~~抱歉
我有上傳~~只是好像未傳送出去~~下次會先稽核一下在離開
也麻煩Hsieh 大大協助解答~~感謝




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