- 締切済み
エクセルの最小値抽出方法について
エクセルで最小値を抽出する方法 みなさん教えてください。 今エクセルで下図のような正弦波のグラフ図中の赤矢印部(ピーク値) で一番小さくなる最小値を抽出したいと思っています。 しかし、方法がわかりません。 MIN関数を使用すると、一番小さい0が出てきます。 データの境目(~以上)と指定してオートフィルタでデータを抽出しようとしても、 データのプロット数が多すぎて境目をみつけるだけでも苦労し、うまくいきませんでした。 何か簡単に抽出できる良い方法はないでしょうか。 みなさんお力をかしてください。よろしくお願いします。 <波形元データ> ※オシロスコープで測定したデータ(CSVファイル:データ数2000行弱) 時間 電圧 0 0.03626667 0.0002 0.037975 0.0004 0.035025 0.0006 0.03514167 0.0008 0.03781667 0.001 0.03830833 0.0012 0.03346667 0.0014 0.03460833 0.0016 0.03616667 0.0018 0.0342 0.002 0.03035 ・ ・ ・ ・ ・ ・
- みんなの回答 (11)
- 専門家の回答
みんなの回答
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No9,10です。 AおよびB列にお示しのデータがるのですから、C1セルに示した式を入力して下方にオートフィルドラッグで、最小値の式は D1セルに =MIN(c:C) となりますね。大変失礼をいたしました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
No9です。より精度を高めるにはB1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(ISERROR(OFFSET(B1,-4,0)),"",IF(AND(AND(OFFSET(B1,-1,0)<B1,B1>OFFSET(B1,1,0)),AND(OFFSET(B1,-2,0)<B1,B1>OFFSET(B1,2,0)),AND(OFFSET(B1,-3,0)<B1,B1>OFFSET(B1,3,0)),AND(OFFSET(B1,-4,0)<B1,B1>OFFSET(B1,4,0))),B1,"")) C1セルには =MIN(B:B)
- KURUMITO
- ベストアンサー率42% (1835/4283)
A1セルから下方にデータがあるとして、作業列としてB1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ISERROR(OFFSET(B1,-4,0)),"",IF(AND(OFFSET(B1,-4,0)<B1,B1>OFFSET(B1,4,0)),B1,"")) これでピークごとに1,2個のデータが表示されますので、C1セルに =MIN(B:B) を入力すれば最小値が表示されますね。
- keithin
- ベストアンサー率66% (5278/7941)
ちなみに移動平均については判りますね? ご相談で掲示されたサンプルのデータで,仮に4点で移動平均を取ってみると添付図のようになり,生のピークが0.03830833を記録しているのに対して0.036531251という計算値をこの山のピーク値だとします。 それでご質問の山の切り方ですがごくごく簡易な方法としては,やはりご質問に掲示されているようなグラフが得られているとすると,0.3の時間間隔の中に10山見えていますから一周期が目安0.03,データのサンプリングタイムが0.002なので,おおざっぱに言ってしまえば0.03÷0.002=150データごとに一山あると見てしまえそうです。 C列に移動平均を計算してあるとすると 開始を51行目からにしてみると =MAX(C51:C200) で一山目のピーク値 =MAX(C201:C350) で二山目のピーク値 : が拾えると期待できます。 また,もっと荒い(10点とかの)移動平均でグラフを平滑にしてしまい,それでゼロを切るそれぞれの時刻を拾ってしまうのでも,多分今考えられた方法で上手く出来ると思います。
- imogasi
- ベストアンサー率27% (4737/17069)
あまり自信はないが微分係数が正ー0-負に変化するところが、局地的な極大として考えることから、 第2行目からデータがあるとして B2セルに=IF(AND(A1<A2,A2>A3),A2,"")ト入れて下方向に式を複写 例データ A列 B列 1 2 3 4 5 6 6 5 3 2 3 4 5 6 7 8 9 9 このB列でMaxをとる。
- mshr1962
- ベストアンサー率39% (7417/18945)
データがB2:B20000として =SUMPRODUCT(MIN(10000^((B2:B20000<=B1:B19999)+(B2:B20000<B3:B20001))*(B2:B20000+1))-1)
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! 前回の投稿は無視してください。 正弦波なるものを理解していませんでした。 失礼しました。m(__)m
- keithin
- ベストアンサー率66% (5278/7941)
基本はピーク(極値)の検出,つまり「上りから下りに変わる点」を拾いたいワケですが,実際のデータではそう簡単には行きません。 ○比較的簡単な方法 データが大まかにゼロを切る点から次のゼロを切る点が「一つの山(もしくは谷)」ですから,その区間ごとに最大値(若しくは最小値)を拾ってしまいます。 山を含んでいれば良いので,区切りが多少ずれていても問題ありません。 一つ一つの山の高さを拾い出せば,あとはその中から一番小さいの(MIN)を拾うだけです。 ○ノイズの問題 生データを直接採取していた場合の主な問題の一つとして,しばしば主たる周波数の上に高周波のノイズが乗っています。つまり単純に「増加から減少に転じた」(前のデータと次のデータを単純に引き算して増減を判断する)だけで検出しようとすると,細かいノイズのイチイチのピークを拾ってしまいます。また前述の方法で生の最大値を拾ってしまうと,ノイズ分だけ上乗せした値を拾う可能性が高くなります。 この問題を解決するため,測定系にローパスフィルタをかませて適切なレンジでノイズ切りをしてあれば,そのままデータを使えます。 データ(つまりグラフ)をよく見てノイズが乗っているような時は,簡易にはノイズ周波数をつぶせそうな個数で「移動平均」をとってもしまう場合もあります。
- mt2008
- ベストアンサー率52% (885/1701)
- minosennin
- ベストアンサー率71% (1366/1910)
こんな感じではどうでしょうか。外れていたら無視してください。 3列目を作業列として、3列目に各ピークの値を取り出す方法です。 3列目2行目に =IF(AND(B2>B1,B2>B3),B2,"") 下へ必要数ドラッグ これでC列に各ピークの値が表示される 後はMIN関数で。
- 1
- 2
補足
keithinさん ご回答ありがとうございます。とてもうれしいです。 上記「比較的簡単な方法」の一つひとつの山を拾う方法ですが、具体的に エクセル関数など方法を教えて頂けませんでしょうか。 自分でもいつの山(測定電圧値が0付近になるところ)を探す方法を考えて いるのですが、うまくいきません。 申し訳ありません。 よろしくお願いいたします。