返回列表 上一主題 發帖

[發問] 可否用迴圈或變數匯入大量資料?

回復 5# smart3135
  1. Option Explicit
  2. Sub 抓季損益表資料()
  3.     Dim E As Integer
  4.     Application.DisplayAlerts = False  '停止系統的警告提示
  5.     For E = 1101 To 2330
  6.         With Sheets.Add(, Sheets(1))   '新增工作表
  7.             .Name = E
  8.             URL = "URL;https://djinfo.cathaysec.com.tw/Z/ZC/ZCQ/ZCQ.DJHTM?A=" & E
  9.             With .QueryTables.Add(Connection:=URL, Destination:=.Range("$A$1"))
  10.                 .Name = "ZCQ.DJHTM?A=" & E
  11.                 .PreserveFormatting = True
  12.                 .BackgroundQuery = True
  13.                 .RefreshStyle = xlInsertDeleteCells
  14.                 .SaveData = True
  15.                 .AdjustColumnWidth = True
  16.                 .RefreshPeriod = 0
  17.                 .WebSelectionType = xlSpecifiedTables
  18.                 .WebFormatting = xlWebFormattingNone
  19.                 .WebTables = "3"
  20.                 .WebPreFormattedTextToColumns = True
  21.                 .WebConsecutiveDelimitersAsOne = True
  22.                 .Refresh BackgroundQuery:=False
  23.             End With
  24.             
  25.             If .[A1] = -E Then  '這網頁如股票代碼錯誤會傳回負號.
  26.                 Stop            'STOP 是給你回到工作表驗證用,可刪掉這程式碼
  27.                 ActiveSheet.Delete
  28.             End If
  29.         End With
  30.     Next
  31.     Application.DisplayAlerts = True   '程式結速:恢復系統的警告提示
  32. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# GBKEE
感謝GBKEE版主的分享,這個真的是太棒了,雖然我裡面很多的程式碼和語法我還是一知半解,但確實是有接近我想要寫出的結果
另外有個問題請教一下,就是AR = Array(2303, 2485, 2030)只能一個一個代號加入,能否寫成用一個區間範圍來設定
例如1101-2330之間所有符合的股票代號,並讓VBA自行判定非股票代碼的數字就不是抓資料,再請指點,感謝!

TOP

回復 3# GBKEE
感謝GBKEE大大指點新手,目前人在上班,等下班再來測試結果,也會試著了解其中的語法,有問題再請您多多指點,再次感謝!

TOP

回復 2# smart3135
試試看
  1. Option Explicit
  2. Sub 抓季損益表資料()
  3.     Dim Rng As Range, AR(), URL As String, E As Variant
  4.     For E = Sheets.Count To 2 Step -1
  5.         Sheets(E).Delete   '工作表刪除
  6.     Next
  7.     AR = Array(2303, 2485, 2030)
  8.     Sheets(1).Range("A1:A3") = Application.WorksheetFunction.Transpose(AR)
  9.     Set Rng = Sheets(1).Range("A1:A3")
  10.     For Each E In Rng   '迴圈 儲存格
  11.     ' For Each E In AR  '迴圈 也可以用陣列
  12.         With Sheets.Add(, Sheets(1))  '新增工作表
  13.             .Name = E
  14.             URL = "URL;https://djinfo.cathaysec.com.tw/Z/ZC/ZCQ/ZCQ.DJHTM?A=" & E
  15.             With .QueryTables.Add(Connection:=URL, Destination:=.Range("$A$1"))
  16.                 .Name = "ZCQ.DJHTM?A=" & E
  17.                 .PreserveFormatting = True
  18.                 .BackgroundQuery = True
  19.                 .RefreshStyle = xlInsertDeleteCells
  20.                 .SaveData = True
  21.                 .AdjustColumnWidth = True
  22.                 .RefreshPeriod = 0
  23.                 .WebSelectionType = xlSpecifiedTables
  24.                 .WebFormatting = xlWebFormattingNone
  25.                 .WebTables = "3"
  26.                 .WebPreFormattedTextToColumns = True
  27.                 .WebConsecutiveDelimitersAsOne = True
  28.                 .Refresh BackgroundQuery:=False
  29.             End With
  30.         End With
  31.     Next
  32. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

有沒有方法可以用EXCEL VAB抓取上市櫃所有個股的資訊?

想請問各位先進,小弟最近在學EXCEL VBA,想利用EXCEL VBA下載個股的一些資訊,如各季各年的損益表、資產負債表、現金流量表、月營收、年度股利等等資料
目前是有寫出一個EXCEL VBA能抓取單獨個股的資訊,但如果想要更換其他個股,就必須將這個檔案複製另存成另一個檔案,再打開檔案進到visual basic編緝器將
裡面的個股代號以取代的方式變更,如果要這樣一個一個複製完成上市櫃所有的個股excel應該是很沒有效率的,不知道有沒有方法能一次下載很多個股的資料呢?
附上我自己寫的EXCEL VBA,還請各位大大幫忙解惑,感謝!
test.rar (235.84 KB)

TOP

        靜思自在 : 多做多得。少做多失。
返回列表 上一主題