アフィリエイト広告を利用しています

広告

posted by fanblog

広告

posted by fanblog
2013年07月27日
第10回 MT4からCSVファイルの取込




(1) CSVファイルの読込み

Workbooks.OpenText Filename:=パス名, DataType:=xlDelimited, Comma:=True
Set wb = Workbooks(ファイル名)


CSVファイルはテキストファイルなので Workbooks オブジェクトに OpenText を行うことにより Workbook オブジェクトを作成します。これで読込むことができました。
カンマ区切りファイルなので DataType:=xlDelimited, Comma:=True を指定します。

パス名とファイル名の例を挙げると下記のとおりです。
パス名 c:¥Program Files¥MetaTrader 4¥experts¥files¥USDJPY1440.csv
ファイル名 USDJPY1440.csv

(2) ワークシートに転記

Set wss = wb.Worksheets(1)

n = 最終行取得(wss)
If n = 0 Then wb.Close: Exit Function

Set wsd = ThisWorkbook.Worksheets(通貨ペア)
wsd.Cells.Clear

Set コピー元 = wss.Range(wss.Cells(1, 1), wss.Cells(n, データの出来高 + 1))
Set コピー先 = wsd.Range(wsd.Cells(2, 1), wsd.Cells(n + 1, データの出来高 + 1))
コピー先.Value = コピー元.Value


日付、時間、始値、高値、安値、終値、出来高の7項目をコピー元のワークブックから目的のワークシートに転記します。

(3) CSVファイルのクローズ

wb.Close
Set wb = Nothing


転記が終わったので CSVファイルをクローズし、 Workbook オブジェクトを解放します。

(4) データの成型

(4-1) B列(時間列)を削除

wsd.Columns(2).Delete

(4-2) 1行目(見出行)をセット

wsd.Cells(1, データの日時) = "日時"
wsd.Cells(1, データの始値) = "始値"
wsd.Cells(1, データの高値) = "高値"
wsd.Cells(1, データの安値) = "安値"
wsd.Cells(1, データの終値) = "終値"
wsd.Cells(1, データの出来高) = "出来高"


(4-3) MT4の日付をエクセルのDate形式に変換

Set 日時範囲 = wsd.Range(wsd.Cells(2, データの日時), wsd.Cells(n + 1, データの日時))
日時配列 = 日時範囲.Value
日付形式変換 日時配列
日時範囲.Value = 日時配列


処理の高速化のため日付を配列にして形式変換を行っています。
日付形式変換ルーチンは下記のとおりです。

Private Sub 日付形式変換(日時配列)
n = UBound(日時配列, 1)
For i = 1 To n
   年月日 = 日時配列(i, 1)
   年 = Left(年月日, 4)
   月 = Mid(年月日, 6, 2)
   日 = Right(年月日, 2)
   日時配列(i, 1) = DateSerial(年, 月, 日)
Next i
End Sub


CSVファイルの日付は 2013.07.25 の形式で記録されています。これは文字列形式なのでエクセルは日付として認識しません。 DateSerial 関数を使用して Date 形式 に変換しています。これでエクセルが日付として認識できるようになります。

(4-4) 日付の昇順にソート

Set データ範囲 = wsd.Range(wsd.Cells(2, データの日時), wsd.Cells(n + 1, データの出来高))
データ範囲.Sort key1:=wsd.Cells(2, データの日時)


日時をキーにして range オブジェクトに sort を行っています。


(5) プロパティシートの設定



MT4フォルダ名にMT4のセットアップされているフォルダ名を入力して下さい。



エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 08:50 | この記事のURL
この記事のURL

×

この広告は30日以上新しい記事の更新がないブログに表示されております。