• ベストアンサー

vbaでCountIf関数を使いたい(エクセル)

A1セルにa-a-aがはいっています。 この場合aは3つですよね。 これをvbaで取得するコードを作っているのですがうまくできません。 Sub test() Dim myStr As String myStr = "a" MsgBox WorksheetFunction.CountIf(Cells(1, 1), "*" & myStr & "*") End Sub これをすると、なぜか1が返ってきます。 Aは3つあるのになぜ1が返るのでしょうか? A1にaaaaaを入れて実行しても1が返ります。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! COUNTIF関数の使い方はNo.1さんが回答してくださっているので・・・ Sub Sample1() Dim k As Long, cnt As Long, str As String For k = 1 To Len(Range("A1")) str = Mid(Range("A1"), k, 1) If str = "a" Then cnt = cnt + 1 End If Next k MsgBox cnt End Sub こんなんではどうでしょうか?m(_ _)m

NSUHPIKBMGE
質問者

お礼

このような使い方を求めてました! このコード、使わせていただきます。ありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

ふつーのマクロがよかったというのでしたら sub macro1() msgbox len(range("A1")) - len(application.substitute(range("A1"), "a", "")) end sub とでもして使ってください。 >vbaで関数を作るべきなのですか 結果をどのように返したいのか(どこのセルに3個と記入したいとか、単に答えが3個とその場で上がってくればそれで満足なのかとか)ご相談に何も書かれてなかったのと、実際にはa-a-aがA1じゃなくどこに記入されてるのかとか、数えたいのはaの文字だとかに合わせてイチイチマクロを書き換えて使うのは全くナンセンスなので、自由度をもたせられる(あなたが実際の状況に即して使いやすい)関数の格好にしただけです。 マクロ自体は上述のようにごく簡単な内容なので、その気があるなら応用は容易だという判断もあります。

NSUHPIKBMGE
質問者

お礼

ありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

COUNTIF関数は条件に合致する「セルの個数を数える」関数だからですね。 作成例: function countchr(a,b) countchr = len(a) - len(application.substitute(a, b, "")) end function 使い方: A1セルにa-a-aを記入 テキトーなセルに =countchr(A1,"a") を記入。

NSUHPIKBMGE
質問者

お礼

vbaで関数を作るべきなのですか。 VBAの関数は難しいので勉強してみます。

関連するQ&A