• 締切済み

エクセルの関数について(為替のデータ取得)

エクセルの関数について質問です。 為替のデータ8年分をマクロを利用して取得しています。(webクエリにてyahooファイナンスから取得) そこまでは、いろいろと調べてマクロでデータを取得するところまでは出来たのですが、 GBP/JPYとCHF/JPYの始値、高値、安値、終値をそれぞれ出した所、 途中から、日数が合わなくなってしまいました。データを上から見ていったところ、2000年の12月26日のデータがGBP/JPYは無く、CHF/JPYは有りました。原因は分かりませんが、そのような日が4日ほどあるらしく、最後の2007年11月29日までに4日分のセルのズレが発生してしまいました。 これだと、オートSUMのコピーを利用した鞘の計算が出来ません。(正確には、出来ても日にちがずれてしまうため意味が無くなってしまう) 数日なら手作業でセルをあわせていけば良いのですが、2500日分ほどのデータ量なので出来れば、お互いにそろわない日付(たとえばCHF2000/12/26とGBP2000/12/26であればCHFのみのデータしか無いので セルにはGBPが一日ずれた2000/12/27日のデータが入っています。ちなみにB5~F5までがGBP/JPY。I5~M5までがCHF/JPYとなっています) のデータを探し出して余分に存在する日を消去するか、日付の合わないデータのセルは空白にする関数が有れば便利だなと思いまして質問させていただきました。理想としてはどちらか片方のデータが存在しない日は、取得しないというのが一番なのですが・・・。 勉強するためのヒントでもよろしいのでご回答宜しくお願いします

みんなの回答

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.4

参考までに、 下記URLから、フリーソフトが出ましたので紹介します。 Excel株価取得 Ver.1.02 KabuBegin 作 【ソフト概要】 Microsoft Excel2000で作成した、株価取得ソフトです。 【主な機能】 YahooファイナンスのWebサイトから株価情報を取得します。 (Yahooファイナンスでは20分遅れで株価が更新されています) 【 ファイル内容 】 ダウンロードしたファイルを解凍すると以下のファイルが作成されます。 ex株価取得.xls:「ex株価取得.xls」原本Excelファイル ex株価取得.txt:説明ファイル(このファイル)

参考URL:
http://www2.moug.net/cgi-bin/softwaredl.cgi?excel+SI2007042002
  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.3

また 疑問が、出た時のため もう少しクローズしない方が、 良いでしょう。

bakabon77
質問者

お礼

Nayuta_x様 ありがとうございます。 そうですね、私自身この問題が自己、他力にかかわらず 解決できるまでこのままクローズせずにしておきたいと思っております。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

そうですね。 言葉では、うまく伝えることが出来るか心配ですが 手順1   カレンダーのデータベースが、あるものとします。   このカレンダーを別のBookに書き込みします。   ☆例: シートの左端しに 日付を書き込みます。     手順2   そのカレンダーデータベースを基にGBP/JPY の日付をソートして   (カレンダーデータベースとGBP/JPY の日付が、一致したら)   そのデータを別のBookに下記込み(転記)します。   説明: 日付が、一致しない部分は空白になります。   ☆例: 文字の制限があるのでカンマで、区切りました。      実際は、直接セルにcopyするので無視してください。    1999/01/04,1999/01/04,188.15,189.83,183.83,185.29       中間は、省略    2000/12/24    2000/12/25,2000/12/25,165.82,165.82,165.82,165.82 手順3   同様に、CHF/JPYも処理します。 ☆☆☆ コードに関して:   処理コードには難しいものは、必要ありません。 カレンダー情報は、DateAdd("D", 加減する時間,元となる日付や時間) で得る事ができます。  参考URL: http://www.moug.net/tech/exvba/0130011.htm また、日付同士の比較は、Like 演算子で出来ます。  参考URL: http://www.moug.net/tech/exvba/0040028.htm 以上参考まで

bakabon77
質問者

お礼

Nayuta_x様 ご回答ありがとうございます。 私自身まだまだ勉強不足なようで、もう少し関数やマクロについて 調べてみる必要がありそうです。 参考URL確認しました。 like演算子についてもっと深く勉強してみようと思います。 いろいろとテストを繰り返して、どういう動作をするものなのか? と言うような作業をいくつも繰り返して覚える必要がありそうなので、 少し時間がかかりそうです。折角回答いただいたのに十分理解することが出来ませんでした。 Nayuta_x様には重要なヒントをいただきました。 ありがとうございました。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

