안녕하세요 제주도에서 농사를 짓고 있는 청년입니다. 기상 데이터 실시간 엑셀 연동 부분 도와주세요 ㅠㅠ

파워쿼리/피벗
작성자
허경재
작성일
2023-10-05 11:46
조회
1098
엑셀버전 : 엑셀2021

운영체제 : 윈도우11

질문 요약 : 제주도 지역 기상 데이터(평균온도, 최저온도, 최고온도, 강수량) 실시간으로 첨부파일의 엑셀에 연동되게 할 수 있는 방법 알려주시면 감사하겠습니다 ㅠㅠ

안녕하세요 제주도에서 농사를 짓고 있는 청년입니다.

다름이 아니라 제주도에서 농사를 지으면서 기상 변화에 따른 그래프를 실시간으로 확인하기 위해 오빠두엑셀을 보면서 독학하여 첨부한 파일과 같은 엑셀을 만들어 보았습니다.
해당 파일은 아래 기상청 포털의 데이터를 활용하여 만들었습니다. 문제는 해당 파일은 실시간으로 데이터 업데이트가 되지 않아 수동으로 데이터를 넣어줘야 한다는 점 입니다.
이 문제를 해결하고자 노력했지만, 혼자 힘으로는 부족하여 오빠두 엑셀에 도움을 요청드립니다 ㅠㅠ
아래 기상청 자료를 해당 엑설의 데이터에 연동시키는 방법이 있을까요?? ㅠㅠ 부탁드리겠습니다ㅠㅠ
아래 사이트에서  Excel 파일 클릭하여 매일 데이터를 수동으로 넣고 있는 상황입니다
데이터 출처: https://data.kma.go.kr/stcs/grnd/grndTaList.do?pgmNo=70
신고
스크랩
공유
전체 8

  • 2023-10-06 14:21

    @허경재 님 API를 이용해서 기상데이터를 가져오는 매크로를 아래와 같이 작성했습니다.
    매크로에 익숙하지 않을 것을 감안하여 제 개인키를 넣어서 시험 사용이 가능하도록 해 두었습니다.
    따라서 첨부파일의 VBA는 개인키가 들어 있어 암호를 걸었습니다.
    data.go.kr에서 개인키를 신청하여 양식에 F2셀에 입력하시면 계속 사용이 가능합니다.
    (개발용 키는 며칠이 지나면 변경할 예정입니다)

    Data시트의 시트명은 아래 코드에 보시다시피 HardCoding되어 있어 수정하시면 안됩니다.
    게을러서 Max 999일을 가져올 수 있습니다.

    <span style="color: #0000ff;"><strong>Sub APIGetWthr()</strong></span>
        Dim vXML As Variant, AreaCode As String, StartDay As String, EndDay As String, sKey As String
        With <span style="color: #ff0000;"><strong>Sheets("Data")</strong></span>
          AreaCode = .Range("A2").Value2
          If IsDate(.Range("B2")) Then StartDay = Format(.Range("B2"), "yyyymmdd") Else StartDay = Format(Application.EDate(Date - 1, -1), "yyyymmdd")
          If IsDate(.Range("C2")) Then
            If .Range("C2") < Date Then
              EndDay = Format(.Range("C2"), "yyyymmdd")
            Else
              EndDay = Format(Date - 1, "yyyymmdd")
            End If
          Else
            EndDay = Format(Date - 1, "yyyymmdd")
          End If
          If Not IsEmpty(.Range("F2")) Then sKey = .Range("F2").Value2
     
          .Range("A4").CurrentRegion.Clear
          vXML = getWthrDataList(AreaCode, StartDay, EndDay, sKey)
          If Not IsArray(vXML) Then .Range("A5") = vXML Else .Range("A4").Resize(UBound(vXML, 1), UBound(vXML, 2)) = vXML
          .Range("A5").WrapText = False
     
        End With
        MsgBox "완료되었습니다."
     
    End Sub
     
    <strong><span style="color: #0000ff;">Function getWthrDataList(AreaCode As String, StartDay As String, EndDay As String, Optional sKey As String = "")</span></strong>
        Dim request As String, result As String, vXML As Variant, x As Double, y As Double
        Dim ServiceURL As String, EncodingKey As String
     
        On Error Resume Next
        ServiceURL = "https://apis.data.go.kr/1360000/AsosDalyInfoService/getWthrDataList"
        EncodingKey = sKey
        If EncodingKey = "" Then EncodingKey = <span style="color: #ff0000;">"개인키는삭제하였습니다"</span>
     
        request = ServiceURL & "?ServiceKey=" & EncodingKey
        request = request & "&pageNo=1&numOfRows=999&dataType=XML&dataCd=ASOS&dateCd=DAY&startDt=" & StartDay & "&endDt=" & EndDay & "&stnIds=" & AreaCode
     
        result = getURL(request, "GET")
        If InStr(1, result, "errMsg") Then getWthrDataList = result: Exit Function
     
        vXML = getWthrDataListArray(result)
     
        getWthrDataList = vXML
     
    EXIT_RUN:
        Exit Function
     
    ERROR_RUN:
        GoTo EXIT_RUN
     
    End Function
     
    <strong><span style="color: #0000ff;">Function getWthrDataListArray(sXML As String)</span></strong>
        Dim xmlDoc As Object, xmlNodeList As Object, xmlNode As Object, xmlChild As Object
        Dim vF As Variant, i As Long
     
        Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
     
        With xmlDoc
            .async = False
            .validateOnParse = False
            .LoadXML sXML
     
            ReDim vF(1 To 5, 1 To 1)
            i = 1
            vF(1, 1) = "날짜": vF(2, 1) = "평균": vF(3, 1) = "최저": vF(4, 1) = "최고": vF(5, 1) = "비"
     
            '// TagName으로 단계별로 검색하여 가져오기
            Set xmlNode = .getElementsByTagName("response")(0)
            Set xmlNode = xmlNode.getElementsByTagName("body")(0)
            Set xmlNode = xmlNode.getElementsByTagName("items")(0)
            Set xmlNodeList = xmlNode.ChildNodes
            For Each xmlNode In xmlNodeList
              i = i + 1
              ReDim Preserve vF(1 To 5, 1 To i)
              For Each xmlChild In xmlNode.ChildNodes
                With xmlChild
                  If .BaseName = "tm" Then vF(1, i) = .Text       '//일자
                  If .BaseName = "avgTa" Then vF(2, i) = .Text    '//평균기온
                  If .BaseName = "minTa" Then vF(3, i) = .Text    '//최저기온
                  If .BaseName = "maxTa" Then vF(4, i) = .Text    '//최고기온
                  If .BaseName = "sumRn" Then vF(5, i) = .Text    '//일강수량
                End With
              Next
            Next
        End With
     
        getWthrDataListArray = Application.Transpose(vF)
     
    End Function
     
    <strong><span style="color: #0000ff;">Function getURL(URL As String, Optional RequestMethod As String = "GET")</span></strong>
        Dim oHTTP As Object
        Dim iMaxRetry As Long, iRetry As Long, i As Long
     
        On Error Resume Next
        Set oHTTP = CreateObject("MSXML2.XMLHTTP.6.0")
        If Err.Number <> 0 Then Set oHTTP = CreateObject("MSXML2.XMLHTTP")
        On Error GoTo 0
     
        On Error GoTo ERROR_RUN
        With oHTTP
            .Open RequestMethod, URL
            .send
            getURL = .responseText
        End With
     
    EXIT_RUN:
        Set oHTTP = Nothing
        Exit Function
     
    ERROR_RUN:
        getURL = "ERROR: " & Error(Err.Number) & vbNewLine & Err.Description
        GoTo EXIT_RUN
    End Function

     

    첨부파일 : 지점기상이력.xlsm


    • 2024-10-07 14:11

      @원조백수 님 안녕하세요 원조백수님,,

      혹시 해당 파일 매크로 암호를 알 수 있을까요,,
      너무 좋은 내용같은데, VBA 활용 능력이 떨어지다 보니 GPT써도 잘 모르겠네요 ㅠㅠ

      다른 관측자료 API로 좀 바꿔서 활용하려고 알아보고 있는데, 혹시 Auth키 때문이시라면 빼고 한 번 공유가 가능하실까 해서 답글 남겨봅니다


      • 2024-10-07 14:38

        @eeno 님 암호 없는 소스는 위에 댓글을 보시면 있습니다.
        첨부 파일은 작동은 하되, 제 개인키가 있어서 암호를 걸어둔 것 뿐입니다.


        • 2024-10-10 11:51

          @원조백수 님 혹시 API 허브에서 어떤 내용을 가져온건지 알 수 있을까요? 제걸로 바꿔서 해보려고 합니다.!


          • 2024-10-10 11:56

            @eeno 님 질문을 이해하지 못했습니다.


    • 2023-11-08 15:57

      @원조백수 님 혹시 어떤 개인키를 받아야하는지 알 수 있을까요?


  • 2023-10-05 12:30

    @허경재 님 공공데이터 API를 이용하시면 될 듯 합니다.

    찾는 자료가 있는지 검색해 보세요.

    https://www.data.go.kr


