プロが教える店舗&オフィスのセキュリティ対策術

ExcelVBAで、1桁目に”*”が入っているレコード件数をカウントするVBAを作成しました。
正常に機能すれば「受発注品は2件です」というメッセージボックスが表示される筈なのですが、「1桁目に”*”が在るか否か?」の判定が正常に機能していないようで、「受発注品は0件です」というメッセージボックスが表示されてしまいます。
以下が、作成したVBAです。

-----------------------------------------------------------------------
Sub 受発注品カウント()

Dim i As Integer
Dim c As Integer

i = 1
c = 0

Do Until Cells(i, 1).Value = ""
If Cells(i, 1).Value = "~**" Then
c = c + 1
End If
i = i + 1
Loop

MsgBox "受発注品は " & c & " 件です", vbInformation

End Sub
-----------------------------------------------------------------------

「1桁目に”*”が在るか否か?」の判定方法をご存知の方がいらしたら、是非ご教示下さい。
宜しくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

当方、ExcelVBA初心者の為、Left関数もLike関数も知りませんでした。
また、ExcelVBAの規則に則ったサンプルもご提示していただき、初心者の私には大変勉強になりました。
お二人のご回答のお陰で、無事に解決しました。
ご回答いただき、誠に有難うございました。

お礼日時:2010/05/29 12:50

変更前:


If Cells(i, 1).Value = "~**" Then

変更後:
If Left(Cells(i, 1).Value, 1) = "*" Then

「=」の演算にワイルドカードは効きませんので,"*"というただの文字として扱いを検討してください。
    • good
    • 0
この回答へのお礼

この例はまさしく、「1桁目に*が在るか否か?」の比較ですね。
求めていたものは、まさにこれです。
ExcelVBAだと、そういった事も容易に可能なのですね。
大変、勉強になりました。
ご回答いただき、誠に有難うございました。

お礼日時:2010/05/29 12:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!