728x90

날씨정보 추출


아래 코드는 다음의 날씨 정보를 편하게 추출하는 VBA 코드입니다.

http://weather.media.daum.net/ 접속하여 아래처럼 합니다.



엑셀 시트에 붙여넣기를 합니다.

테스트해보니 한가지 버그사항은 날짜를 가져오는데 년도를 올해 연도로 잘못인식하는 증상이 있네요..

위 그림에 보면 날짜는 있고 연도는 없다보니 연도를 올해 연도로 인식해서 그냥 붙여버리는 증상이 있다는 겁니다. 그점을 감안하여 추출한 다음에 연도는 수정을 해주는게 필요합니다.

첨부한 엑셀파일에 필요한 VBA Code 는 다 들어 있습니다.

테스트를 해보니 익스플로러와 크롬 브라우저, Firefox 브라우저가 인식하는 값이 다른 거 같네요..

그래서 두가지 버전으로 별도로 올립니다.


날씨추출_익스와크롬.xlsm


날씨추출_Firefox.xlsm


Sub 날씨정보추출()
    Dim Dat As Variant
    ReDim Dat(1 To 6, 1 To 1)
    Dim i As Integer, n As Integer, Day As Integer
    On Error Resume Next
    With ActiveSheet
        .Cells.Hyperlinks.Delete    '// 하이퍼링크 제거
        For i = 2 To 52 Step 10     '// 날짜가 표시된 셀 선택
            For n = 1 To 7          '// 일 ~ 토요일까지 선택
                If Not IsEmpty(.Cells(i, n)) Then   '// .Cells(i,n)은 현재셀이 비어있지 않으면
                    Day = Day + 1   '// Day은 날짜수만큼 증가, 배열을 늘려갈 변수에 1을 더함
                    ReDim Preserve Dat(1 To 6, 1 To Day)  '// 동적배열 변수의 저장공간을 다시 할당
                    Dat(1, Day) = .Cells(i, n)    '// 날짜
                    Dat(2, Day) = .Cells(i, n).Offset(3)    '// 날씨
                    Dat(3, Day) = Mid(.Cells(i, n).Offset(5), 4, 20)  '// 최저기온
                    Dat(4, Day) = Mid(.Cells(i, n).Offset(6), 4, 20)    '// 최고기온
                    Dat(5, Day) = Mid(.Cells(i, n).Offset(7), 5, 20)    '// 강수량
                    Dat(6, Day) = Mid(.Cells(i, n).Offset(8), 5, 20)    '// 적설량
                End If
            Next n
        Next i
        With .Cells(2, "J") '// 지정한 셀에 대해서
            .Resize(Rows.Count - 1, 6).Clear   '// 기존값 제거
            .Resize(UBound(Dat, 2), UBound(Dat, 1)) = Application.Transpose(Dat)   

             '// 배열의 행과 열을 바꾸어 값을 넣음
        End With
    End With
   
    Range([J2], Cells(Rows.Count, "J").End(3)).NumberFormat = "yyyy-mm-dd"          '// 날짜 서식으로 지정
    Range([J2], Cells(Rows.Count, "O").End(3)).HorizontalAlignment = xlCenter       '// 중앙정렬
  
End Sub


도움되셨다면 공감 꾸욱 눌러주시거나 댓글 부탁드립니다.

블로그 이미지

Link2Me

,