レインフロー法 #3(Excel VBA 実装編)
- レインフロー法 #1(準備編) - potass' blog
- レインフロー法 #2(デバッグ準備編) - potass' blog
- レインフロー法 #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 差法とアルゴリズムはほとんど同じなんだな。
あとここではスタックpop
、push
でスマートに実装してるね。自分が Python で作ってもこういうふうには書けないな。羨ましい…。