![見出し画像](https://assets.st-note.com/production/uploads/images/103093645/rectangle_large_type_2_4954e4e985e47f0ab21d1d929aa36dec.png?width=1200)
【初心者向け】上場銘柄エクセルを業種別にフィルタ&ソートするVBAの作り方
ExcelのVBA作成について、投資向けのVBAを投稿します。
簡単だと思うので、ウィザード級のVBA使いは読み飛ばしてOKだと思います。
さて、今回は、東証のサイトからダウンロードできる東証上場銘柄一覧のエクセルを使って、業種別にフィルタとソートをかけるVBAの作り方を紹介します。
https://www.jpx.co.jp/markets/statistics-equities/misc/01.html
東証上場銘柄エクセルとは、東証に上場している全ての銘柄の情報がまとめられたエクセルファイルで、月ごとに最新の銘柄がまとめられ、公開されています。
このエクセルファイルには、銘柄コードや市場名、業種名などが記載されていますが、そのままでは見づらく、分析にも向いていません。
![](https://assets.st-note.com/img/1681556406742-W0ezEEdSuf.png?width=1200)
そこで、VBAを使って、業種別にフィルタとソートをかけることで、自分の興味のある銘柄だけを見やすく表示することができます。
VBAとは、Visual Basic for Applicationsの略で、ExcelやWordなどのMicrosoft Office製品に組み込まれたプログラミング言語です。
VBAを使うと、繰り返し行う作業や複雑な処理を自動化したり、オリジナルの機能やツールを作成したりすることができます。
VBAは初心者にもわかりやすい言語ですが、基本的な文法や操作方法は事前に学んでおく必要があります。
今回の記事では、VBAの基礎知識はある程度あることを前提としていますので、ご了承ください。
それでは早速、上場銘柄エクセルを業種別にフィルタ&ソートするVBAの作り方を見ていきましょう。
まず、上場銘柄エクセルをダウンロードします。
1.東証のサイトにアクセスし、「上場会社情報」の「上場銘柄一覧」を
クリックします。
https://www.jpx.co.jp/markets/statistics-equities/misc/01.html
2.上場銘柄エクセルのダウンロードページに移動します。
3.「上場銘柄一覧(Excel形式)」のリンクをクリックすると、エクセル
ファイルがダウンロードされます。
このエクセルファイルには、A列からJ列までの10列に、約4300行のデータが入っています。
各列の見出しは以下の通りです。
- A列:日付
- B列:コード
- C列:銘柄名
- D列:市場・商品区分
- E列:33業種コード
- F列:33業種区分
- G列:17業種コード
- H列:17業種区分
- I列:規模コード
- J列:規模区分
今回は、このエクセルファイルにVBAを組み込んで、業種別にフィルタとソートをかけることを目指します。
次に、VBAのコードを書きます。
VBAのコードは、エクセルファイルの「開発」タブから「Visual Basic」ボタンをクリックして開くVisual Basicエディタで書きます。
※タブがない場合は、「ファイル」→「オプション」→「リボンのユーザ設定」から右側のメインタブの中の「開発」のチェックボックスを有効にしてください。
![](https://assets.st-note.com/img/1681557106181-7dMPfOIgV0.png?width=1200)
Visual Basicエディタが開いたら、「挿入」メニューから「モジュール」を選択して、新しいモジュールを作成します。
モジュールが作成されたら、以下のコードを入力します。
Sub FilterAndSortByIndustry()
'シートを変数に格納
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")
'データの範囲を変数に格納
Dim dataRange As Range
Set dataRange = ws.Range("A1:J" & ws.Cells(Rows.Count, 1).End(xlUp).Row)
'フィルタを解除
dataRange.AutoFilter
'業種別にフィルタ
Dim industry As String
industry = InputBox("H列のフィルタしたい業種区分を入力してください。")
dataRange.AutoFilter Field:=8, Criteria1:=industry
'業種別にソート
dataRange.Sort Key1:=dataRange.Columns(8), Order1:=xlAscending, _
Key2:=dataRange.Columns(1), Order2:=xlAscending, _
Header:=xlYes
'メッセージボックスで完了を通知
MsgBox industry & "のフィルタとソートが完了しました。"
End Sub
このコードでは、以下の処理を行っています。
1.シートとデータの範囲を変数に格納する
2.フィルタを解除する
3.ユーザーにH列の業種区分でフィルタしたい業種を入力してもらう
4.入力された業種でフィルタする
5.業種と銘柄コードで昇順にソートする
6.メッセージボックスで完了を通知する
コードが書けたら、「F5」を押して実行してみましょう!
できましたか?
いかがでしたでしょうか。
簡単なVBAですが、これらのVBA操作で以下のような拡張機能を持たせることもできます。
ソートした業種区分の内容を、別シートに分ける
業種区分の記載がある銘柄のみをシートや新しいブックに転記する
ソート後に指定の行のみをピックアップして、別のシートや新しいブックに転記する
など用途に合わせてコード改変することにより自分が好ましいと思う操作を実行できます。
次回は、
ソートした業種区分の内容を、別シートに分ける
をお送りします。
ヤスー(またねー)
この記事が気に入ったらサポートをしてみませんか?