재테크/구글 스프레드시트

구글 스프레드시트 주식 배당 관리 - 30. 배당락일 가져오기, 날짜 형식으로 변경하기

RayShines 2022. 4. 14. 15:40
반응형

배당주에 투자하는 투자자라면 배당락일 - Ex-dividend date - 이라는 용어에 익숙할 수밖에 없다. 배당락일은 쉽게 말해서 주식을 매수해도 배당금을 받을 수 없는 날짜를 말한다. 최소한 배당락일 하루 전날에는 주식을 매수해야만 배당금을 받을 수 있다. 이번 포스팅은 야후 파이낸스에서 배당락일 정보를 가져오고, 이를 날짜 형식으로 바꾸어 언제까지 주식을 매수해야 배당금을 받을 수 있는지 계산하는 방법까지 알아보려고 한다. 

 

1. 배당락일

예를 들어 A라는 종목의 배당락일이 2022년 4월 29일이라고 하자. 그렇다면 4월 29일에 이 종목을 매수한 사람은 배당금을 받을 권리가 없다. 아무리 늦어도 4월 28일에는 매수를 해야만 배당금을 받을 권리가 생긴다. 만약 배당락일이 5월 1일 일요일이라면 어떻게 될까, 최소한 하루 전일 4월 30일 토요일에 매수를 해야 하는데 토요일에는 장이 열리지 않는다. 따라서 4월 29일 금요일에는 매수를 해야 배당금을 받을 수 있다. 쉽게 말해서 영업일 기준으로 배당락일 바로 전날에는 주식을 매수해야만 배당금을 받을 수 있다. 그런데 이것은 미국 증권사를 이용하고 있을 때의 이야기이다.

 

대부분 우리나라 증권사를 이용하고 있을 텐데, 이 경우에는 배당락일 전전일 (영업일 기준 배당락일-2) 에는 주식을 매수해야만 한다. 예를 들어 4월 29일 금요일에 배당락일이라면 4월 27일 수요일에는 주식을 매수해야만 하는 것이다.

 

 

2. 야후 파이낸스에서 배당락일 정보 가져오기

(1) 야후 파이낸스에서 배당락일 정보 가져오기

배당락일 정보는 야후 파이낸스에서 어렵지 않게 가져올 수 있다. 

 

야후 파이낸스 배당락일

위와 같이 표를 고쳐보았다. 배당락일 정보가 들어가는 C열에 들어갈 함수는 아래와 같다. 

 

=index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2)

 

이 함수는 야후 파이낸스의 A3셀에 들어있는 티커에 해당하는 페이지 중 표 2의 7행 2열의 데이터를 가져오라는 의미이다. 

 

그런데 막상 가져오고 나면 달은 영어로 되어 있고, 날짜 뒤에 콤마가 들어 있어서 한눈에 살펴보기 쉽지 않다. 

 

그리고 한 가지 더 중대한 문제가 있다.

 

isdate 함수

 

구글 스프레드시트는 isdate이라는 함수를 제공한다. isdate(C3)는 C3 셀의 데이터가 날짜 형식인지를 판단하라는 함수이다. 그런데 위의 이미지처럼 야후 파이낸스에서 가져온 데이터는 isdate의 결과가 false, 즉 날짜 형식이 아니다

 

그냥 Feb 04, 2022의 형식으로 둬도 배당락일을 구분하는데 큰 문제가 없다고 생각할 수 있긴 하다. 하지만 날짜 형식이 아니면 날짜를 계산할 수도 없다. 그것이 가장 큰 문제이다. 왜냐하면 배당락일로부터 며칠이 남았는지 계산하는 데 차질이 생기기 때문이다. 

 

그래서 위의 데이터를 가공해야 한다.

 

(2) 콤마 없애기

일단 아래 식으로 중간의 콤마를 없앤다.

 

=(substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", ""))

 

위의 식은 결과에 있는 ,를 공란으로 치환(substitute)하라는 식이다. 그 결과는 아래와 같다.

야후 파이낸스 배당락일 콤마 없애기

 

D열에 콤마가 사라진 배당락일이 생겼다. 하지만 여전히 텍스트 형식이다. 

 

(3) Split 함수를 이용해 연, 월, 일로 나누기

우선 D열에 있는 정보를 split 함수를 이용해 연도, 월, 일로 나누는 것부터 시작해보겠다.

 

연도가 들어갈 셀에는 아래 식을 넣는다.

 

=(index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,3))

 

월이 들어갈 셀에는 아래 식을 넣는다.

 

=index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,1)

 

일이 들어갈 셀에는 아래 식을 넣는다.

 

=(index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,2))

 

위 식은 각각 야후 파이낸스에서 가져온 배당일 정보에서 콤마를 제거한 뒤, 공란을 기준으로 분할(split)한 결과 중 1행 3열, 1행 1열, 1행 2열의 데이터를 가져오라는 의미이다. 각각 연도, 월, 일이다.

 

그 결과는 아래와 같다.

 

