• ベストアンサー

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で可能なのでしょうか? ご検討を宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.1

こんにちは。 定数(数値)を指定してそのAreaの数を調べてみてはどうでしょうか? With ActiveSheet   MsgBox .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row) _         .SpecialCells(xlCellTypeConstants, 1).Areas.Count End With

haru2026
質問者

お礼

OtenkiAme様 おはようございます。 早速のご回答、誠にありがとうございます。 『Areas.Count』とするのですね。先ほど確認し、ばっちり出来ました! 勉強になります。 今後とも宜しくお願いいたします!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

VBAよりもロジックをまず考えるべきでは。 数学の接線のように、上昇から下降に転じる箇所を見つけて数えたら。 このロジックでは、例外があってうまく行かないのかな。 前データより大きいーー>大きいデータ保存 これを繰り返す。そして 前データより小ーー>反転したーー>カウントを+1 ーーー 空白出現でカウント+1すればよいなら簡単で安心(例外が無い)だが。

haru2026
質問者

お礼

imogasi様 こんにちは。ご連絡どうもありがとうございます。 実は、IFステートメントを使用して、ご指摘のように 前データ>次データを比較して抜き取るマクロも作ってみたのですが、 御察しの通り、例外がちょこちょこ出てきて、都合が悪かったのです。 考え方、ご参考にさせていただきます。 imogasi様のご意見、いつも参考に拝見させて頂いております。 今後とも宜しくお願いいたします。

  • harapeco7
  • ベストアンサー率54% (33/61)
回答No.2

>各区間空白行が必ず、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

haru2026
質問者

お礼

harapeco7様 おはようございます。 先ほど、ステップインしながら、確認させていただきました。 このような記述方法もあるのですね。ばっちり動作いたしました! すぐすぐは理解できないのですが、、、これからじっくりと記述の内容を理解し今後のステップアップに役立たせて頂きます。 どうもありがとうございました。 今後ともよろしくお願いいたします!

関連するQ&A