• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 文字列で検索し結果をカウントする)

VBA文字列検索と結果のカウント方法

このQ&Aのポイント
  • VBAを使って文字列で検索し、結果をカウントする方法を教えてください。
  • 子供がりんごを選び、かつ春または夏の季節を選んだ人の数を正確にカウントする方法を教えてください。
  • 質問者はVBA初心者であり、応用が加わると手詰まりになってしまっています。どなたか教えていただけると助かります。

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

  • ベストアンサー
  • tgook
  • ベストアンサー率48% (96/198)
回答No.4

こんばんわ。 2日前にサンプルで回答した者です。 2日前の回答の際、サンプルダウンロード用に設けたページに 新しく VBA文字列で検索し結果をカウントする というダウンロードリンクを設けました。 Book3.xls というサンプルがダウンロードできます。 今回の Book3.xls のソースコードにはコメントを入れました。 2日前のソースコードも、明日のこの時間まで、コメントを入れておきます。 コメント無しではちょっと難しかったかもしれませんね? ご質問の内容を拝見しまして、感じたのは、処理をするために必要な変数を準備することはできてはいますが、「入れ子(ネスト)」という手法を理解できていないのかもしれないのが原因かな?と思いました。 また、どの位置でカウント変数にカウント処理をさせるかという判断をする為の経験が足りないのかもしれません。 経験はこれから積めば良いです。 ちなみに「入れ子(ネスト)」とは、1つのIf文の中にさらにIf文を入れ、その中にもさらにIf文を入れたりするという、幾つか確認したいことがある時に使えるコーディングの基本手法です。 Ifのみでなく、While文でも同様の事ができます。 「入れ子(ネスト)」に関しては以下URLに簡単に解説が載っています。 http://www9.plala.or.jp/sgwr-t/c/sec06-1.html

nanacolobiyaoki
質問者

お礼

いろいろとご指導、本当にありがとうございます! また遅いお時間にも関わらずご回答して頂き本当に感謝しています。 ソースもBook1、Book3、コメントの内容を見ながらソースを確認し 何の処理でどこでカウントされているのかまたif文の使い方も勉強させて頂きました。 今は3つ(A列、B列、C列)の条件しかないのですが、 仮にD列、E列まであった場合を想定し、 A列が「子供」でB列が「りんご」C列が「春or夏」D列が「●●」、 E列が「△△ or ■■」などで試してみたいと思います。 自分で作っていかなくては!!ですよね☆ またブレークポイントの使い方も教えて頂きありがとうございました。 表示(V) → ローカルウィンドウ(S) で ローカルウィンドウ を開き 変数に何の値が入っているのか確認するのですね! 先ほど早速試させて頂きました。 少しずつですがVBAが楽しくなってきました。 本当にありがとうございました!

その他の回答 (4)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

加算すべきタイミングが違うとなると、全体見直した方がいい。 ネスト3条件あるので8パターン以上。さらに春夏のあいまい条件、それぞれできちんと分岐しているか。 SELECT CASE文もある。 わざとデータを変えてその各パターン通過するよう確認、それから。 後は質問者の自己解決であって欲しい。解く力をつける。

nanacolobiyaoki
質問者

お礼

そうですね、 条件分岐の文はいろいろありますよね。 1つづつ調べて、どんな時にどういった構文を使ったらBESTなのか、 Debug.Print で表の確認をしながら作っていきたいと思います。 >後は質問者の自己解決であって欲しい。解く力をつける。 そうですね、でないと成長ないですよね。 頑張ってみます、ありがとうございました!!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

If Worksheets("Sheet1").Range("C" & Counter).Value = "*春* or *夏*" Then あいまい検索の意味でやっていると思いますが、 単に"*春* or *夏*"でカウントされているのではありませんか?。 C1に"春"、で+1されているというのも間違いでは?。 Debug.Print Worksheets("Sheet1").Range("C" & Counter).Value この文をIF文の前に入れてみましたか?。 If セル=春 Then  カウント+1 else  If セル=夏 Then   カウント+1  else  endif endif は作りましたか?。 instr関数は知っていますか?。 余裕あれば、この関数のやり方を確認し、変更し試してみてください。 「できるかもしれない~」でやって、いざうまくいかないというのは、 よくある話です。できるのが偶然と思う方がいい。 質問になってしまうのでしょうし、時間ロスも多いです。 確実に確認できたところから積み上げると結果は早いです。

nanacolobiyaoki
質問者

お礼

>Debug.Print Worksheets("Sheet1").Range("C" & Counter).Value [Debug.Print ]の存在をしらず先ほど調べてみしました。 イミディエイトウィンドウに表示して確認していくのですね。 ありがとうございます。 >「できるかもしれない~」でやって、いざうまくいかないというのは、 >よくある話です。できるのが偶然と思う方がいい。 そうですね、まずは調べて「動くかもしれないと」書いてみる、 エラーの内容を見ながら修正し正解が出てくるかもしれないですよね。 >確実に確認できたところから積み上げると結果は早いです。 ありがとうございます。学習して積み上げる事でどんどん応用が きくようになるのですよね。 ありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.2

春夏でなく春だけでやってみること 確認の間は、偽のときのカウントもとること

nanacolobiyaoki
質問者

お礼

早速のご回答ありがとうございます。 もちろん、「春まはた夏」ではなく「春」つまり完全一致の 「1.春」や「2.夏」、「秋」などで試し、正確にカウントされることも確認済です。 >確認の間は、偽のときのカウントもとること そうですね、試してみます。 ありがとうございました!

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

前回の解決のうれしさの余り?、結果、自身は何も進歩してない?。それでいいのか?。 『=0』ということは、初期値のままかカウントアップしてもカウントダウンあり、ここでは前者しかない。 つまりは春夏の判定で真になることが1度もない。春夏はあるので式自体がおかしい。 式の見直し。 1行ずつ処理させる、途中の変数値を検証する、デバッグを学ぶ。 それから。 人のコードを見るのは早い。 また4番目ができたり、機能変わったら悩むのか?。 同じ繰り返しにならないこと。

関連するQ&A