- ベストアンサー
VBAで数値グループをCOUNTする方法
お世話になっております。 VBAを勉強中の初心者です。 過去ログを検索したのですが、どうしても見つからなかったため、質問させていただきました。 現在、下記のようなexcelデータをVBAで処理しようと考えているのですが、方法が分からなく、困っています。 処理したいデータ例は、下記の通りです。 A列 1行目 空白 2行目 3 3行目 4 4行目 5 5行目 4 6行目 3 7行目 空白 8行目 空白 9行目 空白 10行目 7 11行目 10 12行目 12 13行目 8 14行目 6 15行目 空白 ・ ・ 上記のようなデータが、A列のみ約1000行程度、高さが異なる山の数が、50程度あります。 (A列を折れ線グラフで見たときに、データは必ず山状になるので、山の数と表現しております。) 今回、処理したいのは、上記のような山の数、2行目~6行目を一山、10行目~14行目を二山として、合計で何山あるのかをCOUNTしたいと考えています。 この山の数を次のVBA処理で活用したい為、COUNTしたいのですが、山(群)の、COUNT方法が分かりません。 このとき、空白行の数、数値データ入力行の数は区々ですが、各区間空白行が必ず、1~10行迄入力されている状況です。 とても分かりにくい質問で大変恐縮ですが、上記のような山を1群と見たときの、山のCOUNTは、VBAで可能なのでしょうか? ご検討を宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 定数(数値)を指定してそのAreaの数を調べてみてはどうでしょうか? With ActiveSheet MsgBox .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row) _ .SpecialCells(xlCellTypeConstants, 1).Areas.Count End With
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
VBAよりもロジックをまず考えるべきでは。 数学の接線のように、上昇から下降に転じる箇所を見つけて数えたら。 このロジックでは、例外があってうまく行かないのかな。 前データより大きいーー>大きいデータ保存 これを繰り返す。そして 前データより小ーー>反転したーー>カウントを+1 ーーー 空白出現でカウント+1すればよいなら簡単で安心(例外が無い)だが。
お礼
imogasi様 こんにちは。ご連絡どうもありがとうございます。 実は、IFステートメントを使用して、ご指摘のように 前データ>次データを比較して抜き取るマクロも作ってみたのですが、 御察しの通り、例外がちょこちょこ出てきて、都合が悪かったのです。 考え方、ご参考にさせていただきます。 imogasi様のご意見、いつも参考に拝見させて頂いております。 今後とも宜しくお願いいたします。
- harapeco7
- ベストアンサー率54% (33/61)
>各区間空白行が必ず、1~10行迄入力されている状況です。 空白セルをキーとし山の数をカウントしてみました。 ※ベストな記述では御座いません。 ※VBA勉強中との事ですので、足掛かりとして利用してください。 Sub count() a = Cells(Rows.Count, 1).End(xlUp).Row Do b = b + 1 If Cells(b, 1) <> "" Then b = b + 1 Do If Cells(b, 1) = "" Then c = c + 1 Exit Do Else b = b + 1 End If Loop End If If a <= b Then MsgBox "山の数 " & c Exit Do End If Loop End Sub
お礼
harapeco7様 おはようございます。 先ほど、ステップインしながら、確認させていただきました。 このような記述方法もあるのですね。ばっちり動作いたしました! すぐすぐは理解できないのですが、、、これからじっくりと記述の内容を理解し今後のステップアップに役立たせて頂きます。 どうもありがとうございました。 今後ともよろしくお願いいたします!
お礼
OtenkiAme様 おはようございます。 早速のご回答、誠にありがとうございます。 『Areas.Count』とするのですね。先ほど確認し、ばっちり出来ました! 勉強になります。 今後とも宜しくお願いいたします!