Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


65773 / 76733 ←次へ | 前へ→

【15531】Re:指定した文字列を検索して結果を表示した...
回答  kein  - 04/6/28(月) 16:30 -

引用なし
パスワード
   InStr関数で取得できるのは、最初に見つかった位置だけです。だから複数の検索値
が含まれていると、初めに検索スタート位置を 1 にして 0 を返すかどうかチェックし
>0 ならカウンタ変数に +1 する。次に、見つかった位置 +1 をスタート位置にして
再度 InStr関数で調べる・・という処理を、0 が返るかスタート位置が検索対象文字列の
長さになるまで繰り返し行わないと、正しくカウントできません。これを検索文字の
種類の数だけ一つのセルについて調査し、それが終わってやっと次のセルへ移動・・。
という面倒なことをするしかなくなります。そこでこのような調査をする場合は、
正規表現を使うと簡素化できるわけです。以下のサンプルを試してみて下さい。
C列に文字列を入力したセルがないと、何も表示されずに終了します。

Sub MyCount_St()
  Dim C As Range
  Dim Sta As String, CkSt As String
  Dim Ct1 As Long, Ct2 As Long, Ct3 As Long, Ct4 As Long
  Dim ObjRE As Object, Match As Object, Matches As Object
   
  Sta = "・"
  Set ObjRE = CreateObject("VBScript.RegExp")
  With ObjRE
   .Pattern = "[\40\42\47" & Sta & "]"
   .Global = True
  End With
  On Error GoTo ErLine
  For Each C In Range("C:C").SpecialCells(2, 2)
   CkSt = C.Value
   If ObjRE.Test(CkSt) Then
     Set Matches = ObjRE.Execute(CkSt)
     For Each Match In Matches
      Select Case Match.Value
        Case " "
          Ct1 = Ct1 + 1
        Case "・"
          Ct2 = Ct2 + 1
        Case """"
          Ct3 = Ct3 + 1
        Case "'"
          Ct4 = Ct4 + 1
      End Select
     Next
     Set Matches = Nothing
   End If
  Next
  MsgBox "半角スペース = " & Ct1 & vbLf & _
  "中黒 = " & Ct2 & vbLf & "ダブルクォーテーション = " & _
  Ct3 & vbLf & "シングルクォーテーション = " & Ct4, , _
  "検索文字の個数": Exit Sub
ErLine:
  Set ObjRE = Nothing
End Sub
1 hits

【15516】指定した文字列を検索して結果を表示した... Ark 04/6/28(月) 9:52 質問
【15518】Re:指定した文字列を検索して結果を表示し... IROC 04/6/28(月) 10:21 回答
【15519】Re:指定した文字列を検索して結果を表示し... ちゃっぴ 04/6/28(月) 10:21 発言
【15523】Re:指定した文字列を検索して結果を表示し... Ark 04/6/28(月) 11:41 お礼
【15524】Re:指定した文字列を検索して結果を表示し... IROC 04/6/28(月) 12:34 回答
【15525】Re:指定した文字列を検索して結果を表示し... Ark 04/6/28(月) 14:52 質問
【15531】Re:指定した文字列を検索して結果を表示し... kein 04/6/28(月) 16:30 回答
【15532】Re:指定した文字列を検索して結果を表示し... kein 04/6/28(月) 16:38 回答
【15529】Re:指定した文字列を検索して結果を表示し... Ark 04/6/28(月) 15:37 お礼

65773 / 76733 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free