標題:
請問版上大大,這個要怎麼寫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#
藍天麗池
試試看
Option Explicit
Sub Ex()
Dim i As Integer, t As Integer
i = 1
Do While Cells(i, "F") <> ""
t = 0
Do
t = t + Cells(i, "e")
i = i + 1
Loop Until Cells(i - 1, "F") <> Cells(i, "F")
Cells(i - 1, "g") = t
Loop
End Sub
複製代碼
作者:
藍天麗池
時間:
2013-10-27 14:38
回復
2#
GBKEE
G大我有去試過了,但完全沒反應ㄟ,我將程式放在sheet1對吧?
作者:
GBKEE
時間:
2013-10-27 14:56
回復
3#
藍天麗池
程式碼複製在那個工作表模組上一定有反應的.
如果是任一個工作表模組上請用下面的程式碼.
Option Explicit
Sub Ex()
Dim i As Integer, t As Integer
i = 1
With ActiveSheet '指定工作表: ActiveSheet->作用中的工作表
Do While .Cells(i, "F") <> ""
t = 0
Do
t = t + .Cells(i, "e")
i = i + 1
Loop Until .Cells(i - 1, "F") <> .Cells(i, "F")
.Cells(i - 1, "g") = t
Loop
End With
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)
Dim i As Integer, t As Integer
i = 1
With ActiveSheet '指定工作表: ActiveSheet->作用中的工作表
Do While .Cells(i, "F") <> ""
複製代碼
同時,你的資料錄共計有 58559 列,i 型態宣告為 整數,所以會產生值的溢位訊息。
所以原本的 i As Integer 改成 i As Long (長整數),另外 Loop Until Cells(i - 1, "F") <> Cells(i, "F")
Do
t = t + Cells(i, "e")
i = i + 1
Loop Until Cells(i - 1, "F") <> Cells(i, "F")
複製代碼
在執行到最後時會產生 1004 的錯誤訊息,所以稍稍修改成如下:
Sub Ex()
Dim i As Long, t As Integer
i = 2
With Sheets(1) ' 指定工作表: ActiveSheet->作用中的工作表
Do
t = 0
Do
t = t + .Cells(i, "e")
i = i + 1
Loop Until .Cells(i - 1, "F") <> .Cells(i, "F") Or .Cells(i, "F") = ""
.Cells(i - 1, "g") = t
Loop Until i > 2 And .Cells(i, "F") = ""
End With
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/)