返回列表 上一主題 發帖

[發問] 請問一個巨集設定的問題

[發問] 請問一個巨集設定的問題

我想要一開啟excel檔就能自動執行附件需求
請問要如何設計巨集程式碼
謝謝

其實用公式就能解決
要用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
複製代碼
學海無涯_不恥下問

TOP

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

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

簡報1.jpg (64.84 KB)

簡報1.jpg

TOP

回復 3# lone_tiger0303


    請上傳你的xls檔案
別讓人家回覆你的問題,還要再做一個檔案測試
學海無涯_不恥下問

TOP

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

大人冤枉阿~~~
小弟按上傳附件時好像只接受圖檔耶
還是我哪裡操作錯誤

巨集需求.zip (13.43 KB)

TOP

A,Y無對應時如何取值?
S日期怎樣取得?
請說明檔案欲操作流程為何
學海無涯_不恥下問

TOP

檔案需求:
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

TOP

回復 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
複製代碼
學海無涯_不恥下問

TOP

感謝您的協助~~
後續有問題再向您請教

TOP

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

請問這條程式碼的意思為何呢

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題