標題:
加權指數歷史資料之排序問題
[打印本頁]
作者:
cudui
時間:
2012-4-18 18:14
標題:
加權指數歷史資料之排序問題
各位大大,
附件是可以設定要"擷取連續幾個月份"的加權指數歷史股價資料,
現在的問題是,
資料已經可以抓得下來,
但是...卻不知道怎樣寫VBA讓它進行排序,並刪除不必要的行列...
(有一個"排序後"的sheet,就是希望達到的結果!!)
拜請各位大大指教!!!
謝謝了!!
[attach]10492[/attach]
作者:
register313
時間:
2012-4-18 22:03
回復
1#
cudui
Sub yy()
c = Array(1, 2, 3, 4, 5, 11, 14)
With Sheets("加權歷史行情原始檔")
.[A9:E9].Copy Sheets("加權歷史行情-排序後").[A1]
.[K9].Copy Sheets("加權歷史行情-排序後").[F1]
.[N9].Copy Sheets("加權歷史行情-排序後").[G1]
n = .[a65536].End(xlUp).Row
a = .Range(.Cells(1, 1), .Cells(n, 14))
ReDim arr(1 To UBound(a), 1 To 7)
x = 1
For j = 1 To UBound(a)
For i = 1 To 7
If Mid(.Cells(j, 1), 4, 1) <> "/" Then
GoTo 123
Else: arr(x, i) = a(j, c(i - 1))
End If
Next i
x = x + 1
123
Next j
End With
With Sheets("加權歷史行情-排序後")
.Range([A2], [G2].End(xlDown)) = ""
.[A2].Resize(j - 1, 7) = arr
.[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
.Range([B2], [G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
End With
End Sub
複製代碼
作者:
GBKEE
時間:
2012-4-19 11:25
回復
1#
cudui
修改一下
[attach]10500[/attach]
作者:
GBKEE
時間:
2012-4-19 14:14
回復
5#
cudui
因為修改了檔案,所以沒貼上程式碼,加油一下就可以下載
作者:
cudui
時間:
2012-4-19 16:37
回復
2#
register313
請問大大:
為什麼我如果要在"加權歷史行情原始檔"的sheet中 執行這個巨集,
則會出現"應用程式或物件定義上的錯誤",
(在Sheets("加權歷史行情-排序後")中執行則不會有此問題....)
[attach]10511[/attach]
我試過,需要額外加上一行:
Sheets("加權歷史行情-排序後").Activate
才能在原始檔sheets中執行巨集??
Sheets("加權歷史行情-排序後").Activate
With Sheets("加權歷史行情-排序後")
.Range([A2], [G2].End(xlDown)) = ""
.[A2].Resize(j - 1, 7) = arr
.[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
.Range([B2], [G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
End With
複製代碼
究竟我應該怎麼改,才比較簡單正確??
謝謝~~
作者:
register313
時間:
2012-4-19 16:45
回復
7#
cudui
是我漏打了4個.
With Sheets("加權歷史行情-排序後")
.Range(.[A2], .[G2].End(xlDown)) = ""
.[A2].Resize(j - 1, 7) = arr
.[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
.Range(.[B2], .[G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
End With
複製代碼
在任何工作表下執行都可以
作者:
cudui
時間:
2012-4-19 17:10
回復
8#
register313
原來四個"."有差那麼多噢!!!
這四個"."是為了可以讓它在前面自動加"Sheets("加權歷史行情-排序後")"嗎??
作者:
GBKEE
時間:
2012-4-19 18:04
回復
9#
cudui
With 陳述式 在一個單一物件或一個使用者自訂型態上執行一系列的陳述式。
Sub Ex()
With Range("A1")
.Interior.ColorIndex = 5 '製定儲存格內部色彩在色盤中的索引值
.Value = .Interior.ColorIndex '儲存格的值=內部色彩在色盤中的索引值
End With
End Sub
複製代碼
作者:
cudui
時間:
2012-4-19 18:27
回復
10#
GBKEE
所以以下這二個敘述, [A2] or [G2]前,有"."和沒 ".", 有可能是參照的sheets會有不同嗎??
01.With Sheets("加權歷史行情-排序後")
02. .Range([A2], [G2].End(xlDown)) = ""
複製代碼
01.With Sheets("加權歷史行情-排序後")
02. .Range(.[A2], .[G2].End(xlDown)) = ""
複製代碼
作者:
register313
時間:
2012-4-19 19:12
回復
11#
cudui
With Sheets("加權")
.[A2] = "" ==> 加權工作表 之 A2儲存格 =""
[A2]="" ==> 目前作用之工作表 之 A2儲存格 =""
(未述明何工作表 則是 目前作用之工作表)
END WITH
作者:
cudui
時間:
2012-4-19 19:18
回復
12#
register313
瞭解了!
我原先是錯以為在 With Sheets("加權") END With 底下就會自動 使用 "加權"工作表...
作者:
GBKEE
時間:
2012-4-19 20:27
回復
12#
register313
[A2]="" ==> 目前
作用之工作表
之 A2儲存格 =""
程式碼 在 ThisWorkbook 或一般模組 是在 作用之工作表 沒錯的
但 程式碼如是在 工作表物件模組
是這一個工作表的A2儲存格
不是指作用中之工作表
作者:
bbojj
時間:
2012-4-21 10:14
可以將每一個儲存格之前都加上來源,例如 Range("A1") ==> Sheets("1").Range("A1"),這樣比較不會以後再執行程式碼的時候出現的結果不是自己想要的
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)