Excelマクロを使用して銘柄情報を取得する方法

このQ&Aのポイント
  • Excelマクロで、銘柄情報を取得する方法について教えてください。
  • 具体的な手順やコードの解説も含めてお願いします。
  • また、取得した情報を表示する方法も知りたいです。
回答を見る
  • ベストアンサー

RSSマクロ

winxp he sp3, excel2003 1. 問合せ 参考a.マクロでは、iNumber = 6501 1個となっています。 これを、銘柄txtから読み込んで、下記のような結果を表示したいのです。 2. 銘柄.txt 約100個: 6501,日立 6502,東芝 6503,三菱電機 3. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,770,785,765 6502,東芝,765,779,758 6503,三菱電機,780,985,970 参考: a. Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/9/3 ユーザー名 : Cells(1, 1) = "コード": Cells(1, 2) = "銘柄": Cells(1, 3) = "現在値" Cells(1, 4) = "高値": Cells(1, 5) = "安値" Dim iRow As Integer '行指定 Dim iNumber As Integer 'A列4桁数字 iNumber = 6501 'A列の4桁数字初期指定 iRow = 2 '2行目 Cells(iRow, 1).Select 'A列をセレクト(アクティブ化) Cells(iRow, 1) = iNumber 'A列に数字を入力 Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力 Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力 Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!高値" 'D列に式を入力 Cells(iRow, 5) = "=RSS|'" & iNumber & ".T'!安値" 'E列に式を入力 End Sub b. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,809,815,805 よろしくお願いします。

  • esd827
  • お礼率48% (219/455)

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.9

ANo.8です。 データの取得には時間がかかるようですね。 あとは実際にRSSを行なっている方でないと検証出来ないもので、 対策案は浮かんでこないです。

esd827
質問者

お礼

RSS接続に時間が掛かる件については、他のRSSマクロも同じです。楽天serverによるものです。これで締め切らせていただきます。 親切に対応していただき、感謝しています。20pointではなく、花丸です。

esd827
質問者

補足

ありがとう御座います。他のRSSでは、長い時で30sec 繋がらない時もあります。マクロの再立ち上げしています。それ以外では、順調です。

その他の回答 (7)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.8

ANo.7です。 或いはRSSが情報を取得する際のタイミングの問題かも知れないですね。 Excelの方が処理が進んでしまいエラーを引き起こすのかも。 Loopの前に Application.Wait Time:=Now() + TimeValue("0:0:1") を入れてみて少し待たせるようにしてみては。 処理時間は若干遅くなるでしょうが、エラー回避になるかもです。

esd827
質問者

補足

ありがとう御座います。やって見ましたが、あまり効果がありませんでした。分かってきました。最初 RSSデータが出なかったのですが、しばらく、接続状態にしていたら、データが表示されました。楽天側RSS接続に時間が掛かるようです。他のRSSマクロも同様に、すぐに接続されないです。待てばいいようです。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.7

ANo.6です。 仮にRSSに問題があったとしても、 >Cells(iRow, 3) = v(2) 'C列に市場を入力 --------------------------------------------1 ここでエラーが出ているのは、読み込んでいるテキストファイルの異常ですよ。 2~4であればRSSが関係するでしょうが。 試しに新規Bookを作成して以下のコードで銘柄.txtを読み込んでみて下さい。 Sub 確認のためのサンプル() Const cFILENAME = "R:\銘柄.txt" ' ファイルのフルパス Dim iRow As Integer ' 行指定 Dim iNumber As Integer ' A列4桁数字 Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 読み込んだレコード内容 Dim v As Variant ' 読み込んだデータを区切る Range("A1:C1").Value = Array("コード", "名称", "市場") ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open cFILENAME For Input As #intFF ' データの表示開始は2行目 iRow = 2 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' 改行までをレコードとして読み込む Line Input #intFF, strREC v = Split(strREC, ",") ' 読み込んだ1行を","で区切る If UBound(v) <> 2 Then MsgBox "銘柄.txtの" & iRow - 1 & "行目の" & vbLf & strREC & _ vbLf & "に問題あります。" End If Cells(iRow, 1) = v(0) 'A列に数字を入力 Cells(iRow, 2) = v(1) 'B列に名称を入力 Cells(iRow, 3) = v(2) 'C列に市場を入力 iRow = iRow + 1 '行数更新 Loop ' 指定ファイルをCLOSE Close #intFF End Sub v(2)がエラーになる原因がわかるかも知れません。

esd827
質問者

補足

