どうしても出来ないので教えていただきたいのですが
エクセルでA列に延々と数値データが入っています
グラフにするとノイズのような小さな山が続いて次に大きな山が二つでき
またノイズのような小さな山が続く
ってこんな感じの数値データなのですが
このデータから一つ目の大きな山の最大値を抽出したいんです
一つ目の山の方が大きいとは限らないので
MAX関数は使えません
山はデータ中のどこにできるかわからないので
何行から何行までって限定することもできません
わかり辛い表現で申し訳ないのですが
よろしくお願いします
No.1
- 回答日時:
恐らくVBAでないと難しいと思われます。
(関数でもやろうと思えば出来なくもない気はしますが・・・)
問題は、大きな山と言っていますが、何をもって大きな山とするかということです。
ある数値を基準にその数値を超えたら大きな山とするのか、隣合う数値を比較し、数値差がある値以上であれば大きな山とするかです。
そのポイントさえ決めてしまえば、後はそんなに難しくないと思います。
この回答への補足
わかりずらい表現ですいません
実は機械を動作させたときの電流を計測しているのですが
電源オンから動作を終了するまでの電流で最初は全くのノイズが出ている状態からスタートして動作電流が流れてまたノイズに戻るって感じの波形になります
動作電流とノイズははっきりと区別できるくらいの違いがあります山はふたこぶらくだのこぶみたいな感じで出るので
その一つ目の山のピーク値がとりたいんです
質問しながら、忘れた頃の締め切りになって
本当にすいませんでした
結局、うまくいかず未だグラフより、数値を読みとっております
どうもありがとうございました
No.2
- 回答日時:
構想だけですが。
まずノイズをカットするために、使えないとおっしゃるMAXを算出して、その2~5分の一(適切な値は自分で決めて下さい)以下のデータは無視します。
例えばB列が空きなら、B1に
=MAX(A1:A65536)/3
[仮に3/1を適用する場合]
B2に
=IF(A2<B$1,0,A2)
それを下方向にオートフィルします。
その結果残ったデータで山というのはノイズと見なされなかったデータが連続している部分になるかと思います。
C3に
=IF(B3=0,0,C2+1)
それを下方向にオートフィルすると連続している部分がよくわかるので後はVBAでなんとかなりませんか?
この回答への補足
回答ありがとうございます
やってみたんですけど、確かにノイズはカットできますが、やはり最初の山のピーク値をどうやって抽出すればいいのかが、わかりません
わかりづらい表現で申し訳ないのですが
よろしくおねがいします
No.3
- 回答日時:
こんにちは。
元のデータは何ですか?
株価の推移の曲線のそれぞれを山を出すものに似ています。その上に点(散布図のマーカー)を乗せます。
VBAでは、特殊なアルゴリズムを使って出しますが、そういうコードは、逆にむつかしくなるような気がします。株価とは限りませんが、以下のようなサンプルを作ってみました。
(行数は省略:1行目から)
サンプル
A B C
1 高値 高値更新 区間高値
115.8
115.9
116.1
115.7
115.9
116.9 116.9 116.9
116.9
118.3 118.3
119.4 119.4
122.3 122.3
125.0 125.0 125.0
123.4
125.7 125.7
126.3 126.3 126.3
123.7
123.9
124.0
121.9
120.4
116.9
116.9
120.0
123.0 123.0 123.0
118.7
B7 からの数式 (区間は5行) = 5日間
=IF(A7>MAX(A2:A6),A7,"")
C2 からの数式
=IF(AND(B2>0,B3=""),B2,"")
これで、それぞれの山が取れます。
区間の幅は、ご自身でお決めください。
なお、散布図で、マーカーを取る時は、同じ項目軸を取らないと、まったく違う場所に行ってしまいます。
この回答への補足
回答ありがとうございます
データは電流値でグラフとしてはふたこぶらくだのこぶのような形になります
これの一つ目の山のピーク値を出したいんです
No.4
- 回答日時:
こんばんは。
Wendy02です。例えば、私の#3の例で言えば、
時系列に対して、
1つ目
=INDEX(B1:C25,SMALL(INDEX((C2:C26<>"")*ROW(C2:C26),,),COUNTIF(C2:C26,"")+1),1)
2つ目
=INDEX(B1:C25,SMALL(INDEX((C2:C26<>"")*ROW(C2:C26),,),COUNTIF(C2:C26,"")+2),1)
となります。ただし、あくまでも、区間の取り方によって、山の数が変わります。
でも、確か、きれいな山を描いているなら、例えば、ヒストグラムのふたこぶの山とかなら、別の方法があったような気がします。
質問しながら、忘れた頃の締め切りになって
本当にすいませんでした
結局、うまくいかず未だグラフより、数値を読みとっております
どうもありがとうございました
No.5ベストアンサー
- 回答日時:
Sub Macro1()
'
' Macro1 Macro
' マクロ記録日 : 2006/9/3 ユーザー名 :
'
'
NoizeCut = 2
lastl = Range("A65536").End(xlUp).Row
Range("B1").FormulaR1C1 = "=MAX(C[-1])/" & NoizeCut
Range("B2:B" & lastl).FormulaR1C1 = "= IF(RC[-1]<R1C,0,RC[-1])"
Range("C2:C" & lastl).FormulaR1C1 = "=IF(RC[-1]=0,0,R[-1]C+1)"
yama1num = WorksheetFunction.Max(Range("C2:C" & lastl))
yama1row = WorksheetFunction.Match(yama1num, Range("C2:C" & lastl), 0) - yama1num + 2
Debug.Print yama1num, yama1row
Range("C" & yama1row & ":C" & yama1row + yama1num - 1).ClearContents
yama2num = WorksheetFunction.Max(Range("C2:C" & lastl))
yama2row = WorksheetFunction.Match(yama2num, Range("C2:C" & lastl), 0) - yama2num + 2
Debug.Print yama2num, yama2row
If yama2row < yama1row Then
yama1row = yama2row
yama1num = yama2num
End If
MsgBox "最初の山の最大値は" & WorksheetFunction.Max(Range("A" & yama1row & ":A" & yama1row + yama1num - 1))
End Sub
でっちあげです。NoizeCutは調整願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセル関数のスペシャリストの方、教えてください。 写真のように A列にはデータ C列にはデータの中 7 2022/04/09 00:15
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- ソフトウェア エクセル_データ処理_変化点検出について 1 2022/09/20 18:25
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- Excel(エクセル) エクセルのグラフに上下限値の横棒を表示させたい 5 2022/12/12 11:09
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセルで極大値を拾うには
Excel(エクセル)
-
エクセルでノイズ値を除去する方法。
数学
-
曲線グラフからピーク値を求める方法
Visual Basic(VBA)
-
-
4
エクセルで、指定の値よりも大きい数字を最初に越えたときの列番号を返すには?
Excel(エクセル)
-
5
エクセルの最小値抽出方法について
Excel(エクセル)
-
6
vbaで極大値を抽出する方法
Visual Basic(VBA)
-
7
手軽に曲線の平滑化をしたい
Excel(エクセル)
-
8
エクセルでハイパスフィルタをかけたいのですがどのようにすればよいですか?
工学
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報