データを見ないと 断言出来ませんが、 私だったら、データを別Bookなどに再編します。 方法は、対象期間のカレンダー(注意: ウルー年も考慮すること)から     ソートしたデータ(データ上にあるカレンダー情報)とマッチするか否かで、 データの不足が、あったらキーワード(このキーワードは、空白にするとか取得しないという判断するもの)をセルに入れます。 これが終わったら 次に、このキーワードを元に 処理(具体的には、説明がないので不明ですが グラフ化するとかでしょう)をします。 尚、セルにはGBPが一日ずれた2000/12/27日のデータが入っています が、確実なら(裏づけがあるなら)前日に移動することもできます。 でも、このデータの使用目的がより高い信頼度を要求されるのであれば、データは、なかったことにすべきでしょうね。

bakabon77
質問者

補足

Nayuta_x様 早速のご回答ありがとうございます。 お礼の方ですと1000文字しか入れられないので補足コメントにてお礼も兼ねさせていただきます。 まず補足事項を GBP/JPY 日付      始値  高値   安値   終値 1999/01/04    188.15  189.83 183.83  185.29 1999/01/05    186.00  186.00 182.90  184.24 これが、B5~F5を基点に2194日分あります。 そして CHF/JPY 日付      始値  高値   安値  終値 1999/01/04    80.82  82.07  80.00  81.85 1999/01/05    80.97  81.89  80.50  81.20 こちらがI5~M5を基点に2198日分あります。 この2通貨の鞘(それぞれ始値の鞘、高値の鞘、安値の鞘、終値の鞘を 日付ごとに計算)を約2200日分出した後、株価グラフにてチャート化したいと思っています。日付にずれが無ければそのまま手作業(もしくはマクロ化して)でも計算できるのですが、4日分GBPには存在しないデータが有るので、そのずれを修正(この場合CHFにしか存在しない日を消去)出来ればと思っています。 問題の日にち GBP/JPY 2000/12/25  165.82  165.82  165.82  165.82 2000/12/27  169.26  169.84  168.74  169.65 2000/12/28  171.03  171.31  170.14  171.31 2000/12/29  171.19  171.72  170.52  170.81 2001/01/04  169.70  172.46  168.85  172.30 CHF/JPY 2000/12/25  68.50  68.56  68.39  68.55 2000/12/26  69.97  69.97  69.47  69.53 2000/12/27  70.26  70.29  69.75  69.82 2000/12/28  70.21  70.23  69.73  70.00 2000/12/29  70.89  71.07  70.50  70.98 CHF/JPYには200/12/26のデータは存在するのに GBP/JPYには2000/12/26のデータが存在しません。ヤフーファイナンスで直接12/10~12/29までのデータを出してみたところやはり存在しないようです(何故だかは分かりませんが、ただいま調査中です)  Nayuta_x様のおっしゃる別Bookに再編とは、GBP,CHFの日付の値をそれぞれ比較してマッチするかどうかを調べ、別Bookへ出力するマクロを作成するという解釈でよろしいでしょうか?頭ではどういう処理をさせるかと言うのは分かるのですが、構文を書くに当たって何を利用してよいやら・・・(たとえばSelect Caceに比較演算子を入れ条件分岐させて、両方存在するなら表示、片方しか無いなら消去させるとか?この辺はただ今試行錯誤中です)  どちらか片方にしか存在しない日付のデータを探し出すことが出来る処理方法があれば、あとは問題のデータを手作業で削除することで対処できると思います。 すべてVBAで一括処理出来るのが理想なのですが、まずは上記の処理方法を知りたいと思っています。どの関数を利用するのが最適なのでしょうか?  要点は、 (1)片方にしか存在しない日付を探し出す。 (2)探し出した存在する方の日付を削除。(これは最悪手作業でも可) これが今回の要になります。  Nayuta_x様 私の要領の悪い説明にご回答いただいてありがとうございました。引き続き自分自身でも勉強をしていきたいと思います。

関連するQ&A