전체 16,931
번호 카테고리 제목 작성자 작성일 추천 조회
알림
[📚진짜쓰는 실무엑셀] 2024년 엑셀 공부, 이 책 한권으로 마스터하세요! (290)
오빠두엑셀 | 2022.02.03 | 추천 554 | 조회 844432
오빠두엑셀 2022.02.03 554 844432
공지사항 문서서식
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (197)
오빠두엑셀 | 2021.10.28 | 추천 304 | 조회 31513
오빠두엑셀 2021.10.28 304 31513
74604 문서서식
New 간트차트 조건부서식 이용 문의 엑셀파일첨부파일 (1)
배고픈짐승 | 2024.10.30 | 추천 0 | 조회 38
배고픈짐승 2024.10.30 - 38
74599 함수/공식
New 이런 경우에는 무슨 함수를 써야할까요..? (2)
iwnqn | 2024.10.30 | 추천 0 | 조회 54
iwnqn 2024.10.30 - 54
74598 문서서식
New 엑셀 유효성 검사 뛰어 쓰기 문제 엑셀파일 (2) 답변완료
퉁퉁이 | 2024.10.30 | 추천 0 | 조회 42
퉁퉁이 2024.10.30 - 42
74592 함수/공식
New 여러 값들 중에서 원하는 값을 찾고 싶어요 도와주세요! 첨부파일 (6) 답변완료
저도해볼게요 | 2024.10.30 | 추천 0 | 조회 62
저도해볼게요 2024.10.30 - 62
74589 구글시트
New 한셀에 줄바꿈으로 있는 여러데이터를 한셀에 한데이터 들어가게끔 일괄로 하고 싶습니다 첨부파일 (4) 답변완료
스톤스톤 | 2024.10.30 | 추천 0 | 조회 46
스톤스톤 2024.10.30 - 46
74585 VBA
New UserForm 크기질문 첨부파일 (4) 답변완료
땡이 | 2024.10.30 | 추천 0 | 조회 59
땡이 2024.10.30 - 59
74583 함수/공식
New XLOOKUP 함수의 다중조건을 잘 모르겠습니다 첨부파일 (4)
qlcc**** | 2024.10.30 | 추천 0 | 조회 65
qlcc**** 2024.10.30 - 65
74582 함수/공식
New filter 함수에 대해 문의드립니다 (5)
김은상 | 2024.10.30 | 추천 0 | 조회 59
김은상 2024.10.30 - 59
74581 구글시트
New 구글폼 견적서 자동화 관련, 폼에서 입력된 이미지 파일을 견적서에 넣는 방법 좀 알려주시면 감사하겠습니다.
| 2024.10.30 | 추천 0 | 조회 47
2024.10.30 - 47
74572 차트/그래프
New 꺽은선 그래프의 레이블이 원복이 됩니다. 첨부파일 (3)
구리구리이 | 2024.10.30 | 추천 0 | 조회 53
구리구리이 2024.10.30 - 53
74570 함수/공식
New 배수 금액으로 순번 정하기 알려 주세요...ㅠ 엑셀파일첨부파일 (3) 답변완료
서기 | 2024.10.30 | 추천 0 | 조회 48
서기 2024.10.30 - 48
74566 함수/공식
New 두개의 열에 입력된 데이터를 순서 바꿔서 입력으로 중복일 때 골라내는 법 엑셀파일첨부파일 (1)
문과적남자 | 2024.10.30 | 추천 0 | 조회 52
문과적남자 2024.10.30 - 52
74564 함수/공식
New 각 열별로 합 구하는 방법 첨부파일 (1)
라핼 | 2024.10.30 | 추천 0 | 조회 64
라핼 2024.10.30 - 64
74563 함수/공식
New 필터 적용시 중복값 제외 카운트 되는 법 좀 알려주세요 ㅠㅠ 첨부파일 (1)
정재욱 | 2024.10.30 | 추천 0 | 조회 69
정재욱 2024.10.30 - 69
74558 함수/공식
New 문자와 숫자가 섞여있는 열의 합계와 평균을 구하는 방법을 알려주세요!! 첨부파일 (9)
침착해 | 2024.10.30 | 추천 0 | 조회 72
침착해 2024.10.30 - 72
74556 함수/공식
New 세트상품 마진율 구하기 (2)
ek02 | 2024.10.30 | 추천 0 | 조회 60
ek02 2024.10.30 - 60
74543 기능/도구
New 문자와 숫자 혼합된 셀에서 숫자만 따로 따올수 있는 기능이 있을까요? 첨부파일 (3)
야만용사 | 2024.10.29 | 추천 0 | 조회 97
야만용사 2024.10.29 - 97
74542 기능/도구
New 엑셀 백분율 숫자로변경 (3)
rarara | 2024.10.29 | 추천 0 | 조회 86
rarara 2024.10.29 - 86
74540 함수/공식
New ★데이터 가공★ 잘못된 데이터를 올바른 데이터로 변환하는 과정을 도와주세요 ㅠㅠ 엑셀파일첨부파일 (10)
| 2024.10.29 | 추천 0 | 조회 121
2024.10.29 - 121
74539 함수/공식
New 안녕하세요 INDEX, MATCH 다중조건 질문드립니다! 엑셀파일 (3)
gys**** | 2024.10.29 | 추천 0 | 조회 94
gys**** 2024.10.29 - 94
74533 함수/공식
New 산출집계시트에 항목을 산출서에서 가져오고싶어요 엑셀파일 (3)
Moto | 2024.10.29 | 추천 0 | 조회 89
Moto 2024.10.29 - 89
74532 문서서식
New [질문] 전체 행 또는 열을 선택 후 특정 셀만 선택 제외 시키기 첨부파일 (2)
ViVaViva | 2024.10.29 | 추천 0 | 조회 78
ViVaViva 2024.10.29 - 78
74530 함수/공식
New Lookup 함수 오류에 관한 문의 엑셀파일첨부파일 (6) 답변완료
TMOH | 2024.10.29 | 추천 0 | 조회 92
TMOH 2024.10.29 - 92
74528 함수/공식
New 다중조건 만족하는 결과를 가져오고싶습니다 도와주세요 ㅠㅠ 엑셀파일첨부파일 (7)
말하지마00 | 2024.10.29 | 추천 0 | 조회 98
말하지마00 2024.10.29 - 98
74526 함수/공식
New 열과 행으로 정렬된 데이터를 같은 행으로 표시하려고 합니다. 엑셀파일 (2) 답변완료
깐부 | 2024.10.29 | 추천 0 | 조회 78
깐부 2024.10.29 - 78
74521 함수/공식
New B시트에서 A시트 항목 제품 및 수량 가져오는법좀 부탁드려요 첨부파일 (2)
Moto | 2024.10.29 | 추천 0 | 조회 79
Moto 2024.10.29 - 79
74520 VBA
New VBA 런타임 오류 관련 질문 첨부파일 (1)
angelriun | 2024.10.29 | 추천 0 | 조회 61
angelriun 2024.10.29 - 61
74518 함수/공식
New 두 시트에서 교집합 찾기 (3)
우파루파 | 2024.10.29 | 추천 0 | 조회 87
우파루파 2024.10.29 - 87
74516 구글시트
New 렌덤으로 배치 할수 있는 방법이 있을까요? 첨부파일 (8)
피망이 | 2024.10.29 | 추천 0 | 조회 78
피망이 2024.10.29 - 78
74513 함수/공식
New 엑셀로 명리를 정리하던 중에.. 엑셀파일 (8)
Ballad | 2024.10.29 | 추천 0 | 조회 104
Ballad 2024.10.29 - 104