potass' blog

ポタシウムのことが書いてないブログ。

レインフロー法 #3(Excel VBA 実装編)

  1. レインフロー法 #1(準備編) - potass' blog
  2. レインフロー法 #2(デバッグ準備編) - potass' blog
  3. レインフロー法 #3(Excel VBA 実装編) - potass' blog←今回!

いよいよ Excel VBA での実装を試みる。なお、使用にあたっては自己責任で。

実装上の流れ

簡明にされたレインフローアルゴリズム「P/V差法」について | CiNii Research の Fig.11 の通りに実装。損傷率は算出しないのでそこはex_data()にデータを保存した。

使い方

rainflowを呼び出せば OK。
面倒なので以下の前提で実装。他にもあるかも。

  • A 列が時刻やデータ No.、B 列がレインフロー法を適用したいデータ(応力値、ひずみ等)。
  • データのスタートは1行目からですべて数値データ(欠損値や文字列がある場合のエラー処理なし)とする。
  • データの並びは1行目から順番になっている。
  • 他のセルに書き込みがあっても良い。ただし、D/E/F/G/H 列及び J/K 列は出力結果で使用するため強制的に上書きされる。
  • ActiveSheet に対し処理をするため、マクロ開始時・実行中はレインフロー法を適用したいデータのあるシートを選択のこと。なお、選択セルはどこでもいい。

コード

お試し

レインフロー法 #2(デバッグ準備編) - potass' blogと同じデータ(A/B 列)に対して実行。
最初と終わりもピーク(極値)としている出ていること*1以外一致したー。よかったー。

参考

www.excel-chunchun.com
シート(セル)のデータ→配列はこれを参考。後続の記事になればなるほど汎用性が上がってたが自分はユーザー側が配慮しろ!って割り切った。
pypi.org
Python の Rainflow モジュール。主にデバックで参考にした。出力形式もこれとほぼ同じにした。ASTM E1049-85 とは言ってるけど結局似たようなコードになったし P/V 差法とアルゴリズムはほとんど同じなんだな。
あとここではスタックpoppushでスマートに実装してるね。自分が Python で作ってもこういうふうには書けないな。羨ましい…。

*1:Python のモジュールの出力結果と比較するため、130/147/160行をコメントアウトして131/148/161行のコメントアウトを解除したもので実行しています。