Board logo

標題: 請問版上大大,這個要怎麼寫VBA [打印本頁]

作者: 藍天麗池    時間: 2013-10-24 15:50     標題: 請問版上大大,這個要怎麼寫VBA

A            B                  C                 D              E                  F                  G
08:45:00        7701        7703        7703        5        1        5
08:45:00        7701        7703        7701        -1        0        -1
08:45:00        7701        7703        7703        2        1        2
08:45:00        7701        7703        7701        -4        0       
08:45:00        7701        7703        7701        -1        0        -5(-4+ -1)
08:45:00        7701        7703        7703        5        1        5
08:45:00        7701        7703        7701        -1        0        -1
08:45:01        7701        7702        7702        1        1       
08:45:01        7701        7703        7703        2        1        3(1+2)
08:45:01        7701        7702        7701        -1        0       
08:45:01        7701        7702        7701        -3        0       
08:45:01        7701        7702        7701        -1        0       
08:45:01        7701        7702        7701        -1        0        -6(-1+(-3)+(-1)+(-1))
08:45:01        7701        7702        7702        3        1       
08:45:01        7701        7703        7703        7        1       
08:45:01        7701        7703        7703        1        1       
08:45:01        7701        7703        7703        10        1       
08:45:01        7701        7704        7704        5        1       
08:45:01        7701        7705        7705        15        1       
08:45:01        7701        7704        7704        1        1       
08:45:01        7701        7704        7704        2        1       
08:45:01        7703        7705        7705        2        1       
08:45:02        7703        7705        7705        1        1        47(3+7+1+10+5+15+1+2+2+1)
08:45:02        7703        7705        7703        -3        0       
08:45:02        7703        7705        7703        -3        0       
08:45:02        7703        7705        7703        -6        0       
08:45:02        7703        7705        7703        -5        0       
08:45:02        7703        7705        7703        -1        0       
08:45:02        7703        7705        7703        -3        0       
08:45:02        7702        7705        7702        -6        0       
08:45:02        7701        7705        7701        -1        0        -28(-3+(-3)+(-6)+(-5)+(-1)+(-3)+(-6)+(-1))


以上是資料格式,F欄是判別E欄是正值還是負值,正值為1負值為0,請問版上大大如果我要G欄顯示E欄的值VBA要怎麼寫,
簡單的說就是判別正負,連續一樣的就相加,遇到相反的就獨立顯示
作者: GBKEE    時間: 2013-10-24 16:43

回復 1# 藍天麗池
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Integer, t As Integer
  4.     i = 1
  5.     Do While Cells(i, "F") <> ""
  6.         t = 0
  7.         Do
  8.             t = t + Cells(i, "e")
  9.             i = i + 1
  10.         Loop Until Cells(i - 1, "F") <> Cells(i, "F")
  11.         Cells(i - 1, "g") = t
  12.     Loop
  13. End Sub
複製代碼

作者: 藍天麗池    時間: 2013-10-27 14:38

回復 2# GBKEE


    G大我有去試過了,但完全沒反應ㄟ,我將程式放在sheet1對吧?
作者: GBKEE    時間: 2013-10-27 14:56

回復 3# 藍天麗池
程式碼複製在那個工作表模組上一定有反應的.
如果是任一個工作表模組上請用下面的程式碼.
  1. Option Explicit
  2. Sub Ex()
  3.     Dim i As Integer, t As Integer
  4.     i = 1
  5.     With ActiveSheet   '指定工作表: ActiveSheet->作用中的工作表
  6.         Do While .Cells(i, "F") <> ""
  7.             t = 0
  8.             Do
  9.                 t = t + .Cells(i, "e")
  10.                 i = i + 1
  11.             Loop Until .Cells(i - 1, "F") <> .Cells(i, "F")
  12.             .Cells(i - 1, "g") = t
  13.         Loop
  14.     End With
  15. End Sub
複製代碼

作者: 藍天麗池    時間: 2013-10-27 15:25

回復 4# GBKEE


    還是沒反應ㄟ,G大你指的反應它會自己跳出數字嗎??
作者: GBKEE    時間: 2013-10-27 15:29

回復 5# 藍天麗池
請上傳檔案看看
作者: 藍天麗池    時間: 2013-10-27 21:14

回復 6# GBKEE
作者: c_c_lai    時間: 2013-10-28 07:26

本帖最後由 c_c_lai 於 2013-10-28 07:32 編輯

回復 7# 藍天麗池
不執行的原因出自在 [F1] 為空白,而且 i 之初使設定值為 1,所以 Do While 一開始便未能執行:(修改成 i = 2)
  1.     Dim i As Integer, t As Integer
  2.     i = 1
  3.     With ActiveSheet   '指定工作表: ActiveSheet->作用中的工作表
  4.         Do While .Cells(i, "F") <> ""
複製代碼
同時,你的資料錄共計有 58559 列,i 型態宣告為 整數,所以會產生值的溢位訊息。
所以原本的  i As Integer 改成  i As Long (長整數),另外 Loop Until Cells(i - 1, "F") <> Cells(i, "F")

  1.        Do
  2.             t = t + Cells(i, "e")
  3.             i = i + 1
  4.         Loop Until Cells(i - 1, "F") <> Cells(i, "F")
複製代碼
在執行到最後時會產生 1004 的錯誤訊息,所以稍稍修改成如下:
  1. Sub Ex()
  2.     Dim i As Long, t As Integer
  3.    
  4.     i = 2
  5.     With Sheets(1)   ' 指定工作表: ActiveSheet->作用中的工作表
  6.         Do
  7.             t = 0
  8.             Do
  9.                 t = t + .Cells(i, "e")
  10.                 i = i + 1
  11.             Loop Until .Cells(i - 1, "F") <> .Cells(i, "F") Or .Cells(i, "F") = ""
  12.             .Cells(i - 1, "g") = t
  13.         Loop Until i > 2 And .Cells(i, "F") = ""
  14.     End With
  15. End Sub
複製代碼
這也是 GBKEE 版大要你附上檔案的緣故,因為無檔案提供實作測試,
一般只能天馬行空,(想像中) 做概略的分析解說了!
作者: GBKEE    時間: 2013-10-28 16:49

回復 8# c_c_lai
沒想到有這錯誤點,感謝修正
作者: 藍天麗池    時間: 2013-10-28 20:06

回復 8# c_c_lai

感謝大大為小弟解惑
作者: 藍天麗池    時間: 2013-10-28 20:06

回復 9# GBKEE


    G大感謝
作者: ui123    時間: 2013-10-29 19:50

感謝   前輩提供~看過受益良多!!!
作者: Andy2483    時間: 2024-1-12 14:22

本帖最後由 Andy2483 於 2024-1-12 14:25 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列,學習方案如下,請各位前輩指教
執行前:
[attach]37287[/attach]

執行結果:
[attach]37288[/attach]

Option Explicit
Sub TEST()
Dim Brr, V%, V1%, V2%, i&, N&
Brr = Range([E1], Cells(Rows.Count, "E").End(3)(2))
N = UBound(Brr) - 1
For i = 2 To N
   V1 = Val(Brr(i, 1))
   V2 = Val(Brr(i + 1, 1))
   Brr(i - 1, 1) = ""
   V = V + V1
   If V1 * V2 > 0 Then GoTo i01
   Brr(i - 1, 1) = V: V = 0
i01: Next
[H2].Resize(N - 1, 1) = Brr
End Sub




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