ªð¦^¦Cªí ¤W¤@¥DÃD µo©«

[µo°Ý] ½Ð°Ý¯à§_±N2­ÓVBA¥¨¶°¦X¨Ö¦¨1­ÓVBA¥¨¶°

¦^´_ 9# azrael19

¥i¥H¥¿±`¤F
    ·PÁ±zªº¥Î¤ß  ³o¼Ë´N¥i¥H¥¿±`Åã¥Ü2²Õ¦X¨Öªº¥¨¶°

TOP

¦^´_ 10# GBKEE
µLªk°õ¦æ(­ì¦]:§Ú¬Oµæ³¾µL¯à¤O­×§ï§¹¦¨)
1 »yªk¿ù»~


2.¿ù»~¤º®e


·PÁ±z¼ö¤ßªº°Ñ»P ÁÂÁ±z

TOP

¦^´_ 9# azrael19

¦³¤@­Ó©µ¦ùªº°ÝÃD ¯à§_§PŪ¦pªþ¹Ï¤º¥kºÝ¾ã±Æ¸ê®Æ¤§º¦©Î¶^


©Î¥i±N¹ê»Ú¤§½bÀY¤è¦V¤@¨Ö§e²{ §Ú¦b¥ÎIF§PÂ_

ÁÂÁ±z

TOP

¦^´_ 8# no3-taco
¥Ñ©óµ¥ºô¯¸¹ïµæ³¾ªº¨C¤p®É¥u¯à¦^ÂÐ3¦¸ªº­­¨î ¬G±ß¤F¦^ÂÐ

¥Ñ©ó­Ó¤Hªì¾Ç¥¨¶° ¨S¯à¤O²Õ¦X½ÆÂøªºªF¦è ¤£¹LÁÙ¦n¦³¼ö¤ßªº°ª¤â¤l9¼Ó)¤w¸Ñ¨M¤F§Úªº°ÝÃD
ÁÙ¬O«D±`·PÁ±z¼ö¤ßªº°Ñ»P¦^´_ ÁÂÁ±z

TOP

¦^´_  azrael19

¦³¤@­Ó©µ¦ùªº°ÝÃD ¯à§_§PŪ¦pªþ¹Ï¤º¥kºÝ¾ã±Æ¸ê®Æ¤§º¦©Î¶^


©Î¥i±N¹ê»Ú¤§½bÀY¤è¦V¤@ ...
lcctno µoªí©ó 2015-7-26 11:13


¥Î­ì¥»ªº¤è¦¡§ÚÁÙ¤£ª¾¹D­n«ç»ò°µ¡A¦pªG§Aªº»Ý¨D¥u¬O­n§ì¸ê®Æ¡A¤U­±¬O¥t¤@ºØ¤è¦¡§A¸Õ¸Õ¬Ý...
  1. Option Explicit
  2. Option Base 1

  3. Sub Ex()
  4.     Dim HEAD As Variant, PARAM As Variant, PA As Variant, AR As Variant, v As Variant
  5.     Dim i As Integer, j As Integer, k As Integer
  6.     Dim s As String, ErrDescription As String
  7.     Dim objCol As Object
  8.    
  9.     '°Ñ¼Æ : ºô§},ªíÀY©ñ¸m¦ì§},¸ê®Æ©ñ¸mÀx¦s®æ¦ì§},¼ÐµùÃC¦âÀx¦s®æ¦ì§}
  10.     PARAM = [{"http://www.yuantaetfs.com/api/RtNav","B1","B5","D16:D17"; "http://www.yuantaetfs.com/Home/IndexPrice","","B27","C27:C28"}]
  11.    
  12.     '¸ê®ÆªíÀY°}¦C¦r¦ê
  13.     HEAD = Array("{""¸ê®Æ®É¶¡"","""","""","""","""","""","""","""","""","""","""","""","""","""","""";" & _
  14.                  """°ò¥»¸ê®Æ"","""",""²b­È"","""","""","""",""¥«»ù"","""","""","""",""§é·¸»ù"","""",""ªì¯Å¥«³õ"","""",""°òª÷"";" & _
  15.                  """ªÑ²¼"",""°òª÷"",""¬Q¦¬"",""¹w¦ô"",""º¦¶^"",""º¦¶^´T"",""¬Q¦¬"",""³Ì·s"",""º¦¶^"",""º¦¶^´T"",""§é·¸»ù"",""´T«×"",""¥i§_"",""¥i§_"",""Àç·~¤é"";" & _
  16.                  """¥N½X"",""¦WºÙ"",""²b­È"",""²b­È"","""","""",""¥«»ù"",""¥«»ù"","""","""","""","""",""¥ÓÁÊ"",""Å«¦^"",""""}", "")
  17.                  
  18.     'Regular Expression
  19.     PA = Array("{""fundId"":""[\d]+"",""etfId"":""(.+?)"",""name"":""(.+?)"",""ename"":""[^""]*"",""yestNav"":(.+?),""nav"":(.+?),""navFluct"":(.+?),""yestPrice"":(.+?),""price"":(.+?),""priceFluct"":(.+?),""yestIndex"":(.+?),""index"":(.+?),""indexFluct"":(.+?),""updateTime"":""(.+?)"",""AllowMark"":""(.+?)"",""RedemMark"":""(.+?)"",""BussMark"":""(.+?)"",[^}]+}", _
  20.                "{""fund_id"":null,""IndexCode"":""[^""]*"",""IndexName"":""([^""]+)"",""IndexEName"":""[^""]*"",""crncy"":""[^""]*"",""area"":""D"",""DayDate"":""[^""]*"",""Close"":(.+?),""yestClose"":(.+?),""Diff"":(.+?)}")

  21.     ActiveSheet.UsedRange.ClearContents
  22.    
  23.     For i = LBound(PARAM) To UBound(PARAM)
  24.    
  25.         '§ì¨úJSON¸ê®Æ
  26.         With CreateObject("WinHttp.WinHttpRequest.5.1")
  27.             .Open "GET", PARAM(i, 1), False
  28.             .send
  29.             If 200# <> .Status Then
  30.                 ErrDescription = "ºô­¶Åª¨ú¥¢±Ñ!"
  31.                 GoTo Catch
  32.             End If
  33.             s = .responseText
  34.         End With
  35.         
  36.         With ActiveSheet
  37.             If "" <> PARAM(i, 2) Then
  38.                 '©ñ¸mªíÀY¸ê®Æ
  39.                 AR = Application.Evaluate(HEAD(i))
  40.                 .Range(PARAM(i, 2)).Resize(UBound(AR, 1), UBound(AR, 2)).Value = AR
  41.                 Erase AR
  42.             End If
  43.             If "" <> PA(i) Then
  44.                 '¸ÑªRJSON¦r¦ê¤¤©Ò»Ý¸ê®Æ
  45.                 With CreateObject("VBScript.RegExp")
  46.                     .Global = True
  47.                     .Pattern = PA(i)
  48.                     If False = .test(s) Then: GoTo Catch
  49.                     Set objCol = Nothing
  50.                     Set objCol = .Execute(s)
  51.                 End With
  52.                 If 0 = objCol.Count Then
  53.                     ErrDescription = "¸ê®Æ®æ¦¡¸ÑªR¿ù»~!"
  54.                     GoTo Catch
  55.                 End If
  56.                 ReDim AR(1 To objCol.Count, 1 To objCol(1).SubMatches.Count) As Variant
  57.                 For j = 0 To objCol.Count - 1
  58.                     For k = 0 To objCol(0).SubMatches.Count - 1
  59.                         AR(j + 1, k + 1) = objCol(j).SubMatches(k)
  60.                     Next k
  61.                 Next
  62.             End If
  63.             
  64.             Select Case i
  65.                 Case 1
  66.                     '­«·s±Æ¦C¤Î­×¥¿¸ê®Æ¥H²Å¦Xºô­¶ªí®æ©Ò§e²{¼Ë»ª
  67.                     For j = 0 To objCol.Count - 1
  68.                         AR(j + 1, 9) = AR(j + 1, 8)                            'º¦¶^
  69.                         AR(j + 1, 8) = AR(j + 1, 7)                            '³Ì·s¥«»ù
  70.                         AR(j + 1, 7) = AR(j + 1, 6)                            '¬Q¦¬¥«»ù
  71.                         AR(j + 1, 6) = Round(AR(j + 1, 5) / AR(j + 1, 3), 4)   'º¦¶^´T
  72.                         AR(j + 1, 10) = Round(AR(j + 1, 9) / AR(j + 1, 7), 4)  'º¦¶^´T
  73.                         AR(j + 1, 11) = AR(j + 1, 8) - AR(j + 1, 4)            '§é·¸»ù
  74.                         AR(j + 1, 12) = Round(AR(j + 1, 11) / AR(j + 1, 4), 4) '´T«×
  75.                     Next j
  76.                     .Range("B1").Value = "¸ê®Æ®É¶¡:" & Trim(objCol(0).SubMatches(11))
  77.                     With .Range(PARAM(i, 3)).Resize(UBound(AR, 1), UBound(AR, 2))
  78.                         '³]©wÀx¦s®æ®æ¦¡
  79.                         v = Split("@,@,0.00,0.00,0.00,0.00%,0.00,0.00,0.00,0.00%,0.00,0.00%", ",")
  80.                         For j = LBound(v) To UBound(v)
  81.                             .Columns(j + 1).NumberFormat = v(j)
  82.                         Next
  83.                         .Value = AR
  84.                     End With
  85.                     Erase AR
  86.                 Case 2
  87.                     For j = 0 To objCol.Count - 1
  88.                         AR(j + 1, 3) = AR(j + 1, 4)                            '«ü¼Æº¦¶^
  89.                         AR(j + 1, 4) = Round(AR(j + 1, 3) / AR(j + 1, 2), 4)   'º¦¶^´T(%)
  90.                     Next
  91.                     With .Range(PARAM(i, 3)).Resize(UBound(AR, 1), UBound(AR, 2))
  92.                         '³]©wÀx¦s®æ®æ¦¡
  93.                         v = Split("@;#,##0.00;#,##0.00;0.00%", ";")
  94.                         For j = LBound(v) To UBound(v)
  95.                             .Columns(j + 1).NumberFormat = v(j)
  96.                         Next
  97.                         .Value = AR
  98.                     End With
  99.                     Erase AR
  100.                 Case Else
  101.             End Select
  102.         
  103.             '¼Ðµù³]©wÀx¦s®æ¦ì§}ÃC¦â
  104.             With .Range(PARAM(i, 4)).Interior
  105.                 .ColorIndex = 35
  106.                 .Pattern = xlSolid
  107.             End With
  108.         End With
  109.         
  110.     Next
  111.    
  112. Finally:
  113.     Set objCol = Nothing

  114.     Exit Sub
  115. Catch:

  116.     If "" <> ErrDescription Then: MsgBox ErrDescription, vbCritical
  117.     Err.Clear
  118.     Resume Finally

  119. End Sub
½Æ»s¥N½X

TOP

¦^´_ 15# azrael19

¤j¤j¦n
·d±o«ç»ò½ÆÂø
°Ê¥Î¤F¤j¶qªº Regular Expression
«Ü²Ö§a

TOP

¦^´_ 15# azrael19

¦Ñ¤H®a¦­ºÎ ©ú¦­¤S­n¦­°_¥~¥X¹B°Ê ±µµÛ¤S­n¨n½L °µ§Ú°Ñ»PªºªÑ(T50¤Ï1) ¤§¦¨¥æ¤Î²Î­p¨Ã¿é¤J ¦Ó±o¨ì¤ÀªR ¬Gµ¥§Ú¦³ªÅ®É(¬P´Á°²¤é) ¦A°µªñ¤@¨Bªº "Try Run" ÁٽШ£½Ì §Ú¬Û«H±zªº¯à¤O(¨Æ¹ê¤WÃÒ©ú±z¬O°ª¤â ¦æ®a¤@¥X¤â «Kª¾¦³¨S¦³) ¥u¬O§Ú­Ó¤Hªº¦]¯À µLªk§Y®ÉÅçÃÒ ÁٽШ£½Ì §Æ±æ¨Ó¤é¯à¦³¾÷·|¦^³ø±zªºÀ°§U (§Æ±æ¯à¦bªÑ¥«¤WÀ°¤W¦£) ¯uªº«Ü·PÁ±z

TOP

¦^´_  azrael19

¤j¤j¦n
·d±o«ç»ò½ÆÂø
°Ê¥Î¤F¤j¶qªº Regular Expression
«Ü²Ö§a
jackyq µoªí©ó 2015-7-26 22:49


Regular Expression§Ú¦Û¤v¤]ı±o§Ú¼gªº¤S¯ä¤SªøÅý±z¨£¯º¤F¡A¨ä¹êºô¸ô¤W¦³²{¦¨ªºJSON ParserÃþ§O¥i¥H®³¨Ó¥Î¡A¥u¬Olcctno«e½ú§Æ±æµ{¦¡¥u¯à¦³¤@­Ó¥¨¶°¡A©Ò¥H¤~¥Î³oºØ¤è¦¡¨Ó³B²z

JSON Parser
https://code.google.com/p/vba-json/

TOP

¦^´_ 18# azrael19

¤j¤j²ö©Ç,  ¨S¯º¤§·N
­Ó¤H²ßºD¬O®e©öºûÅ@­×§ï¬°²Ä¤@
¤£·Q¤é«á­×§ï¨ì®ÀÁÉ

TOP

¦^´_ 8# no3-taco
¦^´_ 9# azrael19
½Ð°Ý¨â¦ìªºieª©¥»,
no3-taco ´£¨Ñªº, MsgBox E.all.Length¬O¦h¤Ö,
  1. Loop Until E.all.Length >= IIf(i = 0, 431, 150)
½Æ»s¥N½X
³oµ{¦¡½X¬°¦ó¦bie8 ¨S°ÝÃD, lcctno ªºie µLªk°õ¦æ.
¨â¦ìªºIE ¤]·|¦³³o¼Ëªº°ÝÃD¶Ü?
·P®¦ªº¤ß......(¦b³Â»¶®a±Ú°Q½×°Ï.¥Î¤ß¾Ç²ß·|¦³¶i¨Bªº)
¦ý¸ê·½µL­­,«á´©¦³­­,  ¤@¤Ñ1¤¸ªºÃÙ§U,¤H¤H¦³¯à¤O.

TOP

        ÀR«ä¦Û¦b : ¤£­n¤p¬Ý¦Û¤v¡A¦]¬°¤H¦³µL­­ªº¥i¯à¡C
ªð¦^¦Cªí ¤W¤@¥DÃD