Googleスプレッドシートで米国株の配当利回りを取得する

証券情報の取得にはGOOGLEFINANCE関数が便利ですが、残念ながら配当利回りは取得できないようです。
そこで https://finviz.com/ にある配当利回りの情報をGoogleスプレッドシートにインポートして表示することにします。
画像はアップル社の証券情報です。
一番右に配当利回りを表示しています。
![20211212_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/d310ef79-c945-d38a-103d-45e22ef048bf.png)

# IMPORTHTML関数
Webサイト上のデータをインポートするためにIMPORTHTML関数を使用します。

https://support.google.com/docs/answer/3093339?hl=ja
> 構文
> IMPORTHTML(URL, クエリ, 指数)

__第一引数 - URL__
> * URL - 検証するページの URL です。プロトコル（http:// など）も含めます。
>   * URL の値は二重引用符で囲むか、適切なテキストを含むセルへの参照にする必要があります。

今回はアップル社の証券情報が欲しいので第一引数は以下になります。
<code>"https://finviz.com/quote.ashx?t=AAPL"</code>

__第二引数 - クエリ__
> * クエリ - 目的のデータを含むアイテムの種類を "list"（リスト）か "table"（表）で指定します。

目的のデータは以下の表です。
![20211212_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/c9394350-d16c-a593-798b-37b727be108b.png)
Webページのソースを見ると、目的のデータはtableタグで書かれています。

```html
<table width="100%" cellpadding="3" cellspacing="0" border="0" class="snapshot-table2">
```
:::note info
Webページのソースの確認方法
1. Webページ上の何もない場所を右クリック（リンク、画像、フォーム等がない場所）
2. 「ページのソースを表示」を選択
:::
htmlファイルを見慣れていない場合、目的のデータの特定が少し難しいかもしれませんが、頑張ります。
第二引数には <code>"table"</code> を指定します。

__第三引数 - 指数__
> * 指数 - 対象の表またはリストについて、HTML ソース内で定義されている番号で 1 から順に指定します。
>   * リストと表の番号は個別に管理されるため、HTML ページに両種類の要素が含まれている場合は番号 1 を持つリストと表が両方存在する場合があります。

Webページのソースを確認し、目的のデータが何番目のtableなのかを確認します。

```html
# 1番目(62行目)
<table class="header" width="100%" cellpadding="0" cellspacing="0" border="0" style="min-width: 1000px">

# 2番目(68行目)
<table width="100%" cellpadding="0" cellspacing="0" border="0">

# 3番目(98行目)
<table class="navbar" width="100%" height="30" cellpadding="0" cellspacing="0" border="0">

# 4番目(213行目) ※tableタグは後ろの方にある
</script></div><div class="content" data-testid="quote-data-content"><div class="fv-container"><table width="100%"><tr>

# 5番目(215行目)
<table width="100%" cellpadding="3" cellspacing="0" bgcolor="#ffffff" class="fullview-title">

# 6番目(220行目)
<table width="100%" cellpding="0" cellspacing="0" class="fullview-links">

# 7番目(230行目) ※これが目的のデータ
<table width="100%" cellpadding="3" cellspacing="0" border="0" class="snapshot-table2">
```
※インデントは省略しています。

~~目的のデータは8番目のtableであることが分かりました。~~
~~第三引数は <code>8</code> です。~~
**※2022/1/9更新**
Webページのソースが更新され、目的のデータは7番目のtableになりました。
第三引数は <code>7</code> になります。

### 証券情報をインポートする
IMPORTHTML関数の引数が確認できたので実際に目的のデータをインポートしてみます。
<code>=IMPORTHTML("https://finviz.com/quote.ashx?t=AAPL","table",7)</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/23573241-0249-7243-a7a8-324c9012056c.png)
インポート成功です。

# INDEX関数
インポートしたデータの中から目的の値（配当利回り）を取得するためにINDEX関数を使用します。

https://support.google.com/docs/answer/3098242?hl=ja
> 構文
> INDEX(参照, [行], [列])

__第一引数 - 参照__
参照するのはインポートしたデータです。
上記のIMPORTHTML関数をそのまま指定します。
<code>IMPORTHTML("https://finviz.com/quote.ashx?t=AAPL","table",7)</code>

__第二引数 - [行] ／ 第三引数 - [列]__
配当利回りはインポートしたデータの _"Dividend %"_ の値です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/23573241-0249-7243-a7a8-324c9012056c.png)

8行目、2列目にあるので、第二、第三引数は <code>8,2</code> になります。

### 配当利回りを取得する
INDEX関数の引数も確認できたので配当利回りを取得してみます。
<code>=INDEX(IMPORTHTML("https://finviz.com/quote.ashx?t=AAPL","table",7),8,2)</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/400c4e5c-7095-92b7-9af1-b78146683662.png)
配当利回りを取得できました。

# SUBSTITUTE関数
取得した配当利回りの値の前後に「\*」があるので削除します。

https://support.google.com/docs/answer/3094215?hl=ja
> 構文
> SUBSTITUTE(検索対象のテキスト, 検索文字列, 置換文字列, [出現回数])

__検索対象のテキスト__
検索対象のテキストは取得した配当利回りです。
上記のINDEX関数をそのまま指定します。
<code>INDEX(IMPORTHTML("https://finviz.com/quote.ashx?t=AAPL","table",7),8,2)</code>

__検索文字列__
削除したい「\*」が検索文字列になります。
<code>"\*"</code>を指定します。

__置換文字列__
「\*」を削除したいので置換文字列は空白になります。
<code>""</code>を指定します。

### 配当利回りの前後の「\*」を削除する
SUBSTITUTE関数の引数も確認できたので配当利回りの前後の「\*」を削除してみます。
<code>=SUBSTITUTE(INDEX(IMPORTHTML("https://finviz.com/quote.ashx?t=AAPL","table",7),8,2),"*","")</code>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2377902/e916047a-0c89-4e92-6ee4-eb3c803d767d.png)
配当利回りの前後の「\*」が削除されました。
これで配当利回りを取得することができました。

# 関連記事
* [Googleスプレッドシートで米国株の株価を取得する](https://qiita.com/WhimsicalTheo/items/6811bd81ab4e814c8d1f)
* [Googleスプレッドシートで様々な通貨を日本円に換算する](https://qiita.com/WhimsicalTheo/items/460b2ece81bc47a96375)
* [Googleスプレッドシートで米国株の株価推移をSPARKLINEで表示する](https://qiita.com/WhimsicalTheo/items/c8c01ecf3ad063b507f4)

# 参考サイト
https://www.craftgoro.com/?p=2493

以上、最後まで読んでいただき、ありがとうございました。