Excel VBAで1桁目に*が入っているレコードの件数をカウントする方法を教えてください

このQ&Aのポイント
  • Excel VBAで1桁目に*が入っているレコードの件数をカウントする方法をご教示ください。
  • 作成したVBAでは正常に機能せず、件数が0件と表示されてしまいます。
  • 1桁目に*が在るか否かの判定方法を教えてください。
回答を見る
  • ベストアンサー

ExcelVBAで、1桁目に”*”が入っているレコード件数をカウントす

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

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

bab2461
質問者

お礼

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

その他の回答 (1)

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

変更前: If Cells(i, 1).Value = "~**" Then 変更後: If Left(Cells(i, 1).Value, 1) = "*" Then 「=」の演算にワイルドカードは効きませんので,"*"というただの文字として扱いを検討してください。

bab2461
質問者

お礼

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

関連するQ&A

  • マクロで塗りつぶしセルのカウント

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • ExcelVBAでのユーザーフォームについて

    ご回答ありがとうございました。 これといった資料がなく(探し方が悪いのかもしれませんが)、少ない経験値で複雑なというか面倒な処理のマクロ(VBA)を組まされることになり、困っているところです。当初の話だと「勉強しながらでよい」ということだったのですが、いろいろと仕事が次々と舞い込んできて、そんな余裕もなくせっぱ詰まり少ない知識で必死にやっています。 先にご回答いただいた内容で是非アドバイスをいただきたいと思い、新たに質問させていただきました。 ユーザーフォームでマルチページを作っています。そこでもコンボボックスを使うのですがそこの記述方法をアドバイス下さい。やっぱり記述場所がおかしいのか、クリックするとリストの内容がコンボボックスをクリックした分だけ繰り返してしまうことがあります。 ////////////////////////////////////////////////////// Private Sub UserForm_Initialize() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// Private Sub ComboBox1_DropButtonClick() Dim sh As Worksheet Set sh = Worksheets("対象年") Dim i As Integer Dim lastRow As Integer lastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem sh.Cells(i, 1).Value End If Next i End With End Sub ////////////////////////////////////////////////////// とまぁ、結局コードは同じなのですが。 それと、結果をラベルに出させる場合には回答で記述いただいた ////////////////////////////////////////////////////// Private Sub ComboBox1_Change()   Dim vTgYear As Variant   vTgYear = ComboBox1.Value   Label1.Caption = vTgYear - 1 & "~" & vTgYear + 1 & "年" End Sub ////////////////////////////////////////////////////// で、よいでしょうか? よろしくお願いいたします。

  • エクセルで回数をカウントするマクロ

    いつもありがとうございます。 ボタンを押すごとに回数をカウントするマクロをつくりたいのです。ためしに、 Sub testcount() Dim a As Integer a = Cells(1, 1).Value a = a + 1 Cells(1, 1) = a MsgBox a End Sub とやってみて何とかできましたが、できればワークシートに数値を入れずに出来る方法はないのでしょうか? 贅沢いってすみません。

  • ExcelVBAでUserFormのカウント

    ユーザーフォームはどれも開いていない状態です。 カウントしようと Sub test01() Dim i As Long Dim uf As UserForm For Each uf In UserForms i = i + 1 Next MsgBox i End Sub としてみましたが0になってしまいます。 どう書けばいいのでしょうか?

  • 上のセルのコピーのマクロについて

    下記コードで、B列(数値)の空白のセルにその上の値をコピーしているんですが、C列(日付)で行ったところ、できませんでした。 Integerが違うと思って変えたんですが、ほかにも関連して変えるところがありますか?? 宜しくお願いいたします。 Sub 上のセルコピー() Dim i As Integer For i = 1 To Range("B" & Rows.Count).End(xlUp).Row If Cells(i, 2).Value = "" Then Cells(i, 2).Value = Cells(i - 1, 2).Value End If Next i End Sub

  • VBAで関数を使うには?

    こんな感じだったとします。   A1      B1 2002/9/2 2002/9/3 2002/9/4 2002/9/5   : このB1にそれぞれの曜日を表示させるVBAを以下のようにしました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = Weekday(Cells(i, 2), "aaa") Next End Sub もちろんエラーでした。 (メッセージは「型が一致しません」です。) そこで以下のように変更しました。 Sub youbi() Dim i As Integer For i = 3 To 10 Cells(i, 3).Value = "=text(Weekday(b3), ""aaa"")" Next End Sub するときちんと曜日が表示されたのですが、もちろん全部B3のセルの日付の曜日です。 ここを変数にするにはどうしたらいいのでしょうか? とっても簡単なことのように思えますが、意外とハマってしまって抜け出せません。 よろしくお願いします。

  • エクセルVBAで複数セルをコピーの制御構文

    エクセルVBAで A8~I8のセルをコピーしてJ7~R7にコピーし、2行下に移り空白セルまで繰り返すという 処理をしたいと考えています Sub copy() Dim i As Integer i = 7 Do Until Cells(i, 1) = "" Cells(Cells(i,10),Cells(i,18).Value = Cells(Cells(i+1,1),Cells(i+1,9).Value i = i + 2 Loop End Sub と作ってみたところエラーで動きませんでした。 上記のプログラムはどこら辺がおかしいでしょうか? よろしくお願いします。

  • ExcelVBAで重複しているもの以外を抜き出したい

    Excelで以下のようなことをしたいのです。     A 1  みかん 2  りんご 3  みかん 4  めろん 5  りんご とあったとします。 この表から、重複したものははぶいてカウントしたいのですが、 どのようにしたらよいでしょうか? 【理想結果】    C     D 1 みかん   2 2 りんご    2 3 めろん   1 実際に試してみたコードは以下の通りです。 -------ここから---------- Dim i As Integer Dim i2 As Integer Dim Count As Integer Dim Name As String Dim Last As Integer For i = 1 To 5 'A列の1行目から5行目まで。 Last = Cells(3).CurrentRegion.Rows.Count 'C列の最終行を取得。 Name = Cells(i, 1) 'NameはA列の値。 For i2 = 1 To Last Select Case Name Case Is = Cells(i2, 3) Cells(Last + 1, 3) = "" Case Is <> Cells(i2, 3) Cells(Last + 1, 3) = Name End Select Next Next 上記コードを試すと、C列の1行目があいて2行目からA列をそのまま写した状態になってしまいます。 Ex2000です。

  • エクセルマクロで教えてください

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • 単純な掛け算なのにわけのわからない小数点が、、、

    表題のとおりですが、EXCEL VBAでシートと複合させて計算したところ次のような結果が出ました。 マクロは以下のとおりです。 Private Sub CommandButton1_Click()  Dim i As Integer Dim n As Integer Dim x As Integer Dim y As Single  Dim d1 As Single Dim d2 As Single  n = Range("L4").Value 'L4には現在399が入力されています。 y = Range("L2").Value 'L2には現在0.048が入力されています。  d1 = Range("D11").Value d2 = Range("E11").Value If n = 0 Then Exit Sub For i = 0 To n x = i + 6 Cells(x, 13) = i Cells(x, 14) = Cells(x, 13) * y Cells(x, 15) = Cells(x, 14) + d1 Cells(x, 16) = d2 - Cells(x, 14)     x = x + 1 Next i End Sub こうするとCells(7, 14)に0.0480000004172325という数字が入り始め、 続きも同じように小数点の小さい桁にわけの分からない数字が出て来ます。いったい何が原因か分かりません。 よろしくお願いします。

専門家に質問してみよう