Board logo

標題: 加權指數歷史資料之排序問題 [打印本頁]

作者: cudui    時間: 2012-4-18 18:14     標題: 加權指數歷史資料之排序問題

各位大大,

附件是可以設定要"擷取連續幾個月份"的加權指數歷史股價資料,
現在的問題是,
資料已經可以抓得下來,
但是...卻不知道怎樣寫VBA讓它進行排序,並刪除不必要的行列...
(有一個"排序後"的sheet,就是希望達到的結果!!)

拜請各位大大指教!!!
謝謝了!!

[attach]10492[/attach]
作者: register313    時間: 2012-4-18 22:03

回復 1# cudui
  1. Sub yy()
  2. c = Array(1, 2, 3, 4, 5, 11, 14)
  3. With Sheets("加權歷史行情原始檔")
  4.   .[A9:E9].Copy Sheets("加權歷史行情-排序後").[A1]
  5.   .[K9].Copy Sheets("加權歷史行情-排序後").[F1]
  6.   .[N9].Copy Sheets("加權歷史行情-排序後").[G1]
  7.   n = .[a65536].End(xlUp).Row
  8.   a = .Range(.Cells(1, 1), .Cells(n, 14))
  9.   ReDim arr(1 To UBound(a), 1 To 7)
  10.   x = 1
  11.   For j = 1 To UBound(a)
  12.     For i = 1 To 7
  13.       If Mid(.Cells(j, 1), 4, 1) <> "/" Then
  14.         GoTo 123
  15.       Else: arr(x, i) = a(j, c(i - 1))
  16.       End If
  17.     Next i
  18.     x = x + 1
  19. 123
  20.   Next j
  21. End With
  22. With Sheets("加權歷史行情-排序後")
  23.   .Range([A2], [G2].End(xlDown)) = ""
  24.   .[A2].Resize(j - 1, 7) = arr
  25.   .[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
  26.   .Range([B2], [G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
  27. End With
  28. 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中執行巨集??
  1. Sheets("加權歷史行情-排序後").Activate

  2.    With Sheets("加權歷史行情-排序後")
  3.      .Range([A2], [G2].End(xlDown)) = ""
  4.      .[A2].Resize(j - 1, 7) = arr
  5.      .[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
  6.      .Range([B2], [G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
  7.    End With
複製代碼
究竟我應該怎麼改,才比較簡單正確??
謝謝~~
作者: register313    時間: 2012-4-19 16:45

回復 7# cudui

是我漏打了4個.
  1. With Sheets("加權歷史行情-排序後")
  2.   .Range(.[A2], .[G2].End(xlDown)) = ""
  3.   .[A2].Resize(j - 1, 7) = arr
  4.   .[A1].Sort Key1:=.[A1], Order1:=xlAscending, Header:=xlGuess
  5.   .Range(.[B2], .[G2].End(xlDown)).NumberFormatLocal = "#,##0.00"
  6. End With
複製代碼
在任何工作表下執行都可以
作者: cudui    時間: 2012-4-19 17:10

回復 8# register313

原來四個"."有差那麼多噢!!!
這四個"."是為了可以讓它在前面自動加"Sheets("加權歷史行情-排序後")"嗎??
作者: GBKEE    時間: 2012-4-19 18:04

回復 9# cudui
With 陳述式    在一個單一物件或一個使用者自訂型態上執行一系列的陳述式。
  1. Sub Ex()
  2.     With Range("A1")
  3.         .Interior.ColorIndex = 5       '製定儲存格內部色彩在色盤中的索引值
  4.         .Value = .Interior.ColorIndex   '儲存格的值=內部色彩在色盤中的索引值
  5.     End With
  6. End Sub
複製代碼

作者: cudui    時間: 2012-4-19 18:27

回復 10# GBKEE

所以以下這二個敘述, [A2] or [G2]前,有"."和沒 ".", 有可能是參照的sheets會有不同嗎??
  1. 01.With Sheets("加權歷史行情-排序後")

  2. 02.  .Range([A2], [G2].End(xlDown)) = ""
複製代碼
  1. 01.With Sheets("加權歷史行情-排序後")

  2. 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/)