2-2.銘柄コード検索

(1) 概略
会社名は判るが銘柄コードが判らず知りたいことがありますが、そんな時の為に 解析ツールにはコード検索もあると便利です。ここでは下図のようなユーザーフォームを 自作してコード番号を検索する方法を説明します


なお、検索に使用する基データが必要ですが、本例の場合Sheet2へ東証1部の コード番号と銘柄を貼り付けてあります。(下図参照)



(2)メインオブジェクト

Dim bangou(1, 3000) As String   '東証一覧     '[1]
Dim koudock As Integer          '行保存用     '[2]


Sub コード検索()
Application.ScreenUpdating = False

If bangou(1, 0) <> "取込済み" Then            '[3]
    ThisWorkbook.Worksheets("Sheet2").Activate
    Cells(10000, 1).End(xlUp).Select   
    endr = Selection.Row
    Range("A1").Select

    For i = 1 To endr                         '[4]
        bangou(0, i) = Cells(i, 1)
        bangou(1, i) = Cells(i, 2)
    Next
        bangou(0, 0) = endr                   '[5]
        bangou(1, 0) = "取込済み"
End If
    Worksheets("Sheet1").Select      
    UserForm1.txt2.SetFocus
    UserForm1.Show 0                          '[6]
End Sub
[1] 東証一覧を入れる配列を宣言
[2] 変数"koudock" は1度チェックしたコードを避ける為チェック済み行を保存用
[3] マクロを実行した時東証一覧を配列へ入れているが、配列に既にある場合はパス
[4] 配列へ取り込み
[5] データは1以降に取り込んであり、後で使用の関係で0にはデータ量と"取込済み"を記録
[6] ユーザーフォーム表示(モ-ドレスの0指定の場合Excel2000以降が対象)

(3)ユーザーフォームモジュール

Private Sub CommandButton1_Click()
    Call 検索
End Sub
[1] 「コード検索」ボタンクリックで、プロシージャ「検索」をコール

(3)検索を実行するマクロ

Sub 検索()
Dim koudo As String '銘柄番号
Dim rm1 As Integer 'セル位置

dat = UserForm1.txt2.Text                         '[1]
If dat = "" Then
   MsgBox "社名を指定して下さい。"
   Exit Sub
End If

For rm1 = koudock To bangou(0, 0)                   '[2]
    If InStr(1, bangou(1, rm1), dat, 1) > 0 Or InStr(1, bangou(0, rm1), dat, 1) > 0 Then
        koudo = bangou(0, rm1)
        meigara = bangou(1, rm1)
        
        With UserForm1                               '[3]
          .txt3.Text = "検索した[" & meigara & "]は【" & koudo & "】"
          .txt1.Text = koudo
        End With
        koudock = rm1 + 1
        Exit For
    End If
Next
    
    If koudock = 1 And koudo = "" Then                '[4]
            MsgBox "検索した[" & dat & "]はありません。" & Chr$(10) _
    & "データが漏れている場合は、このブックのSheet2へ追加して下さい"
    koudock = 1
    End If

    If koudock <> 1 And koudo = "" Then               '[5]      
        MsgBox "検索した[" & dat & "]は検索終了"
            koudock = 1
    End If

End Sub

[1] テキストボックス(txt2)を読み取り
[2] 検索の実行
 ・配列(bangou)の内容をチェックする。この時検索スタートは変数(koudock)に入っている番号から
 ・チェックとしては配列の0列、1列で行っており、番号を入れた場合の銘柄も検索できます
 ・InStr(1, bangou(1, rm1), dat, 1)の最後の「1」指定で大文字/小文字を区別しないで検索です
[3] 文字に合致(1部でもOK)が合った場合、テキストボックス(txt3)へ表示
  ・この時テキストボックス(txt1)にも入れる(コード番号で別マクロ実行の場合はこちらを使用)
  ・koudock = rm1 + 1 → 次回の検索は次の配列番号から行う為に+1する
[4] 検索した文字が無い場合メッセージ表示
[5] 検索終了の処理



【戻る】