標題:
[發問]
(已解決)計算最近一次漲跌價幅度
[打印本頁]
作者:
freeffly
時間:
2011-6-21 17:43
標題:
(已解決)計算最近一次漲跌價幅度
本帖最後由 freeffly 於 2012-2-22 17:00 編輯
如附檔
我想用最新的月份(用月份那一列判斷,還沒到的月份不會顯示)
與前一次交易的月份的價格作計算
請問這各要怎麼寫?
[attach]6726[/attach]
作者:
luhpro
時間:
2011-6-23 00:27
Sub nn()
Dim lRow As Long
lRow = Rows.Count
Do Until lRow = 1
lRow = Cells(lRow, 13).End(xlUp).Row
If Cells(lRow, 12) <> 0 And Cells(lRow, 12) <> "" Then
Cells(lRow, 14) = (Cells(lRow, 13) - Cells(lRow, 12)) / Cells(lRow, 12)
Else
Cells(lRow, 14) = (Cells(lRow, 13) - Cells(lRow, Cells(lRow, 13).End(xlToLeft).Column)) / Cells(lRow, Cells(lRow, 12).End(xlToLeft).Column)
End If
lRow = lRow - 1
Loop
End Sub
複製代碼
作者:
freeffly
時間:
2011-6-23 12:34
回復
2#
luhpro
這各方式可以
不過我想問一下如果最近一次不是在最後一欄
這種方式要如何改?
作者:
GBKEE
時間:
2011-6-23 16:14
本帖最後由 GBKEE 於 2011-7-29 20:25 編輯
回復
3#
freeffly
Sub Ex()
Dim C() As Integer, i As Integer, ii As Integer
For i = 2 To Cells(Rows.Count, "M").End(xlUp).Row
'迴圈 從第2列開始 到(To) M欄最底端(Rows.Count) 往上到有資料(End(xlUp))的列號
If Application.CountA(Cells(i, "B").Resize(, 12)) >= 2 Then 'B欄Resize(擴充)12欄: 到M欄
ReDim C(1) As Integer '重新宣告陣列
For ii = 13 To 2 Step -1 '迴圈 間隔(Step) -1 :由大往小 (下)
If Cells(i, ii) <> "" Then
If (C(0)) = 0 Then
C(0) = Cells(i, ii)
ElseIf C(1) = 0 Then
C(1) = Cells(i, ii)
End If
If C(0) <> 0 And C(1) <> 0 Then '找到最接近的兩數
Cells(i, "N") = (C(0) - C(1)) / C(1)
Exit For
End If
End If
Next
End If
Next
End Sub
複製代碼
作者:
luhpro
時間:
2011-6-28 22:07
本帖最後由 luhpro 於 2011-6-28 22:09 編輯
回復
3#
freeffly
那就變成從最末一列到第二列都要執行.
然後先判斷 12 月那欄是否有資料,
若有則執行原先程式中的那個片段,
若無則往左尋找最末兩筆資料,
若此兩筆資料其中一筆在 A 欄則不做任何計算, (因 A 攔不是我們要計算的資料)
否則就將此兩欄資料做相應的計算, 程式如下:
Sub nn()
Dim iCol1%, iCol2%
Dim lRows As Long, lRow As Long
lRows = Cells(Rows.Count, 1).End(xlUp).Row
For lRow = lRows To 2 Step -1
If Cells(lRow, 13) <> 0 And Cells(lRow, 13) <> "" Then
If Cells(lRow, 12) <> 0 And Cells(lRow, 12) <> "" Then
Cells(lRow, 14) = (Cells(lRow, 13) - Cells(lRow, 12)) / Cells(lRow, 12)
Else
Cells(lRow, 14) = (Cells(lRow, 13) - Cells(lRow, Cells(lRow, 13).End(xlToLeft).Column)) / Cells(lRow, Cells(lRow, 12).End(xlToLeft).Column)
End If
Else
iCol1 = Cells(lRow, 13).End(xlToLeft).Column
iCol2 = Cells(lRow, iCol1).End(xlToLeft).Column
If iCol1 <> 1 And iCol2 <> 1 Then
Cells(lRow, 14) = (Cells(lRow, iCol1) - Cells(lRow, iCol2)) / Cells(lRow, iCol2)
End If
End If
Next lRow
End Sub
複製代碼
作者:
freeffly
時間:
2011-7-29 16:51
回復
5#
luhpro
看起來相當複雜喔
謝謝大大回覆
先收下來研究
作者:
freeffly
時間:
2011-7-29 16:52
回復
4#
GBKEE
謝謝大大回覆
一樣先收下來試試看
作者:
freeffly
時間:
2011-7-29 17:12
回復
4#
GBKEE
兩位的方式都可以執行
不過大大的方式比較簡單一點
有一些方式沒用過
不知道大大可以大略講解一下嗎
作者:
freeffly
時間:
2011-8-2 14:54
回復
4#
GBKEE
謝謝大大註解
ReDim C(1) As Integer '重新宣告陣列
請問這裡為什麼要重新宣告?
重新宣告時C()裡面放1或0有沒有差?
作者:
GBKEE
時間:
2011-8-2 15:47
回復
9#
freeffly
If Application.CountA(Cells(i, "B").Resize(, 12)) >= 2 Then 'B欄Resize(擴充)12欄: 到M欄
上式 是檢查 到有2個數字以上
ReDim C(1) As Integer '重新宣告陣列 ->歸零 C(0), C(1) 設定
最右邊最接近
的2個數字
作者:
freeffly
時間:
2011-8-8 14:36
回復
10#
GBKEE
謝謝回覆
對於這部分我還要在理解才行
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)