返回列表 上一主題 發帖

這種依時間運算的巨集要如何寫??

本帖最後由 GBKEE 於 2014-12-7 14:30 編輯

回復 15# 藍天麗池
VBA公式文字可用巨集錄製: 在公式所在的儲存格作輸入的動作
  1. Sub RecordPrice()
  2.     Dim i As Integer, 公式(1 To 2)
  3.     i = Cells(2, Columns.Count).End(xlToLeft).Column
  4.     公式(1) = "=MATCH(R[-1]C,R3C6:R50000C6,0) + 1"
  5.     公式(2) = "=IF(SUMIF(INDIRECT(""D""&R2C[-1]+1):INDIRECT(""D""&R2C),RC9,INDIRECT(""E""&R2C[-1]+1):INDIRECT(""E""&R2C))=0,"""",SUMIF(INDIRECT(""D""&R2C[-1]+1):INDIRECT(""D""&R2C),RC9,INDIRECT(""E""&R2C[-1]+1):INDIRECT(""E""&R2C)))"
  6.     With Range("J2")
  7.         If .Value = "" Then
  8.             .Cells = 公式(1)         '你的公式"
  9.             .Cells(2).Resize(200) = 公式(2)
  10.         ElseIf i >= .Column Then      '
  11.             Cells(2, i) = Cells(2, i).Value
  12.             Cells(3, i).Resize(200) = Cells(3, i).Resize(200).Value
  13.             Cells(2, i + 1) = 公式(1)
  14.             Cells(3, i + 1).Resize(200) = 公式(2)
  15.         End If
  16.     End With
  17. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 藍天麗池 於 2014-12-7 10:38 編輯

回復 14# GBKEE

改.rar (730.38 KB)
    G大我把要改版的程式上傳,麻煩你幫我看一下
如果照G大說的我有200個程式不就要打200列??    :'(  
附件中我要執行的就是8:45將公式寫到J2-J202,等到8:46將公式寫到K2-K202、且將J2-J202的公式寫成值,以此類推一直執行到最右邊也就是執行到13:45
上述部分有比較簡單的寫法嗎??

另外我可以跟G大交個朋友嗎??G大有FB嗎??或是line?

TOP

回復 13# 藍天麗池
查看VBA Offset 屬性 的說明
  1. .Offset( ,-1).Value = .Offset( ,-1).Value '左一欄:將公式回數值            
複製代碼
i: 傳回工作表最右邊的儲存格, 向左到最後有資料的儲存格的欄號
O欄在T欄的左邊不會影響的

如果5.修改程式增加公式數量,那6.的部分要修改嗎??
5增加公式數量,當然 6.的部分要修改所增加公式數量
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 藍天麗池 於 2014-12-7 09:19 編輯

回復 12# GBKEE

跟G大請教兩個問題:

1.我之前的想法是只要行列互換,所以如果只將With Sheets("RTD").Cells(i + 2, "T").Resize(, 7)改成With Sheets("RTD").Cells("T" , i + 2).Resize(5 ,) 這樣是可以的嗎??
2. .Offset(-1).Value = .Offset(-1).Value '上一列:將公式回數值            另外這行我就不會改了
3.如果1.的想法是正確的那之前下面的公式要怎麼改??

4.i = Cells(2, Columns.Count).End(xlToLeft).Column
    'i: 傳回工作表最右邊的儲存格, 向左到最後有資料的儲存格的欄號
    'Cells(列號, 欄號).END(向左到最後有資料的儲存格)
    'Columns.Count(工作表欄物件的總計)
以上是這次的新公式,請問G大這個新公式可以設定從哪一列開始嗎??因為我O欄之前有其他的東西,這樣會影響到嗎??

5. If .Value = "" Then
            .Cells = "公式A"          '你的公式
            .Cells(2) = "公式B"       '下一列的公式
以上是這次的新公式,G大是舉兩個為例,如果我要增加公式改成以下這樣是否正確
If .Value = "" Then
            .Cells = "公式A"          '你的公式
            .Cells(2) = "公式B"       '下一列的公式
           .Cells(3) = "公式C"       '下一列的公式
           .Cells(4) = "公式D"       '下一列的公式
                                       .
                                       .
                                       .
                                以此類推
6.ElseIf i >= .Column Then      '
             '這裡沒有.Cells 為這工作表以A1為基點的Cells
            Cells(2, i) = Cells(2, i).Value
            Cells(3, i) = Cells(3, i).Value
            Cells(2, i + 1) = "公式A" '下一欄給公式
            Cells(3, i + 1) = "公式B"
如果5.修改程式增加公式數量,那6.的部分要修改嗎??

抱歉G大問題有點多還請G大不吝指教,感謝

TOP

回復 11# 藍天麗池
  1. Option Explicit
  2. Dim NextTime As Date
  3. Sub RecordPrice()
  4.     Dim i As Integer
  5.     i = Cells(2, Columns.Count).End(xlToLeft).Column
  6.     'i: 傳回工作表最右邊的儲存格, 向左到最後有資料的儲存格的欄號
  7.     'Cells(列號, 欄號).END(向左到最後有資料的儲存格)
  8.     'Columns.Count(工作表欄物件的總計)
  9.     With Range("t2")
  10.         If .Value = "" Then
  11.             .Cells = "公式A"          '你的公式
  12.             .Cells(2) = "公式B"       '下一列的公式
  13.         ElseIf i >= .Column Then      '
  14.              '這裡沒有.Cells 為這工作表以A1為基點的Cells
  15.             Cells(2, i) = Cells(2, i).Value
  16.             Cells(3, i) = Cells(3, i).Value
  17.             Cells(2, i + 1) = "公式A" '下一欄給公式
  18.             Cells(3, i + 1) = "公式B"
  19.         End If
  20.     End With
  21. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 藍天麗池 於 2014-12-6 20:19 編輯

回復 9# GBKEE


    G大可以再幫我一次嗎??
改.rar (95.23 KB)

因為程式關係,所以這次要做點小修改,在麻煩G大一下

上次的程式是寫成往下執行,過一分鐘後再將前一個寫成值,這次我要將程式改成往右邊執行(就是這一分鐘執行T欄,下一分鐘執行U欄,且把T欄的公式寫為值,以此類推),請問一下G大,如果這樣的話程式要怎麼改呢??

簡單的說就是執行的內容不變,只是行列對調

感謝您

TOP

回復 9# GBKEE

G大真的很謝謝你,這樣OK了

TOP

回復 8# 藍天麗池

是這樣嗎?
  1. With Sheets("RTD").Cells(i + 2, "T").Resize(, 7)
  2.             .Offset(-1).Value = .Offset(-1).Value '上一列:將公式回數值
  3.             
  4.                     'T欄公式=IF(ISERROR(MATCH(U2,P:P,0)),"",MATCH(U2,P:P,0))
  5.             .Range("A1") = "=IF(ISERROR(MATCH(RC[1],P:P,0)),"""",MATCH(RC[1],P:P,0))"
  6.                     'U欄
  7.             .Range("B1") = IIf(Minute(Time) Mod 2 = 0, Application.Sum(Range("A1:C1")), Application.Sum(Range("A2:C2")))
  8.                     'V欄
  9.             .Range("C1") = Time
  10.                     'W欄公式=IF(ISERROR(INDIRECT("O"&T2)),"",INDIRECT("O"&T2))
  11.             .Range("D1") = "=IF(ISERROR(INDIRECT(""O""&RC[-3])),"""",INDIRECT(""O""&RC[-3]))"
  12.                     'X欄公式=IF(W2="","",IF(W2>54,-1,IF(W2<6,1,"")))
  13.             .Range("E1") = "=IF(RC[-1]="""","""",IF(RC[-1]>54,-1,IF(RC[-1]<6,1,"""")))"
  14.                     'Y欄公式=IF(ISERROR(INDIRECT("R"&T2)),Y1,INDIRECT("R"&T2))
  15.             .Range("F1") = "=IF(ISERROR(INDIRECT(""R""&RC[-5])),R[-1]C,INDIRECT(""R""&RC[-5]))"
  16.                     'Z欄公式=IF(ISERROR(Y2-Y1),"",Y2-Y1)
  17.             .Range("G1") = "=IF(ISERROR(RC[-1]-R[-1]C[-1]),"""",RC[-1]-R[-1]C[-1])"
  18.            
  19.         End With
  20.         
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 4# GBKEE

G大剛剛的回覆有點亂,以下才是真實版本(抱歉邏輯有點亂掉才會這樣)

    G大,剛剛上述的部分我已經修改完成了,目前執行上是OK的,不過跟G大說一聲抱歉,因為我跑完後發現這不是我要的結果

想在請教一下G大,如果我要把之前的那個程式改成函數出現在後一分鐘的儲存格,等到時間到在寫成值(主要是要看每秒鐘的變化,但是之前的程式執行後變成每分鐘到的時候才看的到數值),例如8:45分的時候將公式寫在8:46分相對應的儲存格,然後8:46分到的時候再將公式寫成值,請問一下G大這樣要怎麼改??

TOP

回復 4# GBKEE


    G大,剛剛上述的部分我已經修改完成了,目前執行上是OK的,不過跟G大說一聲抱歉,因為我跑完後發現這不是我要的結果,想在請教一下G大,如果我要把之前的那個程式改成函數還是在儲存格上面,但當每分鐘執行完後接值寫在儲存格內(主要是要看每秒鐘的變化,但是程式執行後變成每分鐘到的時候才看的到數值),而是不公式,請問一下G大這樣要怎麼改??

TOP

        靜思自在 : 站在半路,比走到目標更辛苦。
返回列表 上一主題