- ベストアンサー
Excel VBAで1桁目に*が入っているレコードの件数をカウントする方法を教えてください
- Excel VBAで1桁目に*が入っているレコードの件数をカウントする方法をご教示ください。
- 作成したVBAでは正常に機能せず、件数が0件と表示されてしまいます。
- 1桁目に*が在るか否かの判定方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「1桁目に”*”が在るか否か?」と言葉通りなら、もちろん、Left で比較すればよいのですが、 "~**" という検索式をVBAで実現するには、Like演算子で、"[*]*" となりますが、厳密に考えると、*の意味は、0個の任意の文字の検出し、かつ「*」がひとつしかないものを除外しようとするなら、"[*]?*"という検索式が良いのではないか、と思います。基本的に、「=」 は、数字の比較です。便宜的に「=」が文字比較にも使われますが、厳密にはLike演算子やStrComp関数などを利用したほうが良いです。 '//サンプル Sub 受発注品カウントR() Dim i As Long 'Long型のほうが良い Dim cnt As Long Application.ScreenUpdating = False 'セルをループする時は必要です。 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1).Value Like "[*]?*" Then cnt = cnt + 1 End If Next Application.ScreenUpdating = True MsgBox "受発注品は " & cnt & " 件です", vbInformation End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
変更前: If Cells(i, 1).Value = "~**" Then 変更後: If Left(Cells(i, 1).Value, 1) = "*" Then 「=」の演算にワイルドカードは効きませんので,"*"というただの文字として扱いを検討してください。
お礼
この例はまさしく、「1桁目に*が在るか否か?」の比較ですね。 求めていたものは、まさにこれです。 ExcelVBAだと、そういった事も容易に可能なのですね。 大変、勉強になりました。 ご回答いただき、誠に有難うございました。
お礼
当方、ExcelVBA初心者の為、Left関数もLike関数も知りませんでした。 また、ExcelVBAの規則に則ったサンプルもご提示していただき、初心者の私には大変勉強になりました。 お二人のご回答のお陰で、無事に解決しました。 ご回答いただき、誠に有難うございました。