返回列表 上一主題 發帖

[發問] 篩選資料並且放到新的Sheet裡

回復 13# candy516
你1樓的訴求不是這樣?
還有其他想法說說看

TOP

回復 11# GBKEE


成功了!
前輩您所寫的程式是不是只能單獨選一支股票?

TOP

回復 9# candy516
股票代號: 有誤
表示在Sheets("Sheet1") 沒有用滑鼠選定股票代號
你的檔案Sheets("Sheet1")是選在 A1  "證券代碼"
請在Sheets("Sheet1")的A欄  選定一家的 證券代碼 再試試

TOP

回復 8# candy516


    x = Application.Max(3, C.Row - 14)
是因為要算找到日期的位置往上14格的列號
若往上14格的列號只有<=3就要以3作為開始抓資料的列位
所以若你要抓30天資料這邊也要改
x = Application.Max(3, C.Row - 29)
學海無涯_不恥下問

TOP

回復 7# GBKEE

謝謝前輩!^^

報酬率(test).rar (309.77 KB)

TOP

回復 6# Hsieh


  請問Hsieh 前輩~
這兩次的程式碼差別最主要是"x = Application.Max(3, C.Row - 14)"嗎?代表意思是?!
如果我要改抓除息日後30日的報酬是不是將部分程式碼改掉即可?!
If Not C Is Nothing And Not B Is Nothing Then
x = Application.Max(3, C.Row - 14)
   Set B1 = .[A1:A2]
   Set B2 = B.Resize(2, 1)
   Set Rng = .Cells(x, 1).Resize(30, 1)
   Set Rng1 = .Cells(x, B.Column).Resize(30, 1)
   With sht
      B1.Copy .Cells(r, k)
      B2.Copy .Cells(r, k + 1)
      Rng.Copy .Cells(r + 2, k)
      Rng1.Copy .Cells(r + 2, k + 1)
   End With
   k = IIf(k = 255, 1, k + 2)
   r = IIf(k = 1, r + 33, r)
   Else
   MsgBox "無此除權資料"

謝謝您!

TOP

回復 3# candy516
傳檔來看看

TOP

回復 5# candy516
日期順序看錯,要往上15天才對
順便將無資料條件改一下
  1. Sub ex()
  2. Dim A As Range, B As Range, B1 As Range, B2 As Range, C As Range, Rng As Range, Rng1 As Range, d As Object
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set sht = Sheets.Add(after:=Sheets(1))
  5. Application.ScreenUpdating = False
  6. With Sheet1
  7.    For Each A In .Range(.[A2], .[A65536].End(xlUp))
  8.       mystr = A & "," & Left(A.Offset(, 1), 4)
  9.       d(mystr) = DateValue(Format(A.Offset(, 1), "0000/00/00"))
  10.    Next
  11. End With
  12. k = 1: r = 1
  13. For Each ky In d.keys
  14. y = Split(ky, ",")(1)
  15. With Sheets(y)
  16. Set C = .Columns("A").Find(d(ky))
  17. Set B = .Rows(1).Find(Split(ky, ",")(0))
  18. If Not C Is Nothing And Not B Is Nothing Then
  19. x = Application.Max(3, C.Row - 14)
  20.    Set B1 = .[A1:A2]
  21.    Set B2 = B.Resize(2, 1)
  22.    Set Rng = .Cells(x, 1).Resize(15, 1)
  23.    Set Rng1 = .Cells(x, B.Column).Resize(15, 1)
  24.    With sht
  25.       B1.Copy .Cells(r, k)
  26.       B2.Copy .Cells(r, k + 1)
  27.       Rng.Copy .Cells(r + 2, k)
  28.       Rng1.Copy .Cells(r + 2, k + 1)
  29.    End With
  30.    k = IIf(k = 255, 1, k + 2)
  31.    r = IIf(k = 1, r + 18, r)
  32.    Else
  33.    MsgBox "無此除權資料"
  34. End If
  35. End With
  36. Next
  37. Application.ScreenUpdating = True
  38. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 4# Hsieh


謝謝Hsieh 前輩!
再跑出來的結果裡,第一筆資料是黑松是20100719~20100629,但我想要的結果是20100719~20100806~
請問我這樣需要改哪一個地方?我有試著更改,但無法跑出來。另外在請教一下,如果我接下的資料更改,像是把報酬率換成每股盈餘,
而我同樣是要用程式抓出除息日後14天得資料,是否把程式碼貼上即可!(資料格式一樣)
感謝您的幫忙!

TOP

本帖最後由 Hsieh 於 2011-3-23 16:56 編輯

回復 3# candy516
  1. Sub ex()
  2. Dim A As Range, B As Range, B1 As Range, B2 As Range, C As Range, Rng As Range, Rng1 As Range, d As Object
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Set sht = Sheets.Add(after:=Sheets(1))
  5. Application.ScreenUpdating = False
  6. With Sheet1
  7.    For Each A In .Range(.[A2], .[A65536].End(xlUp))
  8.       mystr = A & "," & Left(A.Offset(, 1), 4)
  9.       d(mystr) = DateValue(Format(A.Offset(, 1), "0000/00/00"))
  10.    Next
  11. End With
  12. k = 1: r = 1
  13. For Each ky In d.keys
  14. y = Split(ky, ",")(1)
  15. With Sheets(y)
  16. Set C = .Columns("A").Find(d(ky))
  17. If Not C Is Nothing Then
  18.    Set B = .Rows(1).Find(Split(ky, ",")(0))
  19.    Set B1 = .[A1:A2]
  20.    Set B2 = B.Resize(2, 1)
  21.    Set Rng = C.Resize(15, 1)
  22.    Set Rng1 = .Cells(C.Row, B.Column).Resize(15, 1)
  23.    With sht
  24.       B1.Copy .Cells(r, k)
  25.       B2.Copy .Cells(r, k + 1)
  26.       Rng.Copy .Cells(r + 2, k)
  27.       Rng1.Copy .Cells(r + 2, k + 1)
  28.    End With
  29.    k = IIf(k = 255, 1, k + 2)
  30.    r = IIf(k = 1, r + 18, r)
  31.    Else
  32.    MsgBox "無此除權資料"
  33. End If
  34. End With
  35. Next
  36. Application.ScreenUpdating = True
  37. End Sub
複製代碼
學海無涯_不恥下問

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題