質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

4回答

12394閲覧

Excelグラフでの山の数え方について(VBA)

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1グッド

0クリップ

投稿2016/01/27 13:15

###前提・実現したいこと
ExcelのA列で、a1セルから数百~数千個、データが並んでいます。
小数点を含む数字で、だいたい-20から+30までの間の値です。
折れ線グラフを作成すると山のようなものが何個か確認できます。
これをマクロで数えたいのです。どうすれば良いですか?

また、山の先端はギザギザになっています。
例えば、1,5,10,15,20,18,22,15,10,5,1と
いうように並んでいたとすると、20と22の部分で
『山が2つある』と数えることは出来そうなのですが
私はこれを1つの山として数えたいのです。

伝わりますでしょうか。
拙い文章ですが、回答よろしくお願いします。

###ソースコード

Sub test() Worksheets("Sheet1").Select Dim flag As Integer Dim p_row_value As Integer Dim n_row_value As Integer Dim count As Long p_row_value = 0 n_row_value = 0 falg = 0 MsgBox Cells(Rows.Count, 1).End(xlUp).Row Dim i As Long For Row = 1 To Cells(Rows.Count, 1).End(xlUp).Row p_row_value = Cells(Row - 1, 1).Value n_row_value = Cells(Row, 1).Value If n_row_value > p_row_value And flag = 0 Then flag = 1 Else flag = 0 count = count + 1 End If If n_row_value < p_row_value And flag = 0 Then flag = 1 Else flag = 0 count = count + 1 End If Next MsgBox (count) End Sub

###補足情報(言語/FW/ツール等のバージョンなど)

PCはwindows7、Excelは2010です。

miyabi-sun👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

二区間移動平均
二区間移動平均とってみました。どうでしょ

投稿2016/01/27 13:31

matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし、VBAではなくてもよいのであれば、B2に「=IF(A1-A2<0,B1+1,B1)」という計算式を入れてA列のデータ分B列にコピーしてB列の最終行の値が山の数というやり方もできます。
C1に「=MAX(B:B)」という計算式を入れて、C1をRangeで読み取ることもできます。

投稿2016/02/02 04:40

yosatonet

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

山の定義をはっきりさせてから、考えるとよいと思います

1)移動平均を計算してなだらかにしてからピーク判定する
2)ピーク値に対して一定の範囲から逸脱したかで判定する
3)ピーク値からの変化方向の連続性で判定する

全ての値が同じだったら、全て前回<今回だったら、全て前回>今回だったら、などのイリーガルケースも考慮が必要でしょうかね

投稿2016/01/28 03:12

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

3点を見れば判断できるんではないかと。
例えば、A1・A2・A3を配列に入れて、A1A2は上昇しA2A3に下降した場合は山と判断できます。
次にA234、次にA345、次にA456...

もっとスマートなやり方がありそうな感じはしますが、アルゴリズム得意な方の回答に期待したいです笑

投稿2016/01/27 13:43

rossi46hiro

総合スコア992

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問