VBAで地震波時刻歴のテキストデータを読み込んで図化用データをつくる!

プログラミングの勉強

Excel2013VBAで地震波データを読み込んで、地震波時刻歴図を作成します。

今回は、地震波のテキストデータを読み込んで、新しくWorkbookを開き、図化用のデータをこのExcelシート上に書き込みます。

今回使用する地震波加速度時刻歴データの例

今回は、次のような地震波加速度時刻歴データ(テキストデータ ”地震波サンプル.txt”)を使用します。

まず、1行目は、つぎのようなデータからなります。

_1~45文字目 : データの説明
46~55文字目 : 最大加速度(Gal)  → 125.3743Gal
71~75文字目 : 時間ステップ(sec)  → 0.010sec
76~80文字目 : データ数      → 16384個

2行目からは、小数点以下5桁の実数(Fortranでいえば”F8.5”)のデータ16,384個が続きます。

このデータは最大値が1.00となる数値で、最大加速度(このデータでは125.3743Gal)をかけると加速度時刻歴データとなります。また、これら数値は、上から順に0.000sec、0.010sec、0.020secと、0.010secずつ増えていく時刻に対応します。

テキストデータ読み込み・書き込み操作の流れ

Excelを立ち上げ、「開発」タグからVisual Basicを起動し、”Module1”にテキストデータの読み込み図化用データの作成操作を記述していきます。     

ここでは、次の順に操作を記述しています。

  1. 変数の定義
  2. [ファイルを開く]ダイヤログボックスを表示して、地震波データファイルを選定
  3. 新しいワークブックを開く
  4. 選択した地震波データファイルをオープンして、データを読み込み
  5. 図化用データに加工(B列に時刻、C列に加速度)して、新しいワークブックに書き込み(時刻と加速度を計算して、B列に時刻、C列に加速度を出力)
  6. 4.5.を繰り返す
  7. 地震波データファイルを閉じる

テキストファイルの読み込み方法

テキストファイルの読み込みに使用したオブジェクト、メソッド、関数を説明します。

ダイアログボックスを表示して、選択したファイルのフルパスを返す

ApplicationオブジェクトのGetOpenFilenameメソッドを使用します。

Application.GetOpenFilename(FileFilter,省略,Title,省略,省略)
 FileFilter
  CSVファイルを指定する場合   → ”CSVファイル(.csv),.csv”
  テキストファイルを指定する場合 → ”テキストファイル(.txt),.txt”
  省略すると           → ”すべてのファイル(.),(,)”
 Title:ダイアログボックスが開かれたときに、左上に現れる文字
  省略時 ”ファイルを開く”と表示される

新しい”Workbook”を開く

Workbooks.Add

テキストデータを開き、閉じる

テキストデータを読み書きするときは、テキストに何を実行するかに応じた命令文でファイルを開き、実行終了時にファイルを閉じます。

ファイルを開く
  読み込み:Openファイル名 For Input As #番号
  書き込み:Open ファイル名 For Output As #番号
       ※ファイル名は上述のフルパスで指定します。
ファイルを閉じる
       Close #番号

テキストファイルを1行ずつ読み込む

Line Input #番号, 変数

1行ずつ読み取ったデータからデータを抜き出す

Mid(文字列,開始位置,文字数
  ※開始位置(何文字目)から指定した文字数を抜き出す

実行してみる

作成した内容を実行してみます。

「ユーザーフォームの実行」をクリックすると、

「ファイルを開く」ダイアログボックスが開きますので、図化したいデータ ”地震波サンプル.txt” を指定して、「開く」をクリックします。

下図のように、1行目にデータの説明、最大加速度、時間間隔、時間ステップ数が、2行目から16385行目までは、A列にテキストデータ、B列に時刻、C列に地震波加速度が出力されました。

コメント

タイトルとURLをコピーしました