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) これからもよろしくおねがいします。 ある文字列の中に、カンマ(,)が何個あるか、数えたいのですが、関数でそういうものはないでしょうか? 関数でできたら便利だなー・・・とおもって、質問させて頂きました。 |
▼初心者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 |
▼コロスケ さん: ▼初心者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 |
初心者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 |
▼初心者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 で確認しました。 |
みなさん、おはようございます >初心者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)。 |
▼りんさん みなさん、おはようございます > それも回答では? >ひでさん はい、回答として再投稿します。 ユーザーフォームにコマンドボタン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は、変更可能です。 こんなんでましたが〜 |
いつもありがとうございます。 納得いたしました。 お礼が遅くなって申し訳ありません。 |
こんにちは >関数でそういうものはないでしょうか? というので、りんさんの回答からアイディアを頂いて =LEN(A1)-LEN(SUBSTITUTE(A1,",","")) というのはどうでしょう。 |
>>初心者M さん みなさんの回答もいいのですが、こんな冗長なコーディングをするより RegExpオブジェクトを覚えたほうが将来の役にたちますよ。 |
▼あ さん: こんばんは。 >みなさんの回答もいいのですが、こんな冗長なコーディングをするより >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 |
こんにちは。 今朝、さかのぼってチェックしていたら、新たに回答をいただいていたので読ませて頂きました。 まだまだ(というか・・・まったく?)私は勉強が足りませんね。。。 結局、自分のわかる範囲で答えを出しました。 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 恥ずかしいのですが、上記のようにして使っています。 すごく勉強になるので、これからも宜しくお願いします。 |