Board logo

標題: [發問] 關於(貼好資料後,自動將其他格位的公式往下拉的問題) [打印本頁]

作者: yagami12th    時間: 2012-12-9 00:13     標題: 關於(貼好資料後,自動將其他格位的公式往下拉的問題)

這是一個關於自動將公式下拉的問題,請教各位大大,如何用vba指令完成此動作,資料說明如下:
假設表1的a欄b欄c欄的最後一欄已經貼好今天的數值,如何自動在d欄與e欄的最後一列的公式往下拉一格完成自動運算



表1
a欄        b欄          c欄           d欄                        e欄
日期      最高價     最低價      最高-最低價        最高價/最低價
1/1        8000        7900        100                       1.01
1/2        8100        8000        100                       1.01
1/3        8150        8000
作者: GBKEE    時間: 2012-12-9 10:32

回復 1# yagami12th
是這樣嗎?
  1. Option Explicit
  2. Sub Ex()
  3.     [D2:E2].AutoFill Destination:=Range("D2:E" & [C2].End(xlDown).Row) ', Type:=xlFillCopy
  4. End Sub
複製代碼

作者: yagami12th    時間: 2012-12-9 13:53

回復 2# GBKEE

謝謝GBKEE大,我照這個嘗試改寫看看,因為昨晚試的時候,想把公式自動往下拉到最後一欄,但昨天用錄制的方式觀察時,它會一直用有欄位數目的程式碼..
作者: yagami12th    時間: 2012-12-9 14:09

回復 2# GBKEE

謝謝GBKEE大的解答

但有另一個問題,假設表1的a欄b欄c欄的最後一欄已經貼好今天的數值,自動在d欄與e欄的最後一列的公式往下拉一格完成自動運算,
但因為8:45之前b4跟c4欄(8150跟8000)是沒有資料的,所以想試寫兩種條件判斷式,想請教如何寫這個啟動條件:

第一種:因8:45之前在b4欄跟c4欄是空白沒資料的,如果8:45有資料進來(不為空白,則執行某巨集if cells(4,3)<>"" then .....  <<<<不知正不正確

第二種:這一種是設定成時間啟動,在8:45:05秒時,則執行...

表1
a欄        b欄          c欄           d欄                        e欄
日期      最高價     最低價      最高-最低價        最高價/最低價
1/1        8000        7900        100                       1.01
1/2        8100        8000        100                       1.01
1/3        8150        8000
作者: GBKEE    時間: 2012-12-9 14:37

回復 4# yagami12th
  1. Option Explicit
  2. Private Sub Workbook_Open()
  3.     If [COUNTA(Sheet1!D2:E2)] = 2 Then     'D2:E22. 都有資料     'Sheet1! : 為工作表名稱
  4.     'If Application.CountA(Sheet1.[D2:E2]) = 2 Then              'Sheet1. : 為工作表模組名稱
  5.     'If Application.CountA(Sheets("Sheet1").[D2:E2]) = 2 Then
  6.         Ex
  7.     Else
  8.         Application.OnTime #8:45:00 AM#, "EX"                  'EX 在一般模組
  9.         'Application.OnTime #8:45:00 AM#, "EX"                  'EX 在一般模組
  10.         'Application.OnTime #8:45:00 AM#, "ThisWorkbook.EX"    'EX 在物件模組
  11.         'Application.OnTime TimeValue("8:45:00"), "EX"         'EX 在一般模組
  12.         'Application.OnTime Now + TimeValue("0:0:30"), "EX"    '30秒後執行EX
  13.     End If
  14. End Sub
  15. Sub Ex()
  16.     With Sheet1
  17.     .[D2:E2].AutoFill Destination:=.Range("D2:E" & .[C2].End(xlDown).Row) ', Type:=xlFillCopy
  18.     End With
  19. End Sub
複製代碼

作者: yagami12th    時間: 2012-12-9 14:54

回復 5# GBKEE

謝謝GBKEE大,關於程式碼中的第三行是用"方法一"的意思嗎?有一點看不懂,想請教GBKEE大,不過後面比較看的懂,用ontime的部份應該是"方法二"
作者: GBKEE    時間: 2012-12-9 15:21

回復 6# yagami12th
3式都是工作表函數"=COUNTA(D2:E2)"
方法一  計算 D2:E2 的資料數
[COUNTA(Sheet1!D2:E2)]                                                 [  ** Excel程式的物件,函數,名稱(不可是變數  ) **    ]   
Application.CountA(Sheet1.[D2:E2])                              Application.工作表函數(vba支援的)
Application.CountA(Sheets("Sheet1").[D2:E2]) <=>Application.CountA(Sheets("Sheet1").Range("D2:E2"))
作者: yagami12th    時間: 2012-12-9 15:36

回復 7# GBKEE

謝謝GBKEE大,正在消化且改寫中,先試試看會不會成功。




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