ありがとう御座います。上手くいきました。特に、test2は何もしていません。何故、今回okになったのか分かりません。これで、しばらく様子を見てみます。ok確認後、締め切らせて頂きます。 親切に相談に載って頂き感謝しています。本当にありがとう御座いました。 1.確認のためのサンプル マクロ結果: コード,名称,市場 6162,ミヤノ,T 6290,SES,Q 3765,ガンホー,OJ 7974,任天堂,OS 2.test2 マクロ結果: コード,名称,市場,現在値,高値,安値 6162,ミヤノ,T,240,244,239 6290,SES,Q,340,340,323 3765,ガンホー,OJ,193900,198000,185200 7974,任天堂,OS,51800,51900,50200

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

ANo.5です。 >v(2) で引っ掛かりました。 >実行時エラー 9 インデックスが有効範囲にありません 銘柄.txtに >6162,ミヤノ,T >6290,エス・イー・エス,Q >3765,ガンホーオンラインエンターテイメント,OJ >7974,任天堂,OS のように","で区切られた3列ずつのデータがあればエラーは出ないはずです。 特に >Cells(iRow, 3) = v(2) 'C列に市場を入力 --------------------------------------------1 ここでのエラー発生であれば尚更でしょう。 或いは","の代わりに"."になっているとか、タブ区切りなど別の区切りがあってもエラーになり得ますね。 (","が全角の"、"でもエラーですけど) あとデータが2列しかない所があれば、それもエラー原因になります。 検証したのは提示された情報のみですから、提示された内容と実際の 銘柄.txtを見比べて下さい。 こればかりは実際のデータがなければ検証できない範囲ですので。 あと銘柄.txtに項目行はつけないで下さい。 項目行の有無の判断は含まれていませんので。

esd827
質問者

補足

回答ありがとう御座います。 再確認結果を示します。 1.  >のように","で区切られた3列ずつのデータがあればエラーは出ないはずです。  ","で区切られた3列ずつのデータ となっています。 2. 特に >Cells(iRow, 3) = v(2) 'C列に市場を入力 --------------------------------------------1 ここでのエラー発生であれば尚更でしょう。 或いは","の代わりに"."になっているとか、タブ区切りなど別の区切りがあってもエラーになり得ますね。 (","が全角の"、"でもエラーですけど)  ご指摘の内容 ,で区切られています。 3. >あとデータが2列しかない所があれば、それもエラー原因になります。  これは有りませんでした。  4. >あと銘柄.txtに項目行はつけないで下さい。項目行の有無の判断は含まれていませんので。  これも有りませんでした。 実は、このRSS関数 他の掲示板でも、同じ内容の引数の問題があり、うまくいきませんでした。現在、マクロ作成者により、掲示板から削除されています。この関数の悪い点です。簡単にはできないようです。 親切な対応 感謝しています。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

ANo.3です。 完全検証できないのでご参考程度に。 Sub test2() Const cFILENAME = "R:\銘柄.txt" ' ファイルのフルパス Dim iRow As Integer ' 行指定 Dim iNumber As Integer ' A列4桁数字 Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 読み込んだレコード内容 Dim v As Variant ' 読み込んだデータを区切る Range("A1:F1").Value = Array("コード", "名称", "市場", "現在値", "高値", "安値") ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open cFILENAME For Input As #intFF ' データの表示開始は2行目 iRow = 2 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' 改行までをレコードとして読み込む Line Input #intFF, strREC v = Split(strREC, ",") ' 読み込んだ1行を","で区切る iNumber = Val(v(0)) 'A列の4桁数字指定 Cells(iRow, 1) = iNumber 'A列に数字を入力 Cells(iRow, 2) = v(1) 'B列に名称を入力 Cells(iRow, 3) = v(2) 'C列に市場を入力 Cells(iRow, 4) = "=RSS|'" & iNumber & "." & v(2) & "'!現在値" 'D列に式を入力 Cells(iRow, 5) = "=RSS|'" & iNumber & "." & v(2) & "'!高値" 'E列に式を入力 Cells(iRow, 6) = "=RSS|'" & iNumber & "." & v(2) & "'!安値" 'F列に式を入力 iRow = iRow + 1 '行数更新 Loop ' 指定ファイルをCLOSE Close #intFF End Sub

esd827
質問者

お礼

追伸: コード,名称,市場,現在値,高値,安値 6162,ミヤノ,,,, 式はありませんでした。

esd827
質問者

補足