야후 파이낸스 배당일 콤마 제거 분할 split

 

(4) 텍스트로 되어 있는 월을 숫자로 바꾸기

이 부분은 정말 귀찮은 부분이지만 어쩔 수 없다. Jan, Feb, ... 등으로 되어 있는 월을 1, 2, ... 의 숫자로 치환(substitute)하는 방법을 써보려고 한다. 그리고 이 치환을 12번 하는 것이다. 하나의 셀에서 모든 것을 해결하려면 이 방법이 제일 낫다고 판단했다.

 

그래서 월이 들어있는 E열 옆에 열을 하나 새로 만들고 아래 식을 넣었다.

 

=substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute((index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A10), "table", 2), 7, 2), ",", "")), " ", true, true), 1,1)), "Jan", 1), "Feb", 2), "Mar", 3), "Apr", 4), "May", 5), "Jun", 6), "Jul", 7), "Aug", 8), "Sep", 9), "Oct", 10), "Nov", 11), "Dec", 12))

 

식이 너무 못 생겼지만 현재로선 이 방법 외에는 찾지 못했다.

 

위의 식의 결과는 아래와 같다.

 

야후 파이낸스 배당락일 텍스트로 된 월 숫자로 바꾸기

 

위의 이미지를 보면 알 수 있듯이 Feb이 2로, Apr이 4로 바뀌었다. 

 

(5) 연도, 월, 일을 하나의 셀로 모으기

이제 연도, 숫자로 바뀐 월, 일을 하나의 셀에 모아야 한다. 이때는 concatenate라는 함수를 이용한다.

 

새로운 열을 하나 만들고 아래의 식을 넣는다.

 

=CONCATENATE((index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,3)), "/", (substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute((index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,1)), "Jan", 1), "Feb", 2), "Mar", 3), "Apr", 4), "May", 5), "Jun", 6), "Jul", 7), "Aug", 8), "Sep", 9), "Oct", 10), "Nov", 11), "Dec", 12)), "/", (index(split((substitute(index(IMPORTHTML(CONCATENATE("https://finance.yahoo.com/quote/", A3), "table", 2), 7, 2), ",", "")), " ", true, true), 1,2)))

 

역시 식이 너무 길지만 이 방법뿐이다. 

 

쉽게 설명하면 연도/월/일의 형식으로 나란히 이어 붙이라는 명령이라고 보면 된다. 그 결과는 아래와 같다.

 

야후 배당락일 숫자로 바꾸기

 

위의 이미지처럼 숫자로 깨끗하게 바뀌었다.

 

(6) 제대로 날짜 형식으로 바뀌었는지 확인

그럼 이제 이것이 날짜의 형식인지 isdate 함수를 이용해 다시 확인해보겠다.

 

야후 파이낸스 배당락일 isdate

 

위의 이미지처럼 모두 TRUE이다. 성공적으로 텍스트 형식의 날짜를 날짜 서식의 날짜로 바꾸었다.

 

 

 

3. 배당락일로부터 며칠 남았는지 계산하기

불필요한 셀은 모두 제거하고 숫자로 바뀐 배당락일만 남긴 뒤, 배당락일로부터 며칠이 남았는지 계산해보자. 

 

이때는 networkdays라는 함수를 사용한다.

 

새로운 열을 하나 추가하고 아래의 함수를 넣는다.

 

=NETWORKDAYS(today(), C3)

 

이 함수는 C3 셀의 날짜와 오늘 날짜 사이에 영업일로 며칠이 있는지를 확인하는 함수이다. 결과는 아래와 같다.

 

배당락일까지 남은 일수 계산

 

마지막에 2022/4/19는 예시로 넣은 것이다. 오늘 날짜는 2022/4/14이다. 따라서 계산을 해보면 19, 18, 15, 14일, 이렇게 총 4일을 계산했다. 오늘까지 포함된 날짜인 것이다. 

 

그런데 위에서 설명했듯이 우리는 배당락일 2 영업일 전에는 주식을 매수해야 한다. 따라서 배당락일이 4월 19일이라고 하면 2 영업일 전날인 4월 15일에는 주식을 매수해야 한다. 따라서 식을 아래와 같이 고쳐본다.

 

=NETWORKDAYS(today(), C3)-3

 

그 결과는 아래와 같다.

 

야후 파이낸스 배당락일까지 남은 일수

 

배당락일이 4월 19일이라면 우리나라에서는 4월 15일까지 주식을 매수해야만 한다. 그리고 오늘이 4월 14일이므로 하루 남았다. 위의 식도 그렇게 표시가 되고 있다.

 

 

4. 마무리

배당주 투자에 있어서 배당락일은 매우 중요한 정보이다. 구글 스프레드시트로 야후 파이낸스의 배당락일을 쉽게 불러들이고 날짜 서식으로 바꾸어서 남은 일수를 계산하는 포스팅을 올려보았다. 필요로 하는 투자자분들께 도움이 되길 빈다. 

 

 

반응형