ここではいくつかの曲線がずれている場合、目標のy値で揃えるExcelの関数の利用法について説明します。まずは以下のようにずれているとします。それを目標値に近い値を見つけてシフトして揃えます。
このずれた曲線のデータをy軸の20を目標値として揃えることをexcelで行います。(phytonの方が楽かもしれない)
表で目標値に近いところを黄色で塗ってあります。初期データから20に近いところのセルの順番を計算し、その値だけoffset関数を使ってシフトした表を作ると右の表のように目標値に揃ったデータが得られます。近い値を見つけるには目標値との差を求めその差が最小(min)となるセル番地の上からの順位(match/indirect/address)を求めます。気をつけるのはカーブには左右に目標値に近い値があるので最初の目標値から最大値(max)までの範囲で最小値になるセルを見つけることです。
この作業をする目標値の差データの表の各セルの計算式を以下に示します。先に説明したようにB3のセルで最大値のセルの行値をMax関数で計算し、その値の番地をMatch関数で表示しています。最後の”+8″は8行目まで計算行があるための補正数です。
次にB3の行番号から最大値のセル番地をAddress関数で作成します。B4はには検索範囲つまり、差データの最初の行のセル番地を求めます。Addressの最初のパラメータが”9″になっているのは9行目からデータが始まっているためです。
次にB4とB5から検索範囲をB6に作ります。
B8に最小値のセル行をMatch関数で求めています。このMatch関数の中で利用してるIndirect関数はセル範囲などをセルの文字データから作るもので、ここではMin関数で検索する範囲をB6を指定して実行しています。(Indrectを利用しなくても直接セル範囲を作って入れることができる関数があるのかもしれません)
7行目には各カーブの最小値のセル行値が計算されていますが、この中の最小値に合わせることになります。H7に最小値がけいさんされています。これを使ってB7にH7との差を計算しています。これが実際のシフト量になります。
書き込みのない表をついでに示しておきます。参考にしてください。差の絶対値はAbs関数を用いています。
最後に計算で求めた差を使ってデータをずらしていきます。これにはOffset関数を用います。初期データを上の黄色く塗った値だけずらせばいいのです。
シフト量が計算で求めた値です。この値だけデータをずらして参照していきます。
以上です。少し込み入っていますが、主に4つの関数を使って実現しています。表計算は関数を覚えると多くの労力を省くことができますね。