네이버지식인에 올라온 환율 파싱 질문을 보고 한번 시도를 해봤다.
파싱하는 것은 WaitForResponse 하는 부분까지를 알아내는 것과 그 뒤의 처리로 분류할 수가 있다.
난 아직 앞부분 처리하는 건 잘 모른다.
뒷부분 처리는 Instr함수, Split 함수, Replace 함수 그리고 debug.print 기능만 이용하면 원하는 걸 얼마든지 추출해 낼 수가 있다.
내가 뽑아내고 싶은 값이 무엇인지에 따라 해당되는 걸 다시 줄여서 Split 함수를 이용하여 원하는 구간을 줄여나간다.
가령 1,097.20 이란 값만 뽑아내고 싶다면 ....
직접실행창(Ctrl + G) 에 뿌려진 결과를 보고 일정한 규칙을 찾아내면 된다.
<td> 라는 걸 Split 한다고 하면 내가 원하는 <td>는 몇번째에 있는지 한번 보자.
4번째에 있다. Split 함수는 Split(T,"<td>")(0) 를 하면 <td>를 기준으로 (0)은 앞의 것을 반환한다.
뒤의 것을 반환하는 것은 <td>가 여러개가 존재하므로 (4) 를 해주어야 한다.
이제 Debug.Print T를 해보면 결과는 1,097.20</td> 를 화면에 출력해준다.
원하는 결과는 1,097.20 이므로 </td>의 앞부분이다. Split 함수 기준으로 앞부분은 (0) 이라고 했으므로
한번에 처리하는 Split 함수는 T = Split(Split(T, "<td>")(4), "</td>")(0) 가 된다.
얻어야 할 결과값이 4.70 이라면 ....
<td class="tx_l"><span class="down"><span>??/span> <span class="num">4.70</span></span></td>
에서 Replace 함수를 이용하여 제거해서 결과를 얻거나 범위를 좁혀서 Split 함수를 이용하면 된다.
Sub 환율파싱()
Dim T As String
Dim C As Variant
Dim R As Variant
Dim n As Long
Dim Winhttp As Object
Set Winhttp = CreateObject("WinHttp.WinHttpRequest.5.1")
With Winhttp
.Open "GET", "http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=%ED%99%98%EC%9C%A8"
.SetRequestHeader "Host", "www.NAVER.com"
.Send
.WaitForResponse
T = StrConv(.ResponseBody, vbUnicode)
.WaitForResponse
' Debug.Print T
T = Split(Split(T, Chr(60) + "em" + Chr(62) + "USD")(1), "last")(0)
' Debug.Print T
T = Split(T, "</th>")(1)
T = Replace(T, "<strong class=""down"">", "")
T = Replace(T, "</strong>", "")
T = Replace(T, " class=""tx_l""", "")
T = Replace(T, "<span class=""down""><span>??/span> <span class=""num"">", "")
T = Replace(T, "<span class=""percent down"">", "")
T = Replace(T, "</span>", "")
T = Replace(T, "<td class=""", "")
Debug.Print T
With Range("B2:H2")
.Value = Array("매매기준율", "전일대비", "등락율", "현찰살때", "현찰팔때", "송금보낼때", "송금받을때")
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 36
End With
R = Split(T, "<td>")
For n = 1 To UBound(R)
Cells(3, n + 1) = Split(R(n), "</td>")(0)
Next n
End With
Columns("A:H").AutoFit
End Sub
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 중복제거 함수의 버그(?) (0) | 2015.05.22 |
---|---|
다른 시트 자료를 SQL 로 가져오기 (0) | 2015.05.21 |
[VBA] 다른 엑셀 또는 다른 시트에서 SQL 로 데이터 가져오기 (0) | 2015.05.15 |
[VBA] 작업량 실적 그래프화 표시 (0) | 2015.05.14 |
MAC address 주소 가져오는 VBA (0) | 2015.05.09 |