回答ありがとう御座います。 v(2) で引っ掛かりました。 実行時エラー 9 インデックスが有効範囲にありません Cells(iRow, 3) = v(2) 'C列に市場を入力 --------------------------------------------1 Cells(iRow, 4) = "=RSS|'" & iNumber & "." & v(2) & "'!現在値" 'D列に式を入力-------2 Cells(iRow, 5) = "=RSS|'" & iNumber & "." & v(2) & "'!高値" 'E列に式を入力 --------3 Cells(iRow, 6) = "=RSS|'" & iNumber & "." & v(2) & "'!安値" 'F列に式を入力 --------4 deback内容 1をcommentにしたら、2で引っ掛かります。 2をcommentにしたら、3で引っ掛かります。 以下同様でした。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

>データ50個で確認しました。その結果、最初のデータだけがNGで、他はOKでした。よろしくお願いします。 最初のコード"3381"において取得できるデータがないのでは? と言いますか、先に述べたように外部プログラムRSSがないので取得できるかどうかの 検証は出来ないのです。 あくまでテキストファイルからデータを順次読み込んで数式に当てはめるまでです。

esd827
質問者

お礼

親切に相談に載って頂き、感謝しています。市場コードの問題があり、方針変更に時間が掛かりました。銘柄.txtに市場コードを追加しました。名称は、RSSからの取得を止めて、銘柄.txtの名称を使う事にしました。名称が違うケースがあるためです。 銘柄.txt: コード,名称,市場 6162,ミヤノ,T 6290,エス・イー・エス,Q 3765,ガンホーオンラインエンターテイメント,OJ 7974,任天堂,OS マクロ結果: コード,名称,市場,現在値,高値,安値 6162,ミヤノ,T,=RSS|'6162.T'!現在値,=RSS|'6162.T'!高値,=RSS|'6162.T'!安値 6290,エス・イー・エス,Q,=RSS|'6290.Q'!現在値,=RSS|'6290.Q'!高値,=RSS|'6290.Q'!安値 3765,ガンホーオンラインエンターテイメント,OJ,=RSS|'3765.OJ'!現在値,=RSS|'3765.OJ'!高値,=RSS|'3765.OJ'!安値 7974,任天堂,OS,=RSS|'7974.OS'!現在値,=RSS|'7974.OS'!高値,=RSS|'7974.OS'!安値 すみませんが、もう少し相談に載ってください。

esd827
質問者

補足

回答ありがとう御座います。 3381,ビズネット ジャスダックですので、3381.T→3381.Q okになりました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

ANo.1です。 RSSはないので検証は完全ではないですが。 Sub test() Const cFILENAME = "R:\銘柄.txt" ' ファイルのフルパス Dim iRow As Integer ' 行指定 Dim iNumber As Integer ' A列4桁数字 Dim intFF As Integer ' FreeFile値 Dim strREC As String ' 読み込んだレコード内容 Cells(1, 1) = "コード": Cells(1, 2) = "銘柄": Cells(1, 3) = "現在値" Cells(1, 4) = "高値": Cells(1, 5) = "安値" ' FreeFile値の取得(以降この値で入出力する) intFF = FreeFile ' 指定ファイルをOPEN(入力モード) Open cFILENAME For Input As #intFF ' データの表示開始は2行目 iRow = 2 ' ファイルのEOF(End of File)まで繰り返す Do Until EOF(intFF) ' 改行までをレコードとして読み込む Line Input #intFF, strREC iNumber = Val(Split(strREC, ",")(0)) 'A列の4桁数字指定 Cells(iRow, 1) = iNumber 'A列に数字を入力 Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力 Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力 Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!高値" 'D列に式を入力 Cells(iRow, 5) = "=RSS|'" & iNumber & ".T'!安値" 'E列に式を入力 iRow = iRow + 1 '行数更新 Loop ' 指定ファイルをCLOSE Close #intFF End Sub ------------------------------------- Const cFILENAME = "R:\銘柄.txt" はこちらでのテスト環境です。 適宜修正願います。 テキストデータは順次読み込みになっています。

esd827
質問者

お礼

補足です。数式を示します。式は同じです。? コード,銘柄,現在値,高値,安値 3381,=RSS|'3381.T'!銘柄名称,=RSS|'3381.T'!現在値,=RSS|'3381.T'!高値,=RSS|'3381.T'!安値 8878,=RSS|'8878.T'!銘柄名称,=RSS|'8878.T'!現在値,=RSS|'8878.T'!高値,=RSS|'8878.T'!安値 8874,=RSS|'8874.T'!銘柄名称,=RSS|'8874.T'!現在値,=RSS|'8874.T'!高値,=RSS|'8874.T'!安値

esd827
質問者

補足

ありがとう御座います。 データ50個で確認しました。その結果、最初のデータだけがNGで、他はOKでした。よろしくお願いします。 マクロ結果: コード,銘柄,現在値,高値,安値 3381,#N/A,#N/A,#N/A,#N/A 8878,日本綜合地所,230,240,172 8874,ジョイント・コーポレーション,142,155,116

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

質問はテキストファイルを順に読み込みたいと言うことでしょうか? テキストデータの読み込み http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110.html

esd827
質問者

補足

回答ありがとう御座います。上記URL 読み込みを確認しました。 補足説明します。 テキストファイルデータを全て取り込み、その後各コードに対応する表示を下記の様にしたいのです。 2. 銘柄.txt: 1801,大成建 7968,田崎真珠 3110,日東紡  約100個 3. マクロ結果: コード,銘柄,現在値,高値,安値 1801,大成建,770,785,765 7968,田崎真珠,765,779,758 3110,日東紡,780,985,970 このマクロ結果は、列がずれて、見にくくなるので、カンマを入れています。CSV対応。 よろしくお願いします。

関連するQ&A

  • Excelで「=RSS|'****.T'!銘柄コード」の*に参照した数字を入れたいです

    ExcelでB1に「=RSS|'****.T'!銘柄コード」の*に例えばA1に入力された数字を 参照してA1に「1234」と入力したら****に1234と代入したいです。 「=RSS|'A1.T'!銘柄コード」とすると文字列ととらえてしまい代入することが できません。 何か上手い方法があれば教えて下さい。

  • vba 編集⇒Enter 繰り返しマクロ

    vba 編集⇒Enter 繰り返しマクロ  =RSS|'1000.T'!銘柄-----d列  rssの信号が不通の時は#N/A の表示  =RSS|'1000.T'!始値-----e列  =RSS|'1000.T'!高値-----f列  =RSS|'1000.T'!安値-----g列  =RSS|'1000.T'!終値-----h列  =RSS|'1000.T'!出来高---i列 上記 RSSを編集⇒Enter 操作を繰り返しで 各約9000行 各列は今現在の考えの予定ですが今フォームを考えている最中とvba入門開始の為 任意の列で、行11よりスタート出来る様にいていただければ !!。 Sub R_z() ' R_z Macro ' ' Keyboard Shortcut: Ctrl+z '   (1) ActiveCell.FormulaR1C1 = "=RSS|'1000.T'!出来高"     (2) Range("M12").Select      (1) (2) '?列  11行にカーソルを置くーーー’F2を押すーーEnterーーー12行にカーソルが移る   (3) ActiveCell.FormulaR1C1 = "=RSS|'1001.T'!出来高"   (4) Range("M13").Select    (3) (4) '?列  ’F2を押すーーEnterーーー12行にカーソルが移る ActiveCell.FormulaR1C1 = "=RSS|'1002.T'!出来高" Range("M14").Select   |   |   ActiveCell.FormulaR1C1 = "=RSS|'1003.T'!出来高" Range("M15").Select   ’以下繰り返し操作  End Sub  上記マクロはKeyboardより取り込みです

  • Excel マクロで困った

    A列 ------ B列 ------- C列 2716 ----- ------- =RSS|'2716.T'!更新時刻 2236 ----- ------- =RSS|'2236.T'!更新時刻 410 ----- ------- =RSS|'410.T'!更新時刻 9134 ----- ------- =RSS|'9134.T'!更新時刻 263 ----- ------- =RSS|'263.T'!更新時刻 手動 A列 は=RAND( ) で約 1万行 位 手動 C列 に=CONCATENATE( ) で A列 を挿入 =CONCATENATE($C$1,$C$2,$A11,$C$4,C$10) A11 の数字が全部同じになる困った マクロ C列 を完成   Range("c11").Select i = i + 11    f01: Cells(i, 3).Select     Selection.Copy     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _     :=False, Transpose:=False      Application.CutCopyMode = False      ActiveCell.FormulaR1C1 = "=RSS|'2716.T'!更新時刻" 注    Aの2716に数字が全部同じになる困った     i = i + 1     If Cells(i, 3) <> "" Then GoTo f01     End Sub

  • 表示

    以下のようにA列の数字をB列(記号、文字も含む)に入れ、表示させるためにはどのようなVBAにすればいいですか?    A    B (1) 1234   =RSS|'ここにA列の数字.T'!銘柄名称 (2) 1424   =RSS|'ここにA列の数字.T'!銘柄名称 (3) 3534  =RSS|'3534'!銘柄名称

  • エクセルマクロの条件分岐を列単位で行う

    エクセルで株価取得の仕組みを作ろうと思い マクロのIf~ElseIfを列単位で条件分岐できないかと考えています。 今、作りたいと思っているのは (1)列に特定の数値があった場合は (2)セルに入力されている銘柄コードの (3)始値・高値・安値・終値・出来高といった時系列データをネットから取得 を考えています。 添付画像で言うと例えば (1)C列の「前日比が+」であった場合は (2)A列の「銘柄コード」の (3)始値・高値・安値・終値・出来高といった時系列データをネットから取得 という事を考えています。 分かりにくくて申し訳ありません 添付画像では3銘柄ほどしかありませんが、 実際は150銘柄ほどでこれを行い、 条件を満たしている銘柄のすべてで時系列データを取得したいと思っています。 自分でやろうと思ったやり方では C1,C2,C3...と一つ一つ指定するくらいしか出来なかったため、 マクロが長文になってしまいました。 そこで列単位で一括で条件分岐する方法はないでしょうか。 アドバイス頂けると助かります。

  • セルの数字をマクロに

    os xp excel 03 Sub a() Range(" k7").Select    '----- カーソルをcell位置へ c = 8338     '<----- セルm7に入力した数字を表示したい With ActiveSheet     '----- 次の行で cell m6 に作成----- =RSS|'8338.T'!現在値 .Cells(6, 13).Formula = "=RSS|'" & Format$(c, "0000") & ".T'! 現在値 " End With Range(" k9").Select     '-----カーソルをcell位置へ End Sub 質問は  c = 8338     '<----- セルm7に入力した数字を表示したい (1) 都度マクロを開けて c = の処に数字を入力ではなくセルm7に入力した数字を表示したい

  • マーケットスピード RSSの使い方について

    たとえば、 セルA4に 8411 と入力したときに(東証という前提条件で) 他のセルで自動的に銘柄を表示させるにはどのようにすればよいのでしょうか? ="RSS|'"&A4&".T'!銘柄名称" と数式を作るだけではダメなのでしょうか?

  • マクロについて

    マクロであるプログラムを組んでいますが、うまくいきません。 かなり簡素化していいますと、次のような状況です。 エクセルのcells(1,1)に「9:30」という文字が入っています。 この"9:30"という文字列を読み出そうとするのですが読み出した値は0.39583…という数値になってしまっています。 具体的に言うと、 sub macro1() 開始時刻="9:30" 時刻=cells(1,1) if 開始時刻=時刻 then a=1 endif end というようなプログラム(実際はもう少し複雑ですが)を組んだのですが、どうしても「a=1」にならないので、デバッグ式で見てみると「時刻」の中味は"9:30"ではなく0.39583という数値だったということです。 ちなみにエクセルのそのセルの書式は、「表示形式:時刻、種類13:30」となっています。 どうすれば"9:30"という時刻(文字列)を読み出せるのでしょうか。教えてください。よろしくお願いいたします。

  • EXCELで行ごとの置換を簡単に行う方法は?

    EXCELで式の一部を行ごとに置換する簡単な方法を探しています。 具体的には、以下の3行目、4行目で、A列のコードに合わせて、D列、E列の式の「2175」の部分をそれぞれ、3行目なら「2413」に、4行目なら「3415」に置換したいです。   A列   D列           E列  1  Code  名称           株価 2  2157  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 3  2413  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 4  3415  =RSS|'2175.T'!銘柄名称  =RSS|'2175.T'!現在値 実際の行数は3000以上あるため、それぞれの行ごとに手作業で置換していくのは手間がかかりすぎるので、何か簡単に置換する方法をご教示いただきたいです。 どうか、よろしくお願いします。 当方、EXCELのバージョンは2013、Windows8.1です。

  • vba セルに入力した時間をマクロで受け取るには?

    はじめまして、 マクロを使ってタイマーをセットしているのですが、 たとえば1行A列に9:00:00という時間をセットして、 それをマクロでうけとりmacro1というマクロを時間とおりに動かすようにタイマーにせっとします。 プログラムは以下のとおりなのですが、 TimeValue(Cells(1, 1))のところがうまくいきません。 解決方法を教えてください。 よろしくお願い思案す。 Set_timer = TimeValue(Cells(1, 1)) Cells(5, 3) = "設定完了" MsgBox "タイマーを設定しました。" Application.OnTime TimeValue(Set_timer), "macro1"

専門家に質問してみよう