過去ログ

                                Page     140
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼1つの文字列にカンマが何個あるか調べたい。  初心者M 02/8/26(月) 22:04
   ┣Re:1つの文字列にカンマが何個あるか調べた...  コロスケ 02/8/26(月) 23:31
   ┃  ┗Re:1つの文字列にカンマが何個あるか調べた...  ichinose 02/8/27(火) 0:04
   ┃     ┗Re:1つの文字列にカンマが何個あるか調べた...  こうちゃん 02/8/27(火) 8:49
   ┃        ┗Re:1つの文字列にカンマが何個あるか調べた...  ひで 02/8/27(火) 16:35
   ┃           ┗Re:1つの文字列にカンマが何個あるか調べた...  りん 02/8/28(水) 9:16
   ┃              ┗Re:1つの文字列にカンマが何個あるか調べた...  ひで 02/8/28(水) 10:10
   ┃                 ┗ありがとうございました。  初心者M 02/9/11(水) 18:43
   ┣Re:1つの文字列にカンマが何個あるか調べたい。  死馬骨 02/8/28(水) 12:47
   ┗冗長なコードはやめましょう  あ 02/9/11(水) 19:28
      ┗Re:冗長なコードはやめましょう  ichinose 02/9/11(水) 22:01
         ┗いろいろな方法があるんですね。驚!  初心者M 02/9/28(土) 9:20

 ───────────────────────────────────────
 ■題名 : 1つの文字列にカンマが何個あるか調べたい。
 ■名前 : 初心者M
 ■日付 : 02/8/26(月) 22:04
 -------------------------------------------------------------------------
   祝) VBA質問箱 IV!!!
しばらく見てなかったのでびっくりしました!!!
グリーンの背景、きれいです。(o^^o)
これからもよろしくおねがいします。

ある文字列の中に、カンマ(,)が何個あるか、数えたいのですが、関数でそういうものはないでしょうか?

関数でできたら便利だなー・・・とおもって、質問させて頂きました。
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : コロスケ <corosuke@chan.co.jp>  ■日付 : 02/8/26(月) 23:31  -------------------------------------------------------------------------
   ▼初心者M さん:

こんばんは。もっと簡単な方法があると思いますが、試しに簡単な関数を作ってみました。
Sub Testのようにして使います。お試しください。

Function CountString(ByVal find_text As String, ByVal within_text As String) As Long
'// 戻り値 Long型
'// find_text カウントしたい文字
'// within_text 検索したい文字列

  Dim i, j As Long
  i = 0
  Do
    i = Application.Search(find_text, within_text, i + 1)
    If Not IsError(i) Then
      j = j + 1
    Else
      Exit Do
    End If
  Loop While i + 1 <= Len(within_text)
  CountString = j
End Function

Sub test()
  Debug.Print CountString(",", "1,2,3,4,5,6,7")
End Sub
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : ichinose  ■日付 : 02/8/27(火) 0:04  -------------------------------------------------------------------------
   ▼コロスケ さん:
▼初心者M さん:
こんばんは。
初心者Mさん、IVの最初の実(?)投稿ですね。
Excel2000以上なら、こんな方法もいかがでしょうか?
Sub test()
  Dim sep() As String
  Dim ans As String
  ans = InputBox("input")
  sep() = Split(ans, ",")
  MsgBox UBound(sep())
End Sub
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : こうちゃん <nakajima19@hotmail.com>  ■日付 : 02/8/27(火) 8:49  -------------------------------------------------------------------------
   初心者M さん、ichinose さん、コロスケ さん、おはようございます

少し汎用に、分割数を返す関数を作ってみました。

Sub test()
  
  MsgBox SplitPartCount("aa,azxx,abzxd,eba", ",") - 1
  '"zx"での分割数ならこんな感じ
  'MsgBox SplitPartCount("aa,azxx,abzxd,eba", "zx") - 1

End Sub

Function SplitPartCount(TestStr As String, SepStr As String) As Integer
'検査文字列が分割文字で分けられる部分の数を返します。
'TestStr:検査文字列
'SepStr:分割文字(文字列)

  Static C_Count As Integer
  C_Count = 0
  
  If InStr(TestStr, SepStr) Then
    C_Count = SplitPartCount(Mid(TestStr, InStr(TestStr, SepStr) + 1), _
         SepStr)
  End If
  
  C_Count = C_Count + 1
  SplitPartCount = C_Count

End Function
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : ひで  ■日付 : 02/8/27(火) 16:35  -------------------------------------------------------------------------
   ▼初心者Mさん みなさん こんにちは

初心者Mさん、回答ではなくすいません
勉強させていただいてます。
下のようなコードでもできたのですが
みなさんいかがでしょうか?やっぱへんでしょうか?

Private Sub CommandButton1_Click()
ActiveCell.Activate

k1 = ","      ' 検索文字
c1 = 1       '左端から1番目から
r1 = Range("a1")  ' 検索対象の文字列があるセル
myinstr = 1
k2 = 0
k3 = -1


Do Until myinstr = 0
myinstr = InStr(c1, r1, k1, 1)
k2 = myinstr + 1
c1 = k2
k3 = k3 + 1
Loop

MsgBox prompt:=" " & k1 & " は " & k3 & "個です。"

End Sub

win95 エクセル97 で確認しました。
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 02/8/28(水) 9:16  -------------------------------------------------------------------------
   みなさん、おはようございます

>初心者Mさん、回答ではなくすいません
>勉強させていただいてます。
>下のようなコードでもできたのですが
 それも回答では? >ひでさん

半角256文字以内の短い文字列限定ですが、こんな方法もあります。

カンマを抜いて、文字列の長さで比較。
Sub Test()
  A1$ = "12,3,4,5,67"
  MsgBox Len(A1$) - _
     Len(Application.WorksheetFunction.Substitute(A1$, ",", "")) _
     , vbInformation, "カンマの数"
End Sub

VBAでは256文字以上を送るとエラーになりました(セルでは可能です)。Evaluateを使ってもだめでした(XL97)。
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べた...  ■名前 : ひで  ■日付 : 02/8/28(水) 10:10  -------------------------------------------------------------------------
   ▼りんさん みなさん、おはようございます

> それも回答では? >ひでさん

はい、回答として再投稿します。

ユーザーフォームにコマンドボタン1を作り
下記コードをはりつけてください

Private Sub CommandButton1_Click() ’に

'↓ここから
ActiveCell.Activate

k1 = ","      ' 検索文字
c1 = 1       '左端から1番目から
r1 = Range("a1")  ' 検索対象の文字列があるセル
myinstr = 1
k2 = 0
k3 = -1

Do Until myinstr = 0
myinstr = InStr(c1, r1, k1, 1)
k2 = myinstr + 1
c1 = k2
k3 = k3 + 1
Loop

MsgBox prompt:=" " & k1 & " は " & k3 & "個です。"
'↑ここまでをはりつけて
End Sub

上のk1 と r1は、変更可能です。
こんなんでましたが〜
 ───────────────────────────────────────  ■題名 : ありがとうございました。  ■名前 : 初心者M  ■日付 : 02/9/11(水) 18:43  -------------------------------------------------------------------------
   いつもありがとうございます。

納得いたしました。
お礼が遅くなって申し訳ありません。
 ───────────────────────────────────────  ■題名 : Re:1つの文字列にカンマが何個あるか調べたい。  ■名前 : 死馬骨  ■日付 : 02/8/28(水) 12:47  -------------------------------------------------------------------------
   こんにちは

>関数でそういうものはないでしょうか?
というので、りんさんの回答からアイディアを頂いて
=LEN(A1)-LEN(SUBSTITUTE(A1,",",""))
というのはどうでしょう。
 ───────────────────────────────────────  ■題名 : 冗長なコードはやめましょう  ■名前 : あ  ■日付 : 02/9/11(水) 19:28  -------------------------------------------------------------------------
   >>初心者M さん
みなさんの回答もいいのですが、こんな冗長なコーディングをするより
RegExpオブジェクトを覚えたほうが将来の役にたちますよ。
 ───────────────────────────────────────  ■題名 : Re:冗長なコードはやめましょう  ■名前 : ichinose  ■日付 : 02/9/11(水) 22:01  -------------------------------------------------------------------------
   ▼あ さん:
こんばんは。
>みなさんの回答もいいのですが、こんな冗長なコーディングをするより
>RegExpオブジェクトを覚えたほうが将来の役にたちますよ。
「冗長なコーディング」は、手厳しいですね。
でも、このオブジェクトは、大変参考になりました。ありがとうございます。これ使うと、こんな風にできるみたいです(まだ、冗長かもしれませんが)。
'=================================================================
Sub count_test()
  MsgBox (RegExpTest(",", "a,a,a,a"))
End Sub
'=================================================================
Function RegExpTest(patrn, strng)
  Dim regEx As RegExp
  Dim Matches As MatchCollection
  Set regEx = New RegExp 
  With regEx
   .Pattern = patrn
   .IgnoreCase = True 
   .Global = True 
   Set Matches = .Execute(strng)
   End With
  RegExpTest = Matches.Count
  Set Matches = Nothing
  Set regEx = Nothing
End Function
'
調べたら、ここに詳細がありました。
http://www.microsoft.com/japan/developer/library/script56/vtoriregularexpressionsobjectpropmeth.htm
 ───────────────────────────────────────  ■題名 : いろいろな方法があるんですね。驚!  ■名前 : 初心者M  ■日付 : 02/9/28(土) 9:20  -------------------------------------------------------------------------
   こんにちは。

今朝、さかのぼってチェックしていたら、新たに回答をいただいていたので読ませて頂きました。

まだまだ(というか・・・まったく?)私は勉強が足りませんね。。。
結局、自分のわかる範囲で答えを出しました。

  strTemp = Range("A1") ’カンマを数えたいセル
  i1 = 0
  Do Until Len(strTemp) <= 0
    i = InStr(strTemp, ",")
    If i = 0 Then
      Exit Do
    End If
    strTemp = Mid(strTemp, i + 1, Len(strTemp) - i)
    i1 = i1 + 1 '← カンマ数
  Loop

恥ずかしいのですが、上記のようにして使っています。

すごく勉強になるので、これからも宜しくお